想要在分类特征上运行编码器,在数值特征上运行 Imputer(见下文)并将它们统一在一起。
例如,具有分类特征的数值:
df_with_cat = pd.DataFrame({
'A' : ['ios', 'android', 'web', 'NaN'],
'B' : [4, 4, 'NaN', 2],
'target' : [1, 1, 0, 0]
})
df_with_cat.head()
A B target
----------------------
0 ios 4 1
1 android 4 1
2 web NaN 0
3 NaN 2 0
我们希望在数值特征上运行 Imputer,即用“most_frequent”/“median”/“mean”==> Pipeline 1 替换缺失值/NaN。但是我们想将分类特征转换为数字/OneHotEncoding 等 ==> 管道 2
统一它们的最佳实践是什么?
p.s: 将以上2与分类器统一...(random forest/decision tree/GBM)
最佳答案
正如@Sergey Bushmanov 所提到的,ColumnTransformer 可用于实现相同的目的。
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder
df = pd.DataFrame({
'A' : ['ios', 'android', 'web', 'NaN'],
'B' : [4, 4, 'NaN', 2],
'target' : [1, 1, 0, 0]
})
categorical_features = ['A']
numeric_features = ['B']
TARGET = ['target']
df[numeric_features]=df[numeric_features].replace('NaN', np.NaN)
columnTransformer = ColumnTransformer(
transformers=[
('cat', OneHotEncoder(), categorical_features),
('num', SimpleImputer( strategy='most_frequent'), numeric_features)])
columnTransformer.fit_transform(df)
#
array([[0., 0., 1., 0., 4.],
[0., 1., 0., 0., 4.],
[0., 0., 0., 1., 4.],
[1., 0., 0., 0., 2.]])
关于python - 如何在机器学习中对数值和分类特征使用统一管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54646785/