Одна горячая ошибка кодирования Python машинного обучения

1

Я работаю с категориальными переменными в Machine Learning. Вот пример моих данных:

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

Я не могу понять, почему столбец подобен этому, т.е. Где значение столбца "высота". Также data.shape - это (4,8) вместо (4,7), т.е. (Пол представлен двумя столбцами и классом на 3 и "возраст" и "высота".

Теги:
machine-learning
one-hot-encoding

1 ответ

1
Лучший ответ

Вы уверены, что вам нужно использовать 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, и вы получите то, что хотите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню