【问题标题】:Scikit-learn - Bad input shape error on multinomial logistic regressionScikit-learn - 多项逻辑回归上的错误输入形状错误
【发布时间】:2016-03-04 21:15:18
【问题描述】:

我正在使用 Scikit-learn 在 Python 中实现多项逻辑回归模型。这是我的代码:

X = pd.concat([each for each in feature_cols], axis=1)
y = train[["<5", "5-6", "6-7", "7-8", "8-9", "9-10"]]
lm = LogisticRegression(multi_class='multinomial', solver='lbfgs')
lm.fit(X, y)

但是,当它尝试执行最后一行代码时,我得到了ValueError: bad input shape (50184, 6)。

X 是一个 DataFrame,有 50184 行,7 列。 y 也有 50184 行,但有 6 列。

我最终想预测结果落在哪个区间(

【问题讨论】:

  • 文档要求输入 Y 的向量。也许您应该尝试将训练变量编码为不同的值而不是虚拟变量?
  • @extremist Y的形状需要是(50184,1)

标签: python pandas machine-learning scikit-learn logistic-regression


【解决方案1】:

Logistic Regression 3-class Classifier 示例说明了拟合 LogisticRegression 如何使用向量而不是矩阵输入,在本例中为 iris 数据集的 target 变量,编码为值 [0, 1, 2]。

要将虚拟矩阵转换为系列,您可以将每一列与不同的整数相乘,然后 - 假设它是 pandas.DataFrame - 只需在结果上调用 .sum(axis=1)。比如:

for i, col in enumerate(y.columns.tolist(), 1):
    y.loc[:, col] *= i
y = y.sum(axis=1)

【讨论】:

  • 这似乎就是为什么模型似乎只使用 y 数据框中的单列工作的原因。无论如何,我将如何将矩阵(多列)转换为向量?
  • 用建议更新了答案。
  • 谢谢!奇迹般有效。但我不知道如何正确预测结果类...
  • 好吧,这看起来像是一个新问题的材料。这是来自 STATA 文档的示例 - 尚未在 scikit-learn 上下文中使用此模型:ats.ucla.edu/stat/stata/output/stata_mlogit_output.htm 当然,如果它回答了您的原始问题,请随时接受答案:)
  • 抱歉,Logistic Regression 3-class Classifier 示例未显示 LogisticRegression 使用矢量输入。我们不知道 iris 数据集的属性,也不知道赋值 Y= iris.target 会使 Y 成为 (n,) 向量而不是 (n,k) 结构。即使用户通过打印 X 和 Y 的形状来“调试”示例,他也不知道这 是 所需的形状,还是只是当前示例的一个偶然特征。简而言之,在一个示例中知道回归器使用形状为 S 的数据并不能表明它不使用形状为 S* 的数据。
猜你喜欢
  • 2016-02-21
  • 2012-06-27
  • 2016-03-20
  • 2018-04-30
  • 2020-12-28
  • 2016-02-15
  • 2021-09-20
  • 2016-07-31
  • 2018-08-17
相关资源
最近更新 更多