sklearn Логистическая регрессия ValueError: X имеет 42 функции на выборку;ожидая 1423 - PullRequest
1 голос
/ 11 ноября 2019

Я застрял, пытаясь решить проблему. Вот что я пытаюсь сделать:

Я хотел бы предсказать пропущенные значения (Nan) (категориальные), используя логистическую регрессию. Вот мой код:

df_1: мой набор данных с пропущенными значениями только в функции "Метье" (пропущенные значения, которые я пытаюсь предсказать)

X_train = pd.get_dummies(df_1[df_1['Metier'].notnull()].drop(columns='Metier'),drop_first = True)
X_test = pd.get_dummies(df_1[df_1['Metier'].isnull()].drop(columns='Metier'),drop_first = True,dummy_na = True)

Y_train = df_1[df_1['Metier'].notnull()]['Metier']
Y_test = df_1[df_1['Metier'].isnull()]['Metier']

from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression(random_state = 0)

classifier.fit(X_train, Y_train)

classifier.score(X_train,Y_train) = 0.705112088833019

НО, когда я пытаюсьчтобы получить прогноз на Y_test В нем говорится:

ValueError: X имеет 42 функции на выборку;ожидая 1423

Я был бы очень признателен, если бы кто-нибудь мог мне помочь.

Большое спасибо:)

1 Ответ

0 голосов
/ 11 ноября 2019

Эмпирическое правило: никогда , используйте pandas.get_dummies на нескольких фреймах данных. Это не гарантирует вам тот же размер.

import pandas as pd

print(pd.get_dummies(['a', 'b', 'c']))
   a  b  c
0  1  0  0
1  0  1  0
2  0  0  1

print(pd.get_dummies(['b', 'c']))
   b  c
0  1  0
1  0  1

Это безопасно, только если вы сначала pandas.get_dummies , а затем разделите на x_train и x_test. Но вместо этого вы можете использовать sklearn.preprocessing.OneHotEncoder:

import numpy as np
from sklearn.preprocessing import OneHotEncoder

ohe = OneHotEncoder(sparse=False)

ohe.fit_transform(np.reshape(['a', 'b', 'c'], (-1, 1)))

array([[1., 0., 0.],
       [0., 1., 0.],
       [0., 0., 1.]])

ohe.transform(np.reshape(['b', 'c'], (-1, 1))) # Its transform, NOT fit_transform
array([[0., 1., 0.],
       [0., 0., 1.]])

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

...