R语言如何实现K最近邻算法?

Posted 数据分析艺术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言如何实现K最近邻算法?相关的知识,希望对你有一定的参考价值。

K最近邻算法是使用最广泛的距离判别分析方法。它的主要思路是:一个样本在特征空间中的K个最近邻的样本中,大多数样本属于哪一个类别,那么该样本就属于这个类别。对于类重叠较多的待分类数据集,K最近邻算法较其他方法更为合适。

R语言中实现K最近邻算法的是class软件包中的knn()函数。



1 读取数据集。

sz_data=read.csv("sz_data.csv",head=T,encoding="utf-8")

head(sz_data);dim(sz_data) #查看数据的前几行和数据维度

2  进行数据预处理。在实际应用中,如果数据有缺失值,需要先按照一定的方法先对缺失值进行处理。这里我们直接划分训练集和测试集,并且随机抽取70%的样本作为训练集。

n=0.7*nrow(sz_data) #作为训练集的样本量

sub_train=sample(nrow(sz_data),n)#随机抽取n个样本

data_train=sz_data[sub_train,-1]#训练集

data_test=sz_data[-sub_train,-1]#测试集

head(data_train);dim(data_train)

head(data_test);dim(data_test)

R语言如何实现K最近邻算法?

3  建立K最近邻算法。

knn()函数的基本形式为:

knn(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE)

其中train、test分别是训练集和测试集的变量集,cl是训练集的分类变量。

代码如下:

library(class)#加载软件包

fit_pre_knn=knn(data_train[,-6],data_test[,-6],cl=data_train[,6])#建立K最近邻判别规则,模型训练和测试集预测同时进行

fit_pre_knn #查看测试集预测结果

R语言如何实现K最近邻算法?

4  查看模型的准确性。

table(data_test$is_rise,fit_pre_knn)#生成真实值与预测值的混淆矩阵

error_knn=sum(fit_pre_knn!=data_test$is_rise)/nrow(data_test);

error_knn#计算错误率

从结果中可以看到,K最近邻算法在本次数据应用中并不理想。

R语言如何实现K最近邻算法?

5  找到错误率最低的K值。

error_knn=rep(0,100) #设值初始值

#构造K最近邻判别规则并预测,预测结果存储在fit_pre_knn中

for (i in 1:100)

{fit_pre_knn=knn(data_train[,-6],data_test[,-6],cl=data_train[,6],k=i)

error_knn[i]=sum(fit_pre_knn!=data_test$is_rise)/nrow(data_test)}

#显示计算后的错误率的100个取值

error_knn

which.min(error_knn);error_knn[which.min(error_knn)]#找到错误率最小的K值

在实际应用中,K值取得过大会导致分类模糊。


R语言如何实现K最近邻算法?

以上是关于R语言如何实现K最近邻算法?的主要内容,如果未能解决你的问题,请参考以下文章

使用Node.js如何实现K最近邻分类算法?

R语言学习笔记—K近邻算法

手写数字识别的k-近邻算法实现

R语言-KNN算法

机器学习k近邻算法kd树实现优化查询

分类算法——k最近邻算法(Python实现)(文末附工程源代码)