Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何利用OneHotEncoder的阵列输出_Python_Python 3.x_Machine Learning_Scikit Learn_Data Science - Fatal编程技术网

Python 如何利用OneHotEncoder的阵列输出

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_变换可以更容易地将相同的变换应用于测试数据 搜索了几个小时,为了找到一个好的答案遇到了很多麻烦

这里是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有很多优点,但我很少看到它实现。