Как указать метку категориального столбца, используя метку данных поезда?

#python #machine-learning #scikit-learn #random-forest

#питон #машинное обучение #scikit-учиться #случайный лес

Вопрос:

Поэтому я использую некоторые данные для создания модели случайного леса. Существует несколько категориальных столбцов, и я меняю их на числовые, используя sklearn LabelEncoder. Например, «мужчина» и «женщина» с меткой be как «0» и «1» соответственно. Затем я использую модель для прогнозирования отдельных данных. Прежде чем прогнозировать данные, я также меняю категориальный на числовой. Затем я понимаю, что метка всегда одинакова для отдельных данных, даже категориальные данные разные. Например (единичные данные), мужчина и женщина помечены как «0», а остальные тоже одинаковые. Это делает мою модель непригодной для использования. Должен ли я просто сделать руководство по этикетке или у меня есть какая-то идея?

часть кода

 label = LabelEncoder()
train_data['gender'] = label.fit_transform(train_data['gender'])
train_data['ever_married'] = label.fit_transform(train_data['ever_married'])
train_data['work_type'] = label.fit_transform(train_data['work_type'])
train_data['Residence_type'] = label.fit_transform(train_data['Residence_type'])
train_data['smoking_status'] = label.fit_transform(train_data['smoking_status'])
 

Комментарии:

1. попробуйте подсчитать кодировщик contrib.scikit-learn.org/category_encoders/count.html

2. использование labelencoder таким образом приведет к множественным значениям числа, т.Е. 0 может означать «мужчина», а также «женат», … и т.д.,

Ответ №1:

Я думаю, это потому, что вы всегда используете метод fit_transform в одном и том же экземпляре encoder

Вы должны использовать другой кодер меток для каждой категории с помощью метода fit , а затем преобразовать ваш единственный экземпляр с помощью этого кодера с помощью его transform кодера метода

 encoder_gender = LabelEncoder()
train_data_gender = encoder_gender.fit_transform(train_data['gender'])
encoder_gender.transform(single_data)
 

Если вы вызываете fit_transform с одним и тем же экземпляром encoder ( label в вашем случае) для разных категорий, вы каждый раз меняете значение этого кодера и способ, которым он кодирует данные