【问题标题】:sklearn Logistic Regression ValueError: X has 42 features per sample; expecting 1423sklearn Logistic Regression ValueError: X 每个样本有 42 个特征;期待 1423
【发布时间】:2020-03-07 00:56:27
【问题描述】:

我一直在尝试解决问题。 这是我想要做的:

我想使用逻辑回归预测缺失值 (Nan)(分类一)。 这是我的代码:

df_1:我的数据集仅在“Metier”功能中存在缺失值(我试图预测的缺失值)

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

如果有人能帮帮我,我将不胜感激。

非常感谢:)

【问题讨论】:

  • 预测的输入向量(我假设Y_test)不适合你的训练向量Y_train,你可以用Y_test.shapeY_train.shape检查它
  • 当您在X_train 上使用参数dummy_na = True 时,您会为您的x 获得额外的列(例如特征)。如果您不在X_test 上执行此操作,则那里的列数将减少,因此当它尝试在X_test 上应用X_train 上达到的模型时会出现错误(尽管数字似乎太远了仅此原因)。
  • @ PV8 它不适合,因为我试图根据现有值 Y_train 预测 Nan 缺失值 Y_test。
  • @Aryerez 我该如何处理?知道我正在尝试使用逻辑回归替换列中的 nan 值?

标签: python pandas scikit-learn nan prediction


【解决方案1】:

经验法则是从不在多个数据帧上使用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_trainx_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.]])

请注意,现在它正确断言两个不同的输入会导致相同的列数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2015-05-01
    • 2015-05-07
    • 2020-10-03
    • 2020-05-21
    • 2019-12-17
    • 2018-12-14
    相关资源
    最近更新 更多