我正在使用机器学习中的分类变量,这是我的数据示例:

age,gender,height,class,label
25,m,43,A,0
35,f,45,B,1
12,m,36,C,0
14,f,42,A,0


有两个类别变量,性别和身高。我使用了LabelEncoding技术。

我的代码:

import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder,OneHotEncoder

df=pd.read_csv('test.csv')

X=df.drop(['label'],1)
y=np.array(df['label'])

data=X.iloc[:,:].values

lben = 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.0
0.0 0.0 0.0 1.0 1.0 0.0 35.0 1.0
1.0 0.0 0.0 0.0 0.0 1.0 12.0 2.0
0.0 1.0 0.0 0.0 1.0 0.0 14.0 0.0


我无法理解为什么列是这样的,即'height'列的值在哪里。而且data.shape是(4,8)而不是(4,7)ie(gender由2列和类表示按3和“年龄”和“身高”功能。

最佳答案

确定要使用LabelEncoder+OneHotEncoder吗?有一个简单得多的方法(不允许执行高级过程,但是到目前为止,您似乎已经在基础上工作了):

import pandas as pd
import numpy as np

df=pd.read_csv('test.csv')

X=df.drop(['label'],1)
y=np.array(df['label'])

data = pd.get_dummies(X)




当前代码的问题是在完成第一个OHE之后:

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


列会移位,而列3实际上是原始的height列,而不是标签编码的class列。因此,将第二个更改为使用第4列,您将获得所需的内容。

关于python - 一种热编码错误python机器学习,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50895798/

10-12 23:57