【问题标题】:Logistic regression does not work after update to v.0.17更新到 v.0.17 后逻辑回归不起作用
【发布时间】:2016-11-16 20:20:47
【问题描述】:

我有类似的事情:

linear_model.LogisticRegression(penalty='l2').fit(X_train, y_train)

X_train 在哪里

array([[  2500. ,   5000. ,   5000. , ...,   4697.2,      3. ,  10600. ],
       ..., 
       [  2500. ,   3500. ,   3500. , ...,   3072. ,      3. ,  12800. ]])

和 y_train:

array([  4.865146,  12.309128,   1.469881, ...,   5.248941,  11.84231 ,
         2.178483])

这在v.0.16.1 中没有任何错误或警告,但升级到v.0.17.1 后它失败并出现错误:

ValueError: Unknown label type: my y_train array.

阅读v16v17 的文档我没有发现任何不同之处。唯一可疑的是:

逻辑回归(又名 logit,MaxEnt)分类器。

哪种暗示这实际上不是回归模型,而是分类模型,所以y_train应该是类别(但在v16中解释相同,所以我不确定是否是这种情况)。

无论如何,我想知道为什么会发生这种情况以及如何使其发挥作用。


一个演示问题的可运行、独立的示例

X_train_1 = np.array([[ 2500.,  5000.], [ 4500.,  4500.]])
y_train_1 = np.array([  4.865146,  12.309128])
linear_model.LogisticRegression(penalty='l2').fit(X_train_1, y_train_1)

【问题讨论】:

  • 您能否提供一个可运行的、独立的示例来演示该问题?
  • @BrenBarn 我已经删除了所有不需要的东西。我将整个问题简化为基本上一行,并且还部分包含了它失败的输入。不确定它的可运行性和独立性如何。无论如何,这里有 3 行说明问题。
  • 你希望你的模型做什么?逻辑回归预测二进制输出变量,因此像 4.865146 这样的值作为 Y 值没有意义。可能是早期版本的 scikit 错误地接受了这样的 Y 值并对它们做错了什么,并且他们修复了它,因为这些值没有意义。

标签: python machine-learning scikit-learn


【解决方案1】:

我想你想要一个LinearRegression; Logistic回归实际上是一个分类模型(尽管误导名称)。不确定您的代码在以前的版本中做了什么,也许它正在将每个浮点值视为标签?

【讨论】:

  • 是,逻辑回归是分类模型。但是等效回归模型不是线性回归。在古典线性回归中,输出是真实线上的任何数字,因此它不适用于预测概率。 Op想要的是具有Logit链路功能的广义线性模型。 span>
  • @ cel我不认为OP是预测概率,Y值范围在0到13之间 sp6>
  • 线性回归绝对不同的东西。正如我在这个问题中提到的那样,我也认为问题是他们的逻辑回归实际上是一个分类器。我知道有一个LogisticRegression是一个实际的regression model,我正在寻找如何使用它。 span>
  • 你想要做什么?您无法将Logit函数拟合到您的数据,因为Logit输出0到1之间的值。我猜您可以扩展您的数据并使用像@cel所建议的概括的衬套模型。 span>
  • 帖子中的cmets与之链接的帖子只是说逻辑回归的输出是零和1之间的概率,训练数据仍然是分类 span>
猜你喜欢
  • 2020-03-28
  • 2022-01-15
  • 1970-01-01
  • 2015-09-20
  • 1970-01-01
  • 1970-01-01
  • 2019-01-06
  • 2021-06-27
  • 2020-01-31
相关资源
最近更新 更多