R语言笔记:机器学习【K近邻】
写在开头:
我是一个学R的小白,因为读研老师要求开始接触R。
记一记笔记留给自己以后回顾,顺便分享出来嘻嘻。
我把需要深入的的函数进行介绍~方便了解这些函数的用法,一些简单的函数我就不放出来啦
之前笔记:R语言笔记:画图(1)【主要plot()函数】
理论知识
我把这一章节需要的理论知识写在本子上拍下来啦~如果缺少这部分知识的可以找书来康康。
1.K-近邻
knn()函数
用于实现K-近邻法,使用前需library(class)。
格式
knn(train=,test=,cl=,k=,prob=FALSE,use.all=TRUE)
参数含义
train——用于指定训练样本集
test——用于指定测试样本集
cl——指定训练样本集中的哪个变量为输出变量
k——用于指定参数K
prob——逻辑参数。取TRUE表示函数返回值是预测类别的概率值,FALSE函数返回值是预测类别值。回归预测中,prob应设置为FALSE。
use.all——逻辑参数。取TRUE表示当有多个等距离的近邻而使得实际近邻个数大于K时,所有近邻参与预测。取FALSE表示再多个等距离近邻中随机抽取近邻,确保实际近邻个数等于K。
knn1()函数
1-近邻法的专用函数。
格式
knn1(train=,test=,cl=)
knn.cv()函数
将K-近邻法和留一法“打包”成一体的函数,无需指定测试样本集。
格式
knn.cv(train=,cl=,k=)
一个栗子
library(class)
##指定训练集
train<-read.table("D:/R/《R语言数据挖掘方法及应用》案例数据/天猫Train1.txt",header=T,sep=",")
train$BuyOrNot<-as.factor(train$BuyOrNot)
##指定测试集
test<-read.table("D:/R/《R语言数据挖掘方法及应用》案例数据/天猫Test1.txt",header=T,sep=",")
test$BuyOrNot<-as.factor(test$BuyOrNot)
set.seed(123456)
errratio<-vector()
for(i in 1:30){knnfit<-knn(train=train[,-1],test=test[,-1],cl=train[,1],k=i,prob=F)
CT<-table(test[,1],knnfit)
errratio<-c(errratio,(1-sum(diag(CT))/sum(CT))*100)
}
plot(errratio,type="b",xlab="近邻个数K",ylab="错判率(%)",main="天猫成交顾客分类预测中的近邻数K与错判率",cex.main=0.7)
abline(v=7,col="gray")
出现的结果如下:
结合上图并兼顾K-紧邻分析的稳健性考虑,考虑采用K=7。
##得出k=7时的错判率
errration[7]
此时测试样本集的错判率为3.3%。
2.基于变量重要性的的加权K-近邻法
一个栗子
利用上面例子数据
errdeltex<-errratio[7]##逐个剔除输入变量
for(i in -2:-5){fit<-knn(train=train[,c(-1,i)],test=test[,c(-1,i)],cl=train[,1],k=7)
CT<-table(test[,1],fit)
errdeltex<-c(errdeltex,(1-sum(diag(CT))/sum(CT))*100)
}
plot(errdeltex,type="l",xlab="剔除变量",ylab="剔除错判率%",main="剔除变量与错判率(K=7)",cex.main=0.8)
xtitle=c("1:全体变量","2:消费活跃度","3:活跃度","4:成交有效度","5:活动有效度")
legend("topright",legend = xtitle,title = "变量说明",lty=1,cex=0.6)##第i个变量的重要性
fi<-errdeltex[-1]+1/4
wi<-fi/sum(fi)##画出各变量所占权重的饼图
glabs<-paste(c("消费活跃度","活跃度","成交有效度","活动有效度"),round(wi,2),sep=":")
pie(wi,labels = glabs,clockwise = T,main="输入变量权重",cex.main=0.8)
出现的结果如下:
由上知,剔除消费活跃度后,错判概率明显增加,说明消费活跃度对预测的影响巨大。
3.基于观测相似性的加权K-近邻法
kknn()函数
用于加权K-近邻法,使用前library(kknn)。
格式
kknn(formula=,train=,test=,na.action=na.omit(),k=,distance=,kernel=)
参数含义
formula——以R公式的形式指定训练样本集中的输入变量和输出变量。写法:输出变量名~输入变量名
na.action=na.omit()——表示带有缺失值的观测不参与分析
k——用于指定近邻个数K,默认值为7
distance——用于指定闵科夫斯基距离中的参数k,默认值为2,即欧式距离
kernel——用于指定核函数,可取值包括”rectangular”(均匀核),”triangular”,”epanechnikov”,”biweight”,”triweight”,”cos”,”gaussian”,”optimal”(研究表明,出均匀核之外的其他核函数,无论选用那种核,预测误差差异均不明显。所以应用中选择哪种核函数都可以,核函数值即为权重。
函数返回值
fitted.values:数值型向量,存放测试样本集中输出变量的预测值
CL:nxk矩阵(n为测试样本集数量,k为近邻个数),存放各观测的各自k个近邻所属类别
W:nxk矩阵(n为测试样本集数量,k为近邻个数),存放各观测的各自k个近邻的权重
D:nxk矩阵(n为测试样本集数量,k为近邻个数),存放各观测的各自k个近邻的闵科夫斯基距离
prob:数值型向量,存放测试样本集中各观测属于预测类别的概率
train.kknn()函数
将加权K-近邻法和留一法“打包”成一体的函数,使用前library(kknn)。
格式
train.kknn(formula=,data=,kmax=m,k=,distance=,kernel=)
参数含义
kmax——用于指定近邻个数K的最大可能取值(默认值11),近邻个数K的取值范围1~m
函数返回值
MISCLASS:kmax x n的矩阵(n为指定的核函数个数),存放不同核函数下当近邻个数K一次取1至kmax时,分类预测的留一法错判率
MEAN.ABS:kmax x n的矩阵(n为指定的核函数个数),存放不同核函数下当近邻个数K一次取1至kmax时,分类预测的留一法平均绝对误差
MEAN.SQU:kmax x n的矩阵(n为指定的核函数个数),存放不同核函数下当近邻个数K一次取1至kmax时,分类预测的留一法均方误差
fitted.values:以列表方式给出不同核函数下当近邻个数K依次取1至kmax时,各个观测的预测类别
best.parameters:为一个列表,存放最优(留一法预测误差最小)核函数名以及最优核函数下的最优邻个数K
一个栗子
继续利用上面数据嘿嘿
library(kknn)##对比三种核函数,利用留一法的判错率
train<-read.table("D:/R/《R语言数据挖掘方法及应用》案例数据/天猫Train1.txt",header=T,sep=",")
train$BuyOrNot<-as.factor(train$BuyOrNot)
fit<-train.kknn(formula = BuyOrNot~.,data=train,kmax=11,distance = 2,kernel = c("rectangular","triangular","gaussian"),na.action=na.omit())
plot(fit$MISCLASS[,1]*100,type="l",main="不同核函数和近邻个数K下的错判率曲线图",cex.main=0.8,xlab="近邻个数k",ylab="错判率(%)",col=1,lty=1)
lines(fit$MISCLASS[,2]*100,col=2,lty=2)
lines(fit$MISCLASS[,3]*100,col=3,lty=3)
legend("topleft",legend=c("rectangular","triangular","gaussian"),col=c(1,2,3),lty=c(1,2,3),cex=0.7)
##可见,均匀核的错判率高于其他两种核选择高斯核函数,,设置近邻个数K=7##利用加权K-近邻分类
test<-read.table("D:/R/《R语言数据挖掘方法及应用》案例数据/天猫Test1.txt",header=T,sep=",")
test$BuyOrNot<-as.factor(test$BuyOrNot)
fit1<-kknn(formula=BuyOrNot~.,train=train,test = test,k=7,distance=2,kernel="gaussian",na.action = na.omit())
CT1<-table(test[,1],fit1$fitted.values)
errratio1<-(1-sum(diag(CT1))/sum(CT1))*100##利用K近邻分类
library(class)
fit2<-knn(train=train[,-1],test=test[,-1],cl=train[,1],k=7)
CT2<-table(test[,1],fit2)
errratio2<-(1-sum(diag(CT2))/sum(CT2))*100##比较二者
errratio<-c(errratio1,errratio2)
errgraph<-barplot(errratio,main="加权K近邻法与K近邻法的错判率对比图(K=7)",cex.main=0.8,xlab="分类方法",ylab="判错率(%)",axes=FALSE)##自定义坐标轴
axis(side=1,at=c(0,errgraph,3),labels=c("","加权K近邻法","K近邻法",""),tcl=0.25)
axis(side=2,tcl=0.25)
出现的结果如下:
可以看出加权K-近邻法的判错率较低。
2019/12/12.今日笔记结束,上课去啦~撒花!
R语言笔记:机器学习【K近邻】相关推荐
- R语言与机器学习学习笔记(分类算法)
转载自:http://www.itongji.cn/article/0P534092014.html 人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经 ...
- 机器学习——K近邻分类算法及python代码实现
<机器学习:公式推导与代码实践>鲁伟著读书笔记. K近邻(K-nearest neighbor,K-NN)算法是一种经典的监督学习的分类方法.K近邻算法是依据新样本与k个与其相邻最近的样本 ...
- R语言基于机器学习算法进行特征筛选(Feature Selection)
R语言基于机器学习算法进行特征筛选(Feature Selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为"特征"(featu ...
- R语言笔记1:t检验和Wilcoxon检验
转自新浪博客,转载地址:http://blog.sina.com.cn/s/blog_427c24ae0102wg7n.html 1.t检验 数据是高血压患者治疗前后舒张压的变化,这个内容最熟悉不过了 ...
- R语言笔记4_模型诊断(关于残差)
R语言笔记4_模型诊断(关于残差)及模型补救(Box-Cox变换) 文章目录 R语言笔记4_模型诊断(关于残差)及模型补救(Box-Cox变换) 检验线性关系 检验方差齐性 检验残差正态性 检验离群值 ...
- R语言笔记——”org.Hs.eg.db“脱坑记录
R语言笔记--"org.Hs.eg.db"脱坑记录 "org.Hs.eg.db"是发布在bioconductor平台上面的一个数据库文件,该包中装有较多的主流数 ...
- 使用R语言进行机器学习的原因
两种最常用的数据科学语言R和Python之间存在着某种竞争. 刚接触机器学习的人都会选择其中一种语言来学习.人们的决定通常以他们可以访问的学习资源为指导,比如哪些资源在他们的工作领域中更常用,以及哪些 ...
- 机器学习——K近邻算法(KNN)(K Nearest Neighbor)
参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...
- 01. 机器学习笔记01——K近邻算法 , CV_example
K近邻算法(K-nearest neighbor,KNN算法) 李航博士<统计学习方法> 最近邻(k-Nearest Neighbors,KNN)算法是一种分类算法 应用场景:字符识别.文 ...
- [机器学习]K近邻算法及其应用--WEKA工具
K近邻算法理论基础 k近邻模型 距离度量 k值的选择 分类决策规则 WEKA实战 问题背景 数据预处理 得到分类器 对未知的数据进行分类预测 K近邻算法理论基础 (本节内容参考了:李航<统计学习 ...
最新文章
- javabean mysql_Mysql 存储 javabean
- mysql 时间取日期函数_mysql 获取当前日期函数及时间格式化参数详解
- strcat()的实现
- 【机器学习】Pandas练习题-提高你的数据分析技能
- 太赞了!用200道题彻底搞定Python数据处理!
- Apache Cassandra和Apache Ignite:关系并置和分布式SQL
- Python 安装第三方库,模块和包的安装方法
- java 蓝桥杯算法训练 筛选号码(题解)
- 百度地图智能语音助手用户量突破3亿:确实方便
- 请求到后台百分号被删除原因_接口测试平台代码实现85: 全局请求头1
- echarts横轴展示不全使用滚动条(dataZoom)的方法
- MyBatis配置详解
- 编程语言python怎么读-0编程基础,什么语言也没学过,请问学Python怎样入门?...
- Linux状态监控在root下可用,监控linux状态
- 计算机无线网络服务禁用了怎么办,Win10无线网络服务被禁用怎么办 Wlan选项不见无法上网的修复步骤...
- 数据分析——RFM模型
- STM32延时函数的四种方法
- 网络安全一哥的奇安信发布了全球高级可持续威胁年度报告 值得学习
- 北航软件测评中心 招聘FPGA测试工程师
- 论如何科学地倒牛奶~
热门文章
- 电脑仙人掌机器人作文_仙人掌作文之电脑仙人掌机器人的童话作文
- 富文本带图片导出word
- 《3D Point Cloud Registration for Localization using a Deep Neural Network Auto-Encoder》翻译
- 24V转5V降压芯片,24V转3.3V的稳压芯片,中文规格书
- china-pub第3波免费赠书正式推出,精品赠书20册,抢楼得书!
- Error in library(patRoon) : 不存在叫‘patRoon‘这个名字的程辑包
- 为什么提问能力很重要?
- 《紫川》之远东战火 十二卷
- 社交鼻祖人人网被卖 曾意气风发比肩Facebook 一代人的回忆终结了
- 计算机硬件输出设备有哪些,输出设备有哪些,输出设备的作用