R机器学习-KNN近邻分析

R语言机器学习——KNN近邻分析

概念:近邻分类器就是把无标记的归类于与它们最相似的带有标记的案例所在的类。
优点:简单、高效;训练阶段快。
缺点:不产生相关模型。
个人总结:k值的使用说明:k值越大,噪声数据对模型影响的越小,但是会使分类器产生偏差。较大的k值能够给出更直观的决策边界,较小的k适合精细化拟合,通常k值的选取从训练集观测值的平方根开始。

#载入class包/gmodels包,未安装需要先安装相关的R包
library(class)
library(gmodels)
#数据读取
wbcd<-read.csv("data-1.csv",stringsAsFactors = FALSE)
#数据整理
wbcd<-wbcd[,2:12]
#因子转换,增加标签
wbcd$diagnosis<-factor(wbcd$diagnosis,levels = c("B","M"),labels = c("Benign","Malignant"))
#对三个特征进行描述性统计
summary(wbcd[c("radius_mean","area_mean","smoothness_mean")])
#创建标准化函数(min-max)
normalize<-function(x){
  return((x-min(x))/(max(x)-min(x)))
}
#函数测试
normalize(c(1,2,3,4,5))
normalize(c(10,20,30,40,50))
#对数据应用标准化
wbcd_n<-as.data.frame(lapply(wbcd[,2:11],normalize))
#准备训练集与测试集
wbcd_train<-wbcd_n[1:469,]
wbcd_test<-wbcd_n[470:569,]
#创建标签
wbcd_train_labels<-wbcd[1:469,1]
wbcd_test_labels<-wbcd[470:569,1]
#数据训练(k一般为数据量的平方根近似奇数值)
wbcd_test_pred<-knn(train = wbcd_train,test = wbcd_test,cl=wbcd_train_labels,k=21)
#评估预测性能
CrossTable(x=wbcd_test_labels,y=wbcd_test_pred,prop.chisq = FALSE)
#提高优化模型性能(z分数标准化)
wbcd_z<-as.data.frame(scale(wbcd[-1]))
wbcd_z
summary(wbcd_z$area_mean)
#重新预测
wbcd_z_train<-wbcd_z[1:469,]
wbcd_z_test<-wbcd_z[470:569,]
wbcd_z_test_pred<-knn(wbcd_z_train,wbcd_z_test,cl=wbcd_train_labels,k=21)
#评估预测准确性
wbcd_z_result<-CrossTable(wbcd_test_labels,wbcd_z_test_pred,prop.chisq = FALSE)
#k值的使用说明:k值越大,噪声数据对模型影响的越小,但是会使分类器产生偏差。较大的k值能够给出更直观的决策边界,较小的k适合精细化拟合,通常k值的选取从训练集观测值的平方根开始。

本文所使用的数据集放在云盘,大家自行提取。
链接: https://pan.baidu.com/s/1Tx_gl_RidTfTS4c8mz6_jA?pwd=s73h
提取码: s73h

欢迎对R有兴趣或者用R正在进行课题研究的朋友留言交流和反馈问题~
Life is hard, I use R~

  1. 机器学习与R语言,机械工业出版社(原书第2版).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XiaoQin-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值