python - 如何在机器学习中对数值和分类特征使用统一管道?

标签 python machine-learning scikit-learn

想要在分类特征上运行编码器,在数值特征上运行 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/

相关文章:

python-2.7 - 如何使用 itertool 进行列相交

python - 将 PCA 应用于 Scikit-learn 中的新数据

python - 我正在学习Python数据科学手册,并使用相同的代码得到了不同的图表。怎么了?

python - 使用列表在 NumPy 中定义数据类型?

python - Django 是否支持在许多非抽象模型之后继承的模型类?

python - 在通过python中的xml.etree.ElementTree生成的xml文件中插入换行符

machine-learning - 如何计算平均排名(MAR)?

python - 使用OpenCV Python更改视频中的单色

machine-learning - 使用Weka玩游戏

python - scikit learn 中不同数据类型的自定义管道