Python 如何利用OneHotEncoder的阵列输出
这里是Python初学者 试图了解如何使用sklearn.preprocessing库中的OneHotEncoder。我非常有信心将其与fit_transform结合使用,这样结果也可以适合测试数据帧。我感到困惑的是如何处理生成的编码数组。然后,您是否将ohe结果转换回数据帧,并将其附加到现有的列车/测试数据帧 ohe方法似乎比pd.get_dummies方法麻烦得多,但据我所知,使用ohe和fit_变换可以更容易地将相同的变换应用于测试数据 搜索了几个小时,为了找到一个好的答案遇到了很多麻烦 广泛使用的泰坦尼克号数据集示例:Python 如何利用OneHotEncoder的阵列输出,python,python-3.x,machine-learning,scikit-learn,data-science,Python,Python 3.x,Machine Learning,Scikit Learn,Data Science,这里是Python初学者 试图了解如何使用sklearn.preprocessing库中的OneHotEncoder。我非常有信心将其与fit_transform结合使用,这样结果也可以适合测试数据帧。我感到困惑的是如何处理生成的编码数组。然后,您是否将ohe结果转换回数据帧,并将其附加到现有的列车/测试数据帧 ohe方法似乎比pd.get_dummies方法麻烦得多,但据我所知,使用ohe和fit_变换可以更容易地将相同的变换应用于测试数据 搜索了几个小时,为了找到一个好的答案遇到了很多麻烦
ohe = OneHotEncoder()
imp = SimpleImputer()
ct = make_column_transformer(
(imp, ['Age']),
(ohe, ['Sex', 'Embarked']),
remainder='passthrough')
ct.fit_transform(train)
结果:
array([[22. , 0. , 1. , ..., 1. ,
0. , 7.25 ],
[38. , 1. , 0. , ..., 1. ,
0. , 71.2833 ],
[26. , 1. , 0. , ..., 0. ,
0. , 7.925 ],
...,
[29.69911765, 1. , 0. , ..., 1. ,
2. , 23.45 ],
[26. , 0. , 1. , ..., 0. ,
0. , 30. ],
[32. , 0. , 1. , ..., 0. ,
0. , 7.75 ]])
您是否将生成的数组直接传递到变量中,例如,X和y用于train_test_split以运行的最终模型?或者有没有办法将结果转换回带有列标签的数据帧,以便进一步EDA?您的直觉是正确的:
pandas.get\u dummies()
使用起来容易得多,但使用OHE的优点是,它总是对看不见的数据应用相同的转换。您还可以使用pickle
或joblib
导出实例,并将其加载到其他脚本中
有一种方法可以直接将编码列重新附加回原始的pandas.DataFrame
。就我个人而言,我一直在努力。也就是说,我安装编码器,转换数据,将输出连接回数据帧,并删除原始列
#要编码的列
cols=['性别','登船']
#初始化编码器
ohe=OneHotEncoder()
#适合数据
ohe.fit(df[cols])
#将编码数据声明为`df'中的新列`
df[ohe.get\u feature\u names]=ohe.transform(df[cols])
#删除未编码的列
落差(cols,轴=1,原地=True)
最后,我注意到你说:
我非常有信心将其与fit_transform结合使用,这样结果也可以适合测试数据帧
我想指出的是,您应该不要再安装编码器!相反,在处理新数据时,应该使用
ohe.transform(X_test[cols])
。不要再次使用fit\u transform()
,否则结果可能会因数据集而异。谢谢Arturo!是的,我很高兴你指出,这与测试数据不符。似乎使用OneHotEncoder有很多优点,但我很少看到它实现。