Как кодировать категориальные данные в метки для обучения и тестирования - PullRequest
0 голосов
/ 11 июля 2020

В наборе обучающих данных есть столбцы объектов, называемые магазинами и т. Д. Теперь для модели машинного обучения я преобразовал столбцы в метки для учебных целей. Используя приведенный ниже код

from sklearn.ensemble import RandomForestRegressor
X = df_all_4.copy()
y = df_all_4.item_price
X = X.drop(['item_price','date'], axis=1)
for c in df_all_4.columns[df_all_4.dtypes == 'object']:
    X[c] = X[c].factorize()[0]
rf = RandomForestRegressor()
rf.fit(X,y)

Теперь тестовый набор данных также имеет эти категориальные столбцы, но с некоторыми отсутствующими столбцами, включая целевой столбец, здесь, я думаю, не имеет значения. Но если я снова помечу набор данных для обучения (неупорядоченный), метки будут отличаться от метки, использованной при обучении , поэтому модель не будет работать должным образом. Как решить эту проблему и получить одинаковые кодировки при обучении и тестировании

1 Ответ

0 голосов
/ 11 июля 2020

Здесь важно то, что вы можете использовать классы LabelEncoder или OneHotEncoder, присутствующие в пакете Sklearn. что делает эту задачу довольно простой.

from sklearn.preprocessing import LabelEncoder,OneHotEncoder
for c in df_all_4.columns[df_all_4.dtypes == 'object']:
    le = LabelEncoder()
    X[c] = le.fit_transform(X[c])
    test[c] = le.transform(test[c])

Вот и все, что вы закодировали метки в числа как для обучающих, так и для тестовых данных. Вы также можете использовать OneHotEncoder, который выполняет OneHotEncoding для категориальных данных.

...