【发布时间】:2015-03-15 11:08:42
【问题描述】:
我一直在尝试使用 Python 和 scikit-learn 工具包训练 ML 分类器。
首先,我在拆分数据集时应用了自己的阈值(例如 int(len(X)*0.75)),并在打印我的指标时得到了这个结果:
precision recall f1-score support
1 0.63 0.96 0.76 23
2 0.96 0.64 0.77 36
avg / total 0.83 0.76 0.76 59
然后我使用交叉验证来更详细地了解模型的准确性,使用:scores = cross_validation.cross_val_score(X, y, cv=10) 并得到以下分数:
Cross_val_scores= [ 0.66666667 0.79166667 0.45833333 0.70833333 0.52173913
0.52173913 0.47826087 0.47826087 0.52173913 0.47826087]
准确度:0.56(标准偏差:+/- 0.22),这里的准确度等于平均值(分数)。
有人可以建议我如何正确解释这些分数吗?我了解在使用交叉验证以观察模型在整个数据集范围内的准确性时如何拆分数据集,但我想了解更多。
- 例如,有没有办法将其拆分并实现尽可能高的准确度(例如 0.79166667),如果可以,我该怎么做?
- 我想这是因为我的数据集中存在一个分裂,即使用这些数据训练的模型可以产生更接近的预测,对吧?
- 有没有办法降低比较高的标准差?
感谢您的宝贵时间。
【问题讨论】:
-
尝试优化数据拆分的方式以提高交叉验证分数并没有多大意义。交叉验证的重点是看看你的模型在它不知道的数据上的表现如何;以自定义方式拆分它只是为了提高你的分数只是在自欺欺人。您应该以某种先验方式确定拆分(例如,纯随机抽样、跨类分层等),并尝试通过改进模型本身来最大化分数。
标签: python scikit-learn cross-validation