机器学习--scikit-learn(3)

版权声明: https://blog.csdn.net/qq_40589051/article/details/82114179

这篇文章记录的是如何对模型进行交叉验证。

首先要简单了解一下,什么是交叉验证,对一个模型好与坏的检测指标有哪些?

1.什么是交叉验证?

交叉验证就是不单单把数据集分成测试集和训练集,而是把数据集分成n组,每一组中都有训练集和测试集,每一组都会得到一个score,这个score可以是准确性(accuracy),也可以是MSE(标准均方误差)等。

例子回到第一篇文章中讲到的花的分类,最简单的是利用train_test_split将数据集分成了测试集与训练集。

现在我们要对此例子进行进阶,讨论当knn中的参数n_neighbors为多少时此分类模型的准确率最高。当然k折交叉验证(将数据划分为多少个集合就是k折)只是验证方式中的一种,还有其他的后续学习时再提。

from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
import matplotlib.pyplot as plt

#加载数据
iris = datasets.load_iris()
iris_x = iris.data
iris_y = iris.target

#将参数k范围规定在1-30
k_range = range(1,30)
k_scores = []
for k in k_range:
    knn =KNeighborsClassifier(n_neighbors=k)
    scores = cross_val_score(knn,iris_x,iris_y,cv=10,scoring='accuracy')
    k_scores.append(scores.mean())#对每一组的accuracy求平均

plt.plot(k_range,k_scores)
plt.xlabel('Value of K for KNN')
plt.ylabel('Cross-Validated Accuracy')
plt.show()

运行后的结果为:

可以看出在k范围在10-20中间时,准确性最高。

此外,模型的参数有很多,要看参数对模型性能的影响可以按照这样的方法进行调试。

2.度量模型性能的指标有哪些?

自己想肯定想不出来,凡是搞不懂的先谷歌,谷歌还是没有的,那就去官方文档找。

上面的程序中我们用到了这段话:scores = cross_val_score(knn,iris_x,iris_y,cv=10,scoring='accuracy')

意思是用knn模型,10组数据,性能测量参数为accuracy。

扫描二维码关注公众号,回复: 2912724 查看本文章

度量一个模型好与坏的指标有很多,如下图,召回率,准确性,mse之类的任选。

比如你选mse时,那么scores = cross_val_score(knn,iris_x,iris_y,cv=10,scoring='accuracy')这句话就可以改成:

loss = -cross_val_score(knn,iris_x,iris_y,cv=10,scoring='neg_mean_squared_error'))

之所以取负是因为计算出来的是负数。

交叉验证也搞定啦,下一篇文章将记录的是过拟合的发现与修正。

猜你喜欢

转载自blog.csdn.net/qq_40589051/article/details/82114179