我正在使用sklearn的OneHotEncoder,但想要转换我的数据。知道怎么做吗?
>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
>>> enc.n_values_
array([2, 3, 4])
>>> enc.feature_indices_
array([0, 2, 5, 9])
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]])
但我希望能够做到以下几点:
>>> enc.untransform(array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]]))
[[0, 1, 1]]
我将如何做到这一点?
对于上下文,我构建了一个神经网络来学习单热编码空间,并希望现在使用nn进行需要采用原始数据格式的真实预测。
答案 0 :(得分:1)
用于反转单个热门编码项
见:https://stackoverflow.com/a/39686443/7671913
from sklearn.preprocessing import OneHotEncoder
import numpy as np
orig = np.array([6, 9, 8, 2, 5, 4, 5, 3, 3, 6])
ohe = OneHotEncoder()
encoded = ohe.fit_transform(orig.reshape(-1, 1)) # input needs to be column-wise
decoded = encoded.dot(ohe.active_features_).astype(int)
assert np.allclose(orig, decoded)
对于反转一个热门编码项目的数组,请参阅(如评论中所述)
看到:
How to reverse sklearn.OneHotEncoder transform to recover original data?
鉴于sklearn.OneHotEncoder实例名为ohc,从ohc.fit_transform或ohc.transform输出的编码数据(scipy.sparse.csr_matrix)调出,并且原始数据的形状(n_samples,n_feature)恢复原始数据数据X用:
recovered_X = np.array([ohc.active_features_[col] for col in out.sorted_indices().indices])
.reshape(n_samples, n_features) - ohc.feature_indices_[:-1]