交叉验证(cross_val_score)

本篇博客谈谈交叉验证。

1 交叉验证

一般机器学习对数据的处理就是分割数据集为训练集和测试集,用训练集去训练模型,用测试集去测试模型的性能或是否过拟合。但这样做是有一点不可靠,万一不好的模型对测试集过拟合,这样我们就错误认为模型是好的。要解决这个问题要怎么办呢?答案是使用交叉验证。

交叉验证(cross_val_score)_第1张图片

交叉验证的思路:
①先使用train_test_split将数据集分为训练集和测试集。
②将训练集在分为n份(自己设置),用n-1份去训练模型,用1份去预测模型。
③得到n个结果去平均值
④再用测试集去预测最终结果

2 sklearn中的交叉验证(cross_val_score)
结合代码体验一下

from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
#sklearn中的交叉验证
from sklearn.model_selection import cross_val_score
import numpy as np

#加载数据
iris = datasets.load_iris()
X = iris.data
y = iris.target
x_train, x_test, y_train, y_teset = train_test_split(X, y, test_size=0.3)

#实例化模型
knn = KNeighborsClassifier(n_neighbors=3)
#进行3折交叉验证
#CV设置训练集分为多少部分
scores = cross_val_score(knn, x_train, y_train, cv=3)
#取均值
score = np.mean(scores)
print(scores)
score

输出:
[ 1. 0.94285714 0.94117647]

0.96134453781512608

3 总结

交叉验证可以防止模型对测试集过拟合,而且切分训练集也是随机的,让我们得到的结果更精准和更有说服力。

你可能感兴趣的:(机器学习)