一个热编码错误 python 机器学习
One hot encoding error python machine learning
我在机器中使用分类变量 Learning.Here 是我的数据样本:
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
有两个分类变量性别 height.I 使用了 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' column.Also 的值在哪里 data.shape 是 (4,8) 而不是 (4, 7)即(性别由 2 列表示,class 由 3 和 'age' 和 'height' 特征表示。
您确定需要使用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 列,您将得到想要的结果。
我在机器中使用分类变量 Learning.Here 是我的数据样本:
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
有两个分类变量性别 height.I 使用了 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' column.Also 的值在哪里 data.shape 是 (4,8) 而不是 (4, 7)即(性别由 2 列表示,class 由 3 和 'age' 和 'height' 特征表示。
您确定需要使用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 列,您将得到想要的结果。