R语言实现KNN算法

it2023-09-10  66

KNN近邻分类

随机抽取1/2的样本作为训练集,另外一半的样本作为测试集来验证模型的效果

iris1<-iris set.seed(1234)

利用caret包的createDataPartition函数按不同类别等比例抽取50%

library(caret) ind <- createDataPartition(iris1$Species,times=1,p=0.5,list=F) traindata <-iris1[ind,] #构建训练集 testdata <- iris1[-ind,] #构建测试集

利用class包中的knn函数对测试集的分类进行预测。

library(class) a=knn(traindata[,1:4],testdata[,1:4],traindata[,5],k=6) #指定k值为3 a[1];a[75] # 查看第一条和最后一条测试数据的预测结果

KNN算法流程验证:

ceshi <- function(n=1,k=3){

计算第n个测试集样本与训练集样本的距离

x <- (traindata[,1:4]-testdata[rep(n,75),1:4])^2 traindata$dist1 <- apply(x,1,function(x) sqrt(sum(x)))

对距离进行升序排序,选择最近的K个邻居

mydata <- traindata[order(traindata$dist1)[1:k],5:6]

统计不同类别的频数

result <- data.frame(sort(table(mydata$Species),decreasing = T))

给出最后的预测结果

return(result[1,1]) } ceshi() # 第一个样本的预测结果 ceshi(n=75) # 最后一个样本的预测结果

最新回复(0)