python – “得分必须返回一个数字”scikit-learn中的cross_val_score错误

python – “得分必须返回一个数字”scikit-learn中的cross_val_score错误,第1张

概述也许这是一个愚蠢的问题,但我不明白下面代码中的函数cross_val_score给出的错误.也许答案是X样本的格式,看到这正是崩溃消息中显示的内容,但我不知道如何修复.这是我项目中的一段代码,带有一些随机值. import numpy as npfrom sklearn import mixture,cross_validationnp.random.seed(0)n_samples = 也许这是一个愚蠢的问题,但我不明白下面代码中的函数cross_val_score给出的错误.也许答案是X样本的格式,看到这正是崩溃消息中显示的内容,但我不知道如何修复.这是我项目中的一段代码,带有一些随机值.

import numpy as npfrom sklearn import mixture,cross_valIDationnp.random.seed(0)n_samples = 300C = np.array([[0.,-0.7],[3.5,.7]])X = np.r_[np.dot(np.random.randn(n_samples,2),C),np.random.randn(n_samples,2) + np.array([20,20])]clf = mixture.GMM(n_components=2,covariance_type='full')score = cross_valIDation.cross_val_score(clf,X)

给我错误:

ValueError: scoring must return a number,got (<type 'numpy.ndarray'>) instead
解决方法 我认为这可能是scikit中的一个问题. cross_val_score最终调用score函数,无论估计器传递给它.通常,得分(例如在KMeans中)为 returns a float.当KMeans估算器传递给cross_val_score时,一切都很好:

>>> clf = cluster.KMeans()>>> score = cross_valIDation.cross_val_score(clf,X)# (no error)

注意得分的返回类型:

>>> clf = cluster.KMeans()>>> clf.fit(X)>>> type(clf.score(X))numpy.float64

在GMM和array is returned上调用得分时.

>>> clf = mixture.GMM()>>> clf.fit(X)>>> type(clf.score(X))numpy.ndarray

因为cross_val_score依赖于clf.score()返回一个浮点数,所以你看到的错误信息是有意义的.

解决方法是为您自己的得分手提供cross_val_score.例如,要获取GMM.score()返回的分数的平均值,请创建此评分函数:

>>> scorer = lambda est,data: np.mean(est.score(data))

然后你可以将这个得分手作为参数传递给cross_val_score:

>>> score = cross_valIDation.cross_val_score(clf,X,scoring=scorer)

这可以避免错误,我认为应该或多或少地做你正在寻找的东西.我不确定平均值是否必然是总结得分的最佳方式,尽管它似乎足够合理.但是从这里你可以定义自己的方法.

总结

以上是内存溢出为你收集整理的python – “得分必须返回一个数字”scikit-learn中的cross_val_score错误全部内容,希望文章能够帮你解决python – “得分必须返回一个数字”scikit-learn中的cross_val_score错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1197269.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存