【问题标题】:Logistic Regression - ValueError: classification metrics can't handle a mix of continuous-multi output and binary targetsLogistic 回归 - ValueError:分类指标无法处理连续多输出和二进制目标的混合
【发布时间】:2018-04-21 11:41:36
【问题描述】:

我是一个数据科学小白和我工作的Kaggle Titanic dataset。我在它运行的Logistic回归预测的测试数据集的乘客是否存活或死亡。 P>

我清洁训练和测试数据并且两个运行在训练数据的Logistic回归拟合。都很好。

train = pd.read_csv('train.csv')    
X_train = train.drop('Survived',axis=1)
y_train = train['Survived']
from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression()
logmodel.fit(X_train,y_train)

然后,我的测试数据为这样运行预测模型:

test = pd.read_csv('test.csv') 
predictions = logmodel.predict(test)

我然后尝试打印混淆矩阵:

from sklearn.metrics import classification_report, confusion_matrix
print(confusion_matrix(test,predictions))

我得到一个错误,指出: P>

ValueError:分类指标无法处理混合 连续多输出和二进制目标 P>

这是什么意思,我该如何解决?

我看到一些潜在的问题是: P>

  1. 我做的东西超级愚蠢和错误的测试数据预测模型。
  2. 为特征值“年龄”和“食物”(成本的乘客的 票)是浮筒,而其余的是整数。 LI>

我哪里错了?感谢您的帮助!

【问题讨论】:

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


【解决方案1】:

正如 m-dz 评论的那样,confusion_matrixexpects 2 arrays,而在您的代码中,您传递了整个 test 数据帧。

此外,另一个common mistake 不尊重参数的顺序,这很重要。

总之,你应该要求

confusion_matrix(test['Survived'], predictions)

【讨论】:

  • 谢谢。好的,我看到传入整个测试数据框的问题。但是测试数据没有“Survived”列(我试图预测),因此我得到 KeyError: 'Survived' 错误。我现在应该尝试什么?
  • 刚刚有了一个小小的顿悟。测试数据没有“幸存”列......现在我看到了如何运行混淆矩阵来根据测试数据评估我的模型是不可能的,因为它没有任何东西可以与我的预测进行比较。我现在将如何评估我的预测?
  • @MikeChan 您要么留出一部分train 数据进行验证,要么尝试交叉验证。在任何情况下 1)这完全超出了您最初的问题的范围 2)所以不是此类教程的场所 - 泰坦尼克号数据有几个 walk-through kernels @Kaggle 专门针对初学者。
【解决方案2】:

大概您的test 由布尔值(生或死)组成,而predictions 由浮点数(预测的生存概率)组成。您应该选择一些阈值,然后根据预测概率是否大于阈值生成布尔值。

【讨论】:

  • 请仅在相关信息确实存在空白时使用“大概”。这里根本不是这种情况,因为predict 返回标签,而不是概率(后者由predict_proba 返回)
  • @desertnaut 相关资料确实有漏洞。 test.csv 包含一个数据框,而不是一个系列,虽然符合约定,但如果不去 kaggle 站点就无法确定,而 predict 返回标签只能通过查看文档来确定。就问题中给出的信息而言,testpredictions的内容都是未知的。
  • 让我尝试提供一个友好的建议,因为在 SO 的经验稍微丰富一些:1) 文档中的信息总是相关且可用 2) 在开始之前假设,要求在 cmets 中进行澄清 3) 基于错误的假设继续争论一个明显错误的(并且可以说是推测的)答案,而没有任何已经开始吸引反对票的具体代码建议是徒劳的。我们都会犯错误——纠正可以纠正的,丢弃不能纠正的,然后继续……
  • 我并不否认我的回答不正确,只是您的反对意见并不完全有效。坦率地说,如果有人在 SO 上发布问题而没有费心说明他们的意见是什么,他们应该预计很有可能会出现问题。 “没有任何具体的代码建议”我给出了关于如何解决我认为的问题的明确说明。
  • 继续投票,但您仍然没有抓住重点...... :(
猜你喜欢
  • 2022-01-25
  • 2021-12-20
  • 2021-04-14
  • 2019-06-24
  • 2020-05-10
  • 2020-06-29
  • 2020-12-16
  • 2018-08-05
  • 1970-01-01
相关资源
最近更新 更多