【发布时间】:2016-06-22 22:29:59
【问题描述】:
我正在尝试使用 sklearn 评估多个机器学习算法的几个指标(准确度、召回率、精度等)。
根据我从文档here 和源代码(我使用的是 sklearn 0.17)中了解到的内容,cross_val_score 函数每次执行只接收一个记分器。所以为了计算多个分数,我必须:
- 多次执行
-
实现我的(耗时且容易出错的)记分器
我已经用这段代码执行了多次:
from sklearn.svm import SVC from sklearn.naive_bayes import GaussianNB from sklearn.tree import DecisionTreeClassifier from sklearn.cross_validation import cross_val_score import time from sklearn.datasets import load_iris iris = load_iris() models = [GaussianNB(), DecisionTreeClassifier(), SVC()] names = ["Naive Bayes", "Decision Tree", "SVM"] for model, name in zip(models, names): print name start = time.time() for score in ["accuracy", "precision", "recall"]: print score, print " : ", print cross_val_score(model, iris.data, iris.target,scoring=score, cv=10).mean() print time.time() - start
我得到这个输出:
Naive Bayes
accuracy : 0.953333333333
precision : 0.962698412698
recall : 0.953333333333
0.0383198261261
Decision Tree
accuracy : 0.953333333333
precision : 0.958888888889
recall : 0.953333333333
0.0494720935822
SVM
accuracy : 0.98
precision : 0.983333333333
recall : 0.98
0.063080072403
这没关系,但我自己的数据很慢。如何衡量所有分数?
【问题讨论】:
-
我会尝试手动实现
cross_val_score正在做的事情 -
使用 Python 3.6 此示例不起作用,因为目标数据是多类的,但 cross_val_score 的平均值设置为“二进制”。您收到以下错误:“ValueError: Target is multiclass but average='binary'。请选择另一个平均设置。”我将如何解决这个问题?真的不能二值化,可以吗?
-
我使用的是 Python 2.7。和 sklearn 0.17。我认为这个错误发生在 0.18 中。你用的是什么 sklearn 版本?
-
这个问题似乎与那个问题重复:stackoverflow.com/questions/23339523/…
-
从 scikit-learn 0.19.0 开始,
cross_validate函数中允许使用多个指标。我在下面更新了我接受的答案以反映这一点。
标签: python machine-learning scikit-learn