我正在使用linear_model。来自scikit的线性回归
学习作为预测模型。它很有效,也很完美。我无法使用accuracy_score
度量来评估预测结果。
这是我的真实数据:
array([1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0])
我的预测数据:
array([ 0.07094605, 0.1994941 , 0.19270157, 0.13379635, 0.04654469,
0.09212494, 0.19952108, 0.12884365, 0.15685076, -0.01274453,
0.32167554, 0.32167554, -0.10023553, 0.09819648, -0.06755516,
0.25390082, 0.17248324])
我的代码:
accuracy_score(y_true, y_pred, normalize=False)
错误消息:
ValueError: Can't handle mix of binary and continuous target
问题在于,真正的 y 是二进制的(零和一),而你的预测不是。您可能生成了概率而不是预测,因此结果:)相反,尝试生成类成员资格,它应该可以工作!
accuracy_score
是分类度量,不能用于回归问题。
您可以在文档中查看可用的回归指标。
尽管这里有太多的错误答案试图通过数值操作预测来规避错误,但错误的根本原因是一个理论问题,而不是计算问题:您试图在回归(即数值预测)模型(LinearRegression
)中使用分类指标(准确性),这是毫无意义的。
就像大多数性能指标一样,准确度会逐个进行比较(即真正的标签为0/1,预测值再次为0/1);因此,当您要求函数将二进制真标签(apples)与连续预测(oranges)进行比较时,您会得到一个预期的错误,其中的消息从计算的角度准确地告诉您问题是什么:
Classification metrics can't handle a mix of binary and continuous target
尽管该消息没有直接告诉您您正在尝试计算对您的问题无效的指标(我们实际上不应该期望它走那么远),但scikit-learn至少会给您一个直接而明确的警告,即您正在尝试错误的事情,这当然是一件好事;其他框架不一定是这种情况 - 例如,参见Keras在非常相似的情况下的行为,你根本没有得到任何警告,人们最终只是抱怨回归设置中的“准确性”低...
我对这里的所有其他答案(包括接受的答案)感到非常惊讶
所以,总结一下:问题是您正在应用一个不适合您的模型的指标(准确性)(LinearRegression
):如果您处于分类设置中,您应该更改您的模型(例如,使用逻辑回归
代替);如果您处于回归(即数字预测)设置中,您应该更改指标。查看scikit-Learning中可用的指标列表,您可以在其中确认准确性仅用于分类。
还将这种情况与最近的SO问题进行比较,其中OP试图获得模型列表的准确性:
models = []
models.append(('SVM', svm.SVC()))
models.append(('LR', LogisticRegression()))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
#models.append(('SGDRegressor', linear_model.SGDRegressor())) #ValueError: Classification metrics can't handle a mix of binary and continuous targets
#models.append(('BayesianRidge', linear_model.BayesianRidge())) #ValueError: Classification metrics can't handle a mix of binary and continuous targets
#models.append(('LassoLars', linear_model.LassoLars())) #ValueError: Classification metrics can't handle a mix of binary and continuous targets
#models.append(('ARDRegression', linear_model.ARDRegression())) #ValueError: Classification metrics can't handle a mix of binary and continuous targets
#models.append(('PassiveAggressiveRegressor', linear_model.PassiveAggressiveRegressor())) #ValueError: Classification metrics can't handle a mix of binary and continuous targets
#models.append(('TheilSenRegressor', linear_model.TheilSenRegressor())) #ValueError: Classification metrics can't handle a mix of binary and continuous targets
#models.append(('LinearRegression', linear_model.LinearRegression())) #ValueError: Classification metrics can't handle a mix of binary and continuous targets
其中前6个模型工作正常,而所有其他(注释掉)模型给出相同的错误。到现在为止,您应该能够说服自己,所有注释掉的模型都是回归(而不是分类)模型,因此是合理的错误。
最后一个重要的提示:有人声称:
好的,但我想使用线性回归,然后只对输出进行舍入/阈值,有效地将预测视为“概率”,从而将模型转换为分类器
实际上,这一点已经在其他几个回答中暗示过了,不管是含蓄的还是不含蓄的;同样,这是一个无效的方法(事实上,你有负面的预测应该已经提醒你,它们不能被解释为概率)。吴恩达在他在Coursera上的热门机器学习课程中解释了为什么这是一个坏主意——参见他在Youtube上的讲座6.1 -逻辑回归|分类(解释从大约3:00开始),以及4.2节为什么不是线性回归[用于分类]?由Hastie,Tibshirani和他的同事编写的《统计学习入门》(强烈推荐,免费提供)...
我想用来解决多类分类问题。的值为1-热编码,例如: ValueError:分类度量不能处理多标签指示器和二进制目标的混合 当我编写或而不是时,我无法编译模型。
我正在通过AWS-EC2上的Binance api从Binance获取OHLCV数据。但有时(几天一次)会出现错误“104,‘EconReset’”,程序停止。 该程序是用Python3.7.3编写的,在AWS-EC2上运行 代码如下。但此代码无法继续。 我想在出现任何api或连接错误时继续运行程序。 我应该如何处理这个错误? 所有错误质量如下所示。 Traceback(最近一次调用最后):Fil
我正在使用maven项目运行selenium测试,但是当我运行测试文件时,我收到了错误:无法连接到二进制FirefoxBinary(C:\Program Files(x86)\Mozilla Firefox\Firefox)。在端口7055上。它打开FF an的空白页,然后测试结果抛出错误: 这些是我的文件: 我有FireFox 51.0和selenium-java 2.45.0(jar)。
本文向大家介绍GO语言标准错误处理机制error用法实例,包括了GO语言标准错误处理机制error用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了GO语言标准错误处理机制error用法。分享给大家供大家参考。具体分析如下: 在 Golang 中,错误处理机制一般是函数返回时使用的,是对外的接口,而异常处理机制 panic-recover 一般用在函数内部。 error 类型介绍 e
问题内容: 我有一个排序的数组,想要对它进行二进制搜索。 所以我想问一下Swift库中是否已有诸如sort等的东西?还是有类型独立版本可用? 当然,我可以自己编写它,但是我想避免再次发明轮子。 问题答案: 这是使用二进制搜索的通用方法:
在我的spring integration应用程序中,我有一个异步网关方法,它指定了errorChannel。 On Error-我希望通过向ErrorChannel注册集成流来处理错误(我能够成功地做到这一点)。 一旦错误被处理和处理,我可能需要有条件地发送到另一个通道进行进一步处理,并在最后回复回网关。实现这一点的最佳方法是什么? 示例-> 我如何做到这一点?