机器学习好伙伴之scikit-learn的使用——K折交叉验证
在进行数学建模的时候就听过k折交叉验证,要是我当时像现在一样强就好了!
什么是K折交叉验证
K折交叉验证首先要将整个数据集分成K份。
1、取前面K-1份用于训练,最后一份用于测试,并取得测试结果。
2、取前面K-2份和最后一份用于训练,取第K-1份用于测试,并取得测试结果。
3、以此类推,将数据集的每一份均用于测试过一次。
4、取所有测试结果取平均。
其验证结果相比单次实验更加精准。
实现示意图如下:
sklearn中K折交叉验证的实现
在进行K折交叉验证之前,首先要导入K折交叉验证的模块。
from sklearn.model_selection import cross_val_score
K折交叉验证的重要函数是:
cross_val_score(
estimator,
X, y=None,
scoring=None,
cv=None,
n_jobs=1,
verbose=0,
fit_params=None,
pre_dispatch=‘2*n_jobs’
)
其常用参数如下:
1、estimator:用于预测的模型。
2、X:预测的特征数据
3、y:预测结果
4、scoring:调用的方法
可进行的scoring方式具体可以查阅https://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter
5、cv:交叉验证生成器或可迭代的次数
使用方式如下:
scores = cross_val_score(knn, X, y, cv=5, scoring='accuracy')
代表使用knn模型,输入特征为X,输出label为y,进行5折交叉验证,通过精确度的方式计分。
应用示例
代码取自莫烦python教学网站。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# K折交叉验证模块
from sklearn.model_selection import cross_val_score
# 导入k聚类算法
from sklearn.neighbors import KNeighborsClassifier
# 加载iris数据集
iris = load_iris()
X = iris.data
y = iris.target
# 分割数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=4)
# 建立Knn模型
knn = KNeighborsClassifier()
# 使用K折交叉验证模块
scores = cross_val_score(knn, X, y, cv=5, scoring='accuracy')
# 将5次的预测准确率打印出
print(scores)
#将5次的预测准确平均率打印出
print(scores.mean())
实验结果为:
[0.96666667 1. 0.93333333 0.96666667 1. ]
0.9733333333333334