R语言机器学习与临床预测模型80--详解knn算法用于分类预测

R小盐准备介绍R语言机器学习与预测模型的学习笔记

你想要的R语言学习资料都在这里, 快来收藏关注【科研私家菜】


01 什么是knn算法

KNN(K-NearestNeighbor)是机器学习入门级的分类算法,是一种有监督算法。
我们有一堆样本点,类别已知,如下图左,蓝色为一类,黄色为另一类。现在有个新样本点,也就是图中黑色的叉叉,需要判断它属于哪一类。KNN做的就是选出距离目标点黑叉叉距离最近的k个点,看这k个点的大多数颜色是什么颜色。这里的距离怎么定义?当然还是可以用我们的老朋友——欧氏距离来度量。
给定两个样本 X=(x1,x2,...,xn)X=(x_{1},x_{2},...,x_{n})X=(x_{1},x_{2},...,x_{n}) 和 Y=(y1,y2,...,yn)Y=(y_{1},y_{2},...,y_{n})Y=(y_{1},y_{2},...,y_{n}) ,其中n表示特征数 ,X和Y两个向量间的欧氏距离(Euclidean Distance)表示为:



KNN的全称是K Nearest Neighbors,意思是K个最近的邻居。K个最近邻居,毫无疑问,K的取值肯定是至关重要的。那么最近的邻居又是怎么回事呢?其实啊,KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别
KNN是一种非参的,惰性的算法模型。
非参的意思并不是说这个算法不需要参数,而是意味着这个模型不会对数据做出任何的假设,与之相对的是线性回归(我们总会假设线性回归是一条直线)。也就是说KNN建立的模型结构是根据数据来决定的,这也比较符合现实的情况,毕竟在现实中的情况往往与理论上的假设是不相符的。
惰性又是什么意思呢?想想看,同样是分类算法,逻辑回归需要先对数据进行大量训练(tranning),最后才会得到一个算法模型。而KNN算法却不需要,它没有明确的训练数据的过程,或者说这个过程很快。
KNN算法的优势和劣势

KNN算法优点

  • 简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理。
  • 模型训练时间快,上面说到KNN算法是惰性的,这里也就不再过多讲述。
  • 预测效果好。
  • 对异常值不敏感

KNN算法缺点

  • 对内存要求较高,因为该算法存储了所有训练数据
  • 预测阶段可能很慢
  • 对不相关的功能和数据规模敏感

02 knn算法分类预测实现① class包

train<-iris[index,-5]
test<-iris[-index,-5]
cl<-iris[index,5]#设置类别变量
k<-7#以最近的几个点来投票

#测试集上的预测
pre_test<-knn(train=train,test=test,cl=cl,k=k,pro=T) #分类结果
t<-table(iris[-index,5],pre_test)
accu_test<-sum(diag(t))/sum(t) #测试集准确率

#训练集上的预测
pre_train<-knn(train=train,test=train,cl=cl,k=k,pro=T) #分类结果
t<-table(iris[index,5],pre_train)
accu_train<-sum(diag(t))/sum(t) #训练集准确率

效果如下:

03 knn算法分类预测②kknn包

# kknn包可以处理带有因子型变量的数据集

library(kknn)
train<-iris[index,]
test<-iris[-index,]

#测试集上的预测
pre_test<-kknn(Species~.,train, test)
fit_test<- fitted(pre_test) #分类结果
t<-table(test$Species, fit_test)
accu_test<-sum(diag(t))/sum(t) #测试集准确率

#训练集上的预测
pre_train<-kknn(Species~.,train, train)
fit_train <- fitted(pre_train) #分类结果
t<-table(train$Species, fit_train)
accu_train<-sum(diag(t))/sum(t) #训练集准确率

效果如下:



关注R小盐,关注科研私家菜(VX_GZH: SciPrivate),有问题请联系R小盐。让我们一起来学习 R语言机器学习与临床预测模型

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容