Как использовать OneHotEncoder и Pipeline, чтобы делать новые прогнозы? - PullRequest
0 голосов
/ 17 июня 2020

Я работаю над учебником, посвященным OneHotEncoder. Я понимаю, что такое функции кодирования, но у меня возникла небольшая проблема с использованием кодировщика с конвейером для создания нового прогноза. Две характеристики - «Секс» и «Встал» - скорее категориальные, чем числовые. При создании нового массива numpy для прогнозирования вы используете начальные значения, скажем, «мужской» и «C», или, скажем, «1» и «2», чтобы сделать новый прогноз? Я получаю следующую ошибку: «ValueError: указание столбцов с использованием строк поддерживается только для pandas DataFrames», что странно, учитывая, что значения, которые я использую, являются числовыми. В любом случае, придется ли мне подогнать конвейер к X_new, чтобы сделать новый прогноз? Если да, то как я могу это сделать?

X_new = [[3, 1, 0]] OR X_new = [['3','male', 'C']]

pipe.predict(X_new)

Полный код:

import pandas as pd

import numpy as np


df = pd.read_csv("https://raw.githubusercontent.com/---/pandas-videos/master/data/titanic_train.csv")


from sklearn.linear_model import LogisticRegression

logreg = LogisticRegression(solver='lbfgs')



from sklearn.model_selection import cross_val_score

cross_val_score(logreg, X, y, cv=5, scoring='accuracy').mean()


from sklearn.preprocessing import OneHotEncoder

ohe = OneHotEncoder(sparse=False)


X = df.drop('Survived', axis='columns')


from sklearn.compose import make_column_transformer

column_trans = make_column_transformer(

  (OneHotEncoder(), ['Sex', 'Embarked']),

remainder='passthrough')


column_trans.fit_transform(X)


from sklearn.pipeline import make_pipeline

pipe = make_pipeline(column_trans, logreg)



cross_val_score(pipe, X, y, cv=5, scoring='accuracy').mean()



X_new = [[3, 1, 0]]

pipe.predict(X_new)

1 Ответ

0 голосов
/ 17 июня 2020

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

Например, столбец «Пол» содержит «мужской» и «женский», тогда он преобразует исходный столбец в 2 столбца «мужской» и «женский». Это отличается от LabelEncoder.

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

pipe.fit(X,y)

а затем вы можете применить прогноз. Это пример, когда я применяю 3 функции, такие как Пол, Возраст, и встал, и применил OHE к Полу, и приступил. 'Survived'), что составляет 11 характеристик. количество входных данных должно быть равно или больше, чем у подобранной модели, в то время как вы применяете только 3 столбца, которые могут вызывать подсказки и ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...