提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
近期学习KNN算法,接触到交叉验证(cross validation)和模型优化,接下来学习这些内容。
一、为什么需要交叉验证?
交叉验证目的:为了让被评估的模型更加准确可信
二、什么是交叉验证(cross validation)
2.1.分析
交叉验证:将拿到的训练数据,分为训练和验证集。将数据分成5份,其中一份作为验证集。然后经过5次(组)的测试,每次都更换不同的验证集。即得到5组模型的结果,取平均值作为最终结果。又称5折交叉验证。
2.2.KNN代码实现
2.3超参数搜索-网格搜索(Grid Search)
有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型。
2.4超参数穷举法
import numpy as np
ks = [] #保存模型使用过的k值
scores = [] #保存模型对应k值的分值
for k in range(2,50,2): # 穷举k值在2~50中的数
knn = KNeighborsClassifier(n_neighbors=k).fit(x_train,y_train)
score = knn.score(x_test,y_test)
ks.append(k)
scores.append(score)
arr_ks = np.array(ks)
arr_scores = np.array(scores)
arr_ks,arr_scores
np.argmax(arr_scores) #找出arr_scores数组中最大值对应的下标
arr_ks[np.argmax(arr_scores)]#找出最优的模型参数的值
总结
①K值较小,则模型复杂度较高,容易发生过拟合,学习的估计误差会增大,预测结果对近邻的实例点非常敏感。
②K值较大可以减少学习的估计误差,但是学习的近似误差会增大,与输入实例较远的训练实例也会对预测起作用,使预测发生错误,k值增大模型的复杂度会下降。
③在应用中,k值一般取一个比较小的值,通常采用交叉验证法来来选取最优的K值。
作者:心中有高数
链接:https://www.jianshu.com/p/21483858fcf6