前言
上一篇中我们经过调参,把红酒数据集的准确率从88%调到94%,还算不错的成绩,但这个模型的准确率真有这么高么?
我们知道决策树有擅长和不擅长的数据集,它擅长的是对半分型数据,不擅长环形数据,而训练集是随机抽取的,有没有可能正好抽取到决策树擅长的数据导致分数虚高呢?如果更准确的评估模型的效果呢?这就是这次要讲的主角--交叉验证
交叉验证
既然随机抽取一次不可靠,那我们就把数据分成5份,第一次第一份作为测试集,剩下4份作为训练集,第二次第二份作为测试集,剩下的作为训练集,以此类推,这样就能准确评估模型效果了
交叉验证在sklearn中实现很简单,我们只需要把调完参的模型带进去就行了,需要注意的是数据不用切割,直接带入完整的,因为这个方法内部会切割数据
from sklearn import tree #导入决策树模型
from sklearn.datasets import load_wine #导入红酒数据集
from sklearn.model_selection import train_test_split #导入训练集测试集分隔器
from sklearn.model_selection import cross_val_score
wine = load_wine() #加载红酒数据集
clf = tree.DecisionTreeClassifier(criterion="gini", random_state=20
,max_depth=5 #z最大深度
,min_samples_leaf=10 #叶子节点最小样本数
,min_samples_split=10) #节点允许分枝样本数
#参数1: 模型, 参数2:数据, 参数3:标签, cv表示分成几份
cross_val_score(clf, wine.data, wine.target, cv=5)
看下结果
从结果中我们看出决策树在红酒数据集中表现并不稳定,有些数据集可以达到0.97,有些只有0.66,所以接下去我们可以用些更强大的模型来试试效果