R语言实现KNN算法

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) # 最后一个样本的预测结果

  • 1
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值