【发布时间】:2018-08-02 09:42:20
【问题描述】:
在为机器学习分类任务预处理标签时,我需要对采用字符串值的标签进行热编码。碰巧来自sklearn.preprocessing 的OneHotEncoder 或来自kera.np_utils 的to_categorical 需要int 输入。这意味着我需要在一个热编码器之前加上LabelEncoder。我用自定义类手工完成了它:
class LabelOneHotEncoder():
def __init__(self):
self.ohe = OneHotEncoder()
self.le = LabelEncoder()
def fit_transform(self, x):
features = self.le.fit_transform( x)
return self.ohe.fit_transform( features.reshape(-1,1))
def transform( self, x):
return self.ohe.transform( self.la.transform( x.reshape(-1,1)))
def inverse_tranform( self, x):
return self.le.inverse_transform( self.ohe.inverse_tranform( x))
def inverse_labels( self, x):
return self.le.inverse_transform( x)
我相信在 sklearn API 中必须有一种使用sklearn.pipeline 的方法,但是在使用时:
LabelOneHotEncoder = Pipeline( [ ("le",LabelEncoder), ("ohe", OneHotEncoder)])
我从OneHotEncoder 收到错误ValueError: bad input shape ()。我的猜测是LabelEncoder 的输出需要通过添加一个微不足道的第二个轴来重塑。我不确定如何添加此功能。
【问题讨论】:
标签: python scikit-learn one-hot-encoding