gpt4 book ai didi

python - OneHotEncoder 对属于同一类别的多个列进行处理

转载 作者:行者123 更新时间:2023-12-01 08:53:56 26 4
gpt4 key购买 nike

我有多列由分类变量组成,这些变量的形式为 0-4 之间的整数值。但是,所有列都属于同一类别。我尝试使用 scikit learn 中的 OneHotEncoder,但它不会处理列中缺失的类别,这在我在神经网络模型上测试看不见的数据时会导致问题。下面的代码显示了我需要编码的数据类型

>>> df = pd.DataFrame(np.random.randint(low=0, high=4, size=(5, 5)),
columns=['color1', 'color2', 'color3', 'color4', 'color5'])
>>> df

color1 color2 color3 color4 color5
0 0 1 2 3 1
1 3 1 0 1 1
2 0 1 0 3 0
3 0 2 0 1 2
4 0 2 0 3 2

>>> df_onehotencoder = OneHotEncoder(sparse=False)
>>> df2 = df_onehotencoder.fit_transform(df)

>>> df2

array([[1., 0., 1., 0., 0., 1., 0., 1., 0., 1., 0.],
[0., 1., 1., 0., 1., 0., 1., 0., 0., 1., 0.],
[1., 0., 1., 0., 1., 0., 0., 1., 1., 0., 0.],
[1., 0., 0., 1., 1., 0., 1., 0., 0., 0., 1.],
[1., 0., 0., 1., 1., 0., 0., 1., 0., 0., 1.]])

这只会为每列生成该列中存在的类别的数组,而不是缺少的类别。我需要为每列提供相同数量的编码列,即缺失的类别将全为零。另外,解码这个 OneHotEncoded 数组的最佳选择是什么,这样我就可以轻松地将预测输出解码为实际整数值。

最佳答案

sklearn==0.20 开始,OneHotEncoder 具有 categories 参数,您可以在其中提供包含给定列的所有可能值的列表列表。

import pandas as pd
df = pd.DataFrame([[0, 1, 2, 3, 1],
[3, 1, 0, 1, 1],
[0, 1, 0, 3, 0],
[0, 2, 0, 1, 2],
[0, 2, 0, 3, 2]], columns=['color1', 'color2', 'color3', 'color4', 'color5'])

from sklearn.preprocessing import OrdinalEncoder, OneHotEncoder

# Get all the unique values if we don't have them
unique_values = pd.unique(df.values.ravel())

ohe = OneHotEncoder(categories=[unique_values]*df.shape[1], sparse=False)
encoded = pd.DataFrame(ohe.fit_transform(
df), columns=ohe.get_feature_names(df.columns))
>>> encoded

color1_0 color1_1 color1_2 color1_3 color2_0 color2_1 0
0 1.0 0.0 0.0 0.0 0.0 1.0 ...
1 0.0 0.0 0.0 1.0 0.0 1.0 ...
2 1.0 0.0 0.0 0.0 0.0 1.0 ...
3 1.0 0.0 0.0 0.0 0.0 0.0 ...
4 1.0 0.0 0.0 0.0 0.0 0.0 ...

要取回原始类,您可以执行inverse_transform:

>>> ohe.inverse_transform(encoded) 
array([[0, 1, 2, 3, 1],
[3, 1, 0, 1, 1],
[0, 1, 0, 3, 0],
[0, 2, 0, 1, 2],
[0, 2, 0, 3, 2]], dtype=int64)

关于python - OneHotEncoder 对属于同一类别的多个列进行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52905671/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com