判别分析--KNN、有权重的K最邻近算法


1 K最近邻

这部分即将要讨论的K最近邻和后面的有权重K最近邻算法在R中的实现,其核心函数 knn()kknn()集判别规则的建立预测这两个步骤于一体,即不需在规则建立后再使用predict()函数来进行预测,可由knn()kknn()一步实现。

按照次序向knn()函数中依次放入训练集中各属性变量(除第12个变量nmkat)、测试集(除第12个变量 nmkat)、训练集中的判别变量(12个变量nmkat),并首先取K的默认值1进行判别。

fitpreknn<-knn(datatrain[,-12],datatest[,-12],c1<-datatrain[,12])

fitpreknn

 

table(datatest$nmkat,fitpreknn)   #混淆矩阵,行为真实值,列为预测值

 

结果分析:由混淆矩阵我们看到,nmkat 5个类别分别有5546374461个样本被正确分类,第5类被正确分类的样本最多。

K最近邻算法也有其缺陷,当样本不平衡,即某些类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个最近邻样本中大容量类别的样本占多数。在这种情况下就可以使有权重的K最近邻算法来改进。

有权重的K最近邻算法

这部分我们使用kknn()函数来实现有权重的K最近邻算法,同时将训练集与测试集一起放入函数,但格式上略有不同,需注意kknn是公式formula格式的函数。

library(kknn)

fitprekknn<-kknn(nmkat~.,train<-datatrain,test<-datatest[,-12],k=5)

summary(fitprekknn)

 

结果分析:我们可以看到测试集中每一个样本归属于各类别的概率,依次记于 prob.1prob.5,其中,fit记录了该样本最终被判定的类别。

下面我们使用fitted(函数来得到预测结果,即如上输出结果中的fit

fit<-fitted(fitprekknn)   #输出有权重的K最邻近预测结果

fit

 

table(datatest$nmkat,fit)    #生成混淆军阵,行为实际,列为预测

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM