Python机器学习中的独热编码错误

我在机器学习中处理分类变量。这是我的数据样本:

age,gender,height,class,label25,m,43,A,035,f,45,B,112,m,36,C,014,f,42,A,0

有两个分类变量:性别和身高。我使用了标签编码技术。

我的代码如下:

import pandas as pdimport numpy as npfrom sklearn.preprocessing import LabelEncoder,OneHotEncoderdf=pd.read_csv('test.csv')X=df.drop(['label'],1)y=np.array(df['label'])data=X.iloc[:,:].valueslben = LabelEncoder()data[:,1] = lben.fit_transform(data[:,1])data[:,3] = lben.fit_transform(data[:,3])onehotencoder = OneHotEncoder(categorical_features=[1])data = onehotencoder.fit_transform(data).toarray()onehotencoder = OneHotEncoder(categorical_features=[3])data = onehotencoder.fit_transform(data).toarray()print(data.shape)np.savetxt('data.csv',data,fmt='%s')    

data.csv文件看起来像这样:

0.0 0.0 1.0 0.0 0.0 1.0 25.0 0.00.0 0.0 0.0 1.0 1.0 0.0 35.0 1.01.0 0.0 0.0 0.0 0.0 1.0 12.0 2.00.0 1.0 0.0 0.0 1.0 0.0 14.0 0.0

我无法理解为什么列会变成这样,即’height’列的值在哪里。此外,data.shape是(4,8),而不是我期望的(4,7),即(性别由2列表示,类别由3列表示,’age’和’height’特征)。


回答:

你确定需要使用LabelEncoder+OneHotEncoder吗?有一个更简单的方法(虽然不允许进行高级操作,但到目前为止你似乎只是在处理基础内容):

import pandas as pdimport numpy as npdf=pd.read_csv('test.csv')X=df.drop(['label'],1)y=np.array(df['label'])data = pd.get_dummies(X)

当前代码的问题在于,在你完成第一次独热编码后:

onehotencoder = OneHotEncoder(categorical_features=[1])data = onehotencoder.fit_transform(data).toarray()

列的位置发生了变化,第三列实际上是原始的height列,而不是标签编码后的class列。所以将第二次编码改为使用第四列,你就能得到你想要的结果。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注