Как правильно кодировать категории для sklearn - ошибка памяти для дерева решений - PullRequest
0 голосов
/ 09 апреля 2020

это первый раз, когда я подхожу к библиотеке sklearn, и, честно говоря, у меня в голове беспорядок из-за многочисленных "способов сделать что-то", которые я нашел в inte rnet. Итак, у меня есть очищенная база данных, которая выглядит следующим образом:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 246858 entries, 2 to 371527
Data columns (total 11 columns):
name                  246858 non-null object
price                 246858 non-null int64
vehicleType           246858 non-null object
yearOfRegistration    246858 non-null int64
gearbox               246858 non-null object
powerPS               246858 non-null int64
model                 246858 non-null object
kilometer             246858 non-null int64
fuelType              246858 non-null object
brand                 246858 non-null object
notRepairedDamage     246858 non-null object
dtypes: int64(4), object(7)
memory usage: 22.6+ MB

Поэтому я хочу продолжить классификацию по переменной цены. Очевидно, я должен закодировать категориальные:

categorical = ['name', 'vehicleType', 'gearbox', 'model', 'fuelType', 'brand', 'notRepairedDamage']

И вот в чем проблема. Я всегда получаю ошибку памяти. Я попытался с картографом dataframe:

encoding = DataFrameMapper([
    (['name', 'vehicleType', 'gearbox', 'model', 'fuelType', 'brand', 'notRepairedDamage'], 
      OneHotEncoder(handle_unknown='ignore')),    
    (["price", "yearOfRegistration", "powerPS", "kilometer"], None)
])
encoding_target = DataFrameMapper([
    (['price'], none)
])

И сейчас это нормально, допустим, я хочу попробовать дерево классификации, мне нужно создать поезд и проверить, но прежде чем я должен применить преобразование:

X = encoding.transform(data.loc[:, data.columns != "price"])

в этот момент я получаю ошибку памяти. И я не могу понять это

1 Ответ

0 голосов
/ 10 апреля 2020

Попробуйте это:

for cat in categorical:
    data[cat] = data[cat].astype('category')
    data[cat] = data[cat].cat.codes
...