admin管理员组文章数量:1794759
KNN(K近邻算法)
一 算法原理
通过距离判断两个样本是否相似,使用与未知样本最近的k个样本(近邻)的学日文类别来分类。数量最多的标签类别就是新样本的标签类别。
1)实现过程
XTrain为训练集,X_Test为测试集
遍历训练集中所有样本,计算训练集样本与待标记样本的距离Distance对Distance进行排序,取最近的k个点的类别 X_KNN统计 X_Knn 中每个类别的个数,待标记样本的类别则是X_Knn中个数最多的类别2)如何计算距离?
欧式距离:
二 算法优缺点算法参数是k,k可以理解为k个邻居的类别
k值越大,模型的偏差越大,对噪声不敏感。k很大时,模型会j减肥药欠拟合。当k为训练样本个数时,单纯取训练样本中个数最多的分类作为所有未知样本的分类。k值越小,模型的方差越大,受噪声影响大,容易过拟合。三 Sklearn实现from sklearn.neighbors import KNeighbors化学键理论Classifierfrom sklearn.datasets import load_breast_cancerfrom sklearn.model_selection import train_test_splitimport pandas as pdimport numpy as npdata = load_breast_cancer()X = data.dataY = data.targetXtrain,Xtest,Ytrain,Ytest = train_test_split(X,Y,test_size=0.3,random_state=666)model = KNeighborsClassifier(n_neighbors=3)model = model.fit(Xtrain,Ytrain)四 选择最优K值(n_neighbors)由于数据需要切分为训练集和测试集,不同的切割方式会有不同的最优k值。所以,使用k折交叉验证的方法来将训练集再切分为训练集和验证集,来确定不同不同切割方式下,哪个k值表现最好。
交叉验证+学习曲线
from sklearn.model_selec万用表怎么测电压tion import cross_val_scorescore = []var = []krange=range(1,20)for i in kloreenrange: model = KNeighborsClassifier(n_neighbors=i)垄断竞争市场 cvsesult = CVS(model,Xtrain,Ytrain,cv=5) score.appendblmanhua(cvsesult.mean()) var.append(cvsesult.var())plt.plot(krange,score,color='私密;k')plt.plot(krange,np.array(score)+np.array(var)*2,c='red',linestyle='--')plt.plot(krange,np.array(score)什么是早恋凉拌洋白菜-np.array(var)*2,c='red',linestyle='--')K折交叉验射线防护门证
如果使用交叉验证效果不好,考虑标签是由顺序的;或是数据量太小,折数太高。折数太大,会导致运算效率慢,预测率方差大。一般折数取5或10五 归一化由于knn算法需要计算未知样本与训练样本之间的距离,所以某些数值引入css大的特征会距离产生显著影响,即“量纲不统一”。可通过“归一化”来消除量纲的影响。
先划分训练数据和测试数据,再归一化。否则测试数据会包含训练数据的信(最大值和最小值)
from sklearn.preprocessing import MinMaxScaler as mmsXtrain,Xtestwin7升win10,Ytrain,Ytest=train_test_split(X,y,test_size=0.2,random_state=420)#归一化MMS_01=mms().fit(Xtrain) MMS_02=mms().fit(Xtest)X_train=MMS_01.t高考纪录片ransform(Xtrain) X_test =MMS_02.transform(Xtest)score=[]var=[]for i in range(1,20): clf=KNeighborsClassifier(n_neighbors=i) cvresult=CVS(clf,X_train漱口水,Ytrain,cv=5) score清明节禁忌.append(cvresult.mean()) var.append(cvresult.var()) plt.plot(西安杀人案krange,score,color="k")plt.plot(krange,np.array(score)+np.array(var)*2,c="red",linestyle="--")plt.plot(krange,np.array(score)-np.array(var)*2,c="red",linestyle="--")plt.show()score.index(max(score))+1 # 8六 距离的惩罚原始的KNN算法对最近的k的邻居都有相同的投票权重。但实际上距离有远近之分,距离近的权重要大一些,距离远的权重要小一些。所以sklearn中通过weights参数来调节。
for i in range(1,20): clf=KNeighborsClassifier(n_neighbors=i,weights='dista王子文资料nce') 大友梨奈 cvresult=CVS(clf,X_train,Ytrain,cv=5) score.append(cvresult.mean()) var.append(cvresult.var())plt.plot(krange,score,color="k")plt.plot(krange,np.array(score)+np.array(var)*2,c="red",linestyle="--")plt.plot(krange,np.array(score)-np.array(var)*2,c="red",linestyle="--")plt.show()clf=KNeighborsClassifier(n_neighbors=6,weights='distance'灾难电影推荐).fit(X_train,Ytrain)score=clf.score(X_test,Ytest)score # 0.947368版权声明:本文标题:KNN(K近邻算法) 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686589172a85010.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论