#python #machine-learning #dataset #random-forest
#питон #машинное обучение #набор данных #случайный лес
Вопрос:
Мой образец набора данных выглядит следующим образом —
Мои X_train
функции 'Gender', 'Age', 'Leisure', 'Married', 'Division'
amp; y_train это 'Online Shopping'
Моя последняя часть кода выглядит так —
from sklearn.ensemble import RandomForestClassifier #rfc_100 = RandomForestClassifier(n_estimators=100, random_state=0) rfc = RandomForestClassifier(random_state=0) # fit the model rfc.fit(X_train, y_train) # Predict the Test set results y_pred = rfc.predict(X_test) # Check accuracy score from sklearn.metrics import accuracy_score print('Model accuracy score with 10 decision-trees : {0:0.4f}'. format(accuracy_score(y_test, y_pred)))
Теперь мой вопрос в том, как мне использовать эту уже построенную модель и проверить прогноз? Например, я хочу внести такой вклад 'Son 19-30 Games Yes C'
, и я хочу посмотреть, каков прогноз интереса к онлайн-покупкам.Вывод должен быть » Да » или «Нет».
Процесс кодирования-
#Labeling import category_encoders as ce encoder1 = ce.OrdinalEncoder(cols=['Gender', 'Age', 'Leisure', 'Married', 'Division']) X_train = encoder1.fit_transform(X) X_test = encoder1.transform(X) encoder2= ce.OrdinalEncoder(cols=['Online Shopping']) #y_test is True Online Shopping labels #y_pred is predicted Online Shopping label in test set y_train = encoder2.fit_transform(y) y_test = encoder2.transform(y)
Комментарии:
1. Вы пробовали использовать
rfc.predict
?2. Нет. Возвращает ли он вывод для индивидуального ввода?
3. Кроме того, мне нужно преобразовать «Сын 19-30 игр Да С» в ярлык сначала здесь
4. Да, он возвращает вывод для индивидуального ввода. Вы должны структурировать «Сын 19-30 игр Да С» так же , как вы структурируете
X_test
, за исключением только одной точки данных5. Я использовал кодировщик категорий для структурирования x_test. Поэтому, если я снова использую кодер категорий здесь для нового фрейма данных, то маркировка не будет такой же, как раньше.
Ответ №1:
Попробуйте это:
d = {'Gender': ['Son'], 'Age': ['19-30'], 'Leisure': ['Games'], 'Married': ['Yes'], 'Division': ['C']} df_dp = pd.DataFrame(data=d) x_dp = encoder1.transform(df_dp) print(encoder2.inverse_transform(rfc.predict(x_dp)))
где df_dp-это фрейм данных pandas для одной точки данных, и мы кодируем его, а затем показываем прогноз с помощью rfc.predict()
Я также заметил из вашего кода, что X_train
и X_test
взяты из одного и того же набора данных. Это не должно быть так: обучающие данные используются для обучения модели, в то время как данные тестирования используются для проверки того, насколько хорошо модель обобщается на невидимые данные. Вот почему ваши данные обучения и данные тестирования должны отличаться.
Комментарии:
1. На самом деле я разделил набор данных раньше так: X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0,33, random_state = 42)
2. Похоже, вы переопределяете их этими строками кода X_train = кодировщик 1.fit_transform(X) X_test = кодировщик 1.преобразование(X)
3. Я изменил свой код на этот кодер1 = ce.Обычный кодер(cols=[«Пол», «Возраст», «Досуг», «Женат», «Подразделение»]) X_train = кодировщик 1.fit_transform(X_train) X_test = кодировщик 1.преобразование(X_test) кодировщик 2= ce.Обычный кодировщик(cols=[‘Интернет-магазины’]) #y_test-это истинные ярлыки онлайн-покупок #y_pred-прогнозируемая метка онлайн-покупок в наборе тестов y_train = кодировщик 2.fit_transform(y_train) y_test = кодировщик 2.преобразование(y_test)
4. Это решает проблему разделения теста на поезд! Удалось ли мне ответить на ваш вопрос?