大数跨境
0
0

R语言 | K近邻(KNN)模型实战详解+代码

R语言 | K近邻(KNN)模型实战详解+代码 谁说菜鸟不会数据分析
2022-12-08
0
导读:代码自取

小伙伴们好!今天在后台收到一位小伙伴的留言,问有没有KNN模型的代码。我才意识到,还没跟大家介绍过这个模型呢!

今天咱们就来唠唠,K近邻(k-Nearest Neighbor,KNN)模型。

1、模型原理——简单版

K近邻(k-Nearest Neighbor,KNN)是一种分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。

该方法的思路是:近朱者赤,近墨者黑。在特征空间中,如果一个样本附近的k个最近样本的大多数属于某一个类别,则该样本也属于这个类别。

比如说,下图中有两个类别,蓝色的圆点和橙色的三角形,"X"是未知。

我们要想预测X的类别,就选择X最近的几个样本,红色圆圈里有4个样本,其中3个为蓝色的圆点,只有一个是橙色三角形。那么X类别大概率为蓝色圆点。

2、R语言实战

了解了原理之后,K近邻用R语言怎么实现呢?话不多说,我们直接上代码。

library(caret)data("iris"#加载R自带的鸢尾花数据集set.seed(666)l <- caret::createDataPartition(iris$Species,p=0.8,times = 1,list =FALSE)trainset <- iris[l,]testset <- iris[-l,]set.seed(3333)knn_train <- knn3(as.matrix(trainset[,-5]),as.factor(trainset$Species),k = 5)

还是以iris鸢尾花数据集为例,我们首先划分训练集、测试集,比例为8:2。

然后调用caret包里的knn3功能。KNN模型只有一个可调整的参数,那就是K的个数,一般为3-10。可根据实际情况进行调整。

注意:

1. knn3中要求x为矩阵,所以我们需要用as.matrix把训练集变为矩阵。

2. x不能包含因变量,所以这里用到了trainset[,-5],把因变量所在列剔掉。

knn_test <- predict(knn_train, testset[,-5])

接下来我们在测试集上进行预测,可以看出,各个类别上的概率都预测出来了。再取概率最大的类别,作为预测的结果。

knn_test <- apply(knn_test, 1, which.max)

衡量模型效果:

#3.confusion matrixknn_cf <- caret::confusionMatrix(as.factor(knn_test), as.factor(as.numeric(testset$Species)))print(knn_cf)

KNN模型在测试集上的准确率达到了93%,其中Class 1预测全对,Class 2准确率为95%,Class 3准确率为90%。总体来说达到了不错的效果。

以上就是今天想要分享的全部内容。如果觉得有帮助,别忘了分享给更多的小伙伴们,同时右下角“在看”点一下哦~

每天进步点点,我们一起加油!


【声明】内容源于网络
0
0
谁说菜鸟不会数据分析
以大数据分析为驱动,spss/R/python/数据分析交流技术分享,实用教程干货,敬请期待,B站UP主:谁说菜鸟不会数据分析 有更多在线实操视频。
内容 498
粉丝 0
谁说菜鸟不会数据分析 以大数据分析为驱动,spss/R/python/数据分析交流技术分享,实用教程干货,敬请期待,B站UP主:谁说菜鸟不会数据分析 有更多在线实操视频。
总阅读104
粉丝0
内容498