在sklearn 0.22版本中,categorical_features参数将被移除,因此以下代码将不再能执行:
import numpy as npfrom sklearn.preprocessing import OneHotEncoderX = np.array([[1, 1], [2, 2], [1, 3]])encoder = OneHotEncoder(categorical_features=[1], sparse=False)print(encoder.fit_transform(X))
问题是,如何使用categories参数实现与上述代码相同的行为,因为OneHotEncoder(categories=[[1, 2], [1, 2, 3]], sparse=False)
也会编码第一列,而OneHotEncoder(categories=[[1, 2, 3]], sparse=False)
会抛出错误
回答:
好的,基本来说,您希望对第二列[1,2,3]进行独热编码,并保持第一列[1,2,1]不变。在较新的sklearn版本中,您可以使用ColumnTransformer来组合不同的预处理过程,如下所示:
import numpy as npfrom sklearn.compose import ColumnTransformerfrom sklearn.preprocessing import OneHotEncoderX = np.array([[1, 1], [2, 2], [1, 3]])encoder = ColumnTransformer( [('number1', OneHotEncoder(dtype='int'), [1])], remainder="passthrough")print(encoder.fit_transform(X))
这样您就不需要使用categories来指定值范围。请参考文档了解更多细节。