写在开头:
我是一个学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近邻】相关推荐

  1. R语言与机器学习学习笔记(分类算法)

    转载自:http://www.itongji.cn/article/0P534092014.html 人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经 ...

  2. 机器学习——K近邻分类算法及python代码实现

    <机器学习:公式推导与代码实践>鲁伟著读书笔记. K近邻(K-nearest neighbor,K-NN)算法是一种经典的监督学习的分类方法.K近邻算法是依据新样本与k个与其相邻最近的样本 ...

  3. R语言基于机器学习算法进行特征筛选(Feature Selection)

    R语言基于机器学习算法进行特征筛选(Feature Selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为"特征"(featu ...

  4. R语言笔记1:t检验和Wilcoxon检验

    转自新浪博客,转载地址:http://blog.sina.com.cn/s/blog_427c24ae0102wg7n.html 1.t检验 数据是高血压患者治疗前后舒张压的变化,这个内容最熟悉不过了 ...

  5. R语言笔记4_模型诊断(关于残差)

    R语言笔记4_模型诊断(关于残差)及模型补救(Box-Cox变换) 文章目录 R语言笔记4_模型诊断(关于残差)及模型补救(Box-Cox变换) 检验线性关系 检验方差齐性 检验残差正态性 检验离群值 ...

  6. R语言笔记——”org.Hs.eg.db“脱坑记录

    R语言笔记--"org.Hs.eg.db"脱坑记录 "org.Hs.eg.db"是发布在bioconductor平台上面的一个数据库文件,该包中装有较多的主流数 ...

  7. 使用R语言进行机器学习的原因

    两种最常用的数据科学语言R和Python之间存在着某种竞争. 刚接触机器学习的人都会选择其中一种语言来学习.人们的决定通常以他们可以访问的学习资源为指导,比如哪些资源在他们的工作领域中更常用,以及哪些 ...

  8. 机器学习——K近邻算法(KNN)(K Nearest Neighbor)

    参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...

  9. 01. 机器学习笔记01——K近邻算法 , CV_example

    K近邻算法(K-nearest neighbor,KNN算法) 李航博士<统计学习方法> 最近邻(k-Nearest Neighbors,KNN)算法是一种分类算法 应用场景:字符识别.文 ...

  10. [机器学习]K近邻算法及其应用--WEKA工具

    K近邻算法理论基础 k近邻模型 距离度量 k值的选择 分类决策规则 WEKA实战 问题背景 数据预处理 得到分类器 对未知的数据进行分类预测 K近邻算法理论基础 (本节内容参考了:李航<统计学习 ...

最新文章

  1. javabean mysql_Mysql 存储 javabean
  2. mysql 时间取日期函数_mysql 获取当前日期函数及时间格式化参数详解
  3. strcat()的实现
  4. 【机器学习】Pandas练习题-提高你的数据分析技能
  5. 太赞了!用200道题彻底搞定Python数据处理!
  6. Apache Cassandra和Apache Ignite:关系并置和分布式SQL
  7. Python 安装第三方库,模块和包的安装方法
  8. java 蓝桥杯算法训练 筛选号码(题解)
  9. 百度地图智能语音助手用户量突破3亿:确实方便
  10. 请求到后台百分号被删除原因_接口测试平台代码实现85: 全局请求头1
  11. echarts横轴展示不全使用滚动条(dataZoom)的方法
  12. MyBatis配置详解
  13. 编程语言python怎么读-0编程基础,什么语言也没学过,请问学Python怎样入门?...
  14. Linux状态监控在root下可用,监控linux状态
  15. 计算机无线网络服务禁用了怎么办,Win10无线网络服务被禁用怎么办 Wlan选项不见无法上网的修复步骤...
  16. 数据分析——RFM模型
  17. STM32延时函数的四种方法
  18. 网络安全一哥的奇安信发布了全球高级可持续威胁年度报告 值得学习
  19. 北航软件测评中心 招聘FPGA测试工程师
  20. 论如何科学地倒牛奶~

热门文章

  1. 电脑仙人掌机器人作文_仙人掌作文之电脑仙人掌机器人的童话作文
  2. 富文本带图片导出word
  3. 《3D Point Cloud Registration for Localization using a Deep Neural Network Auto-Encoder》翻译
  4. 24V转5V降压芯片,24V转3.3V的稳压芯片,中文规格书
  5. china-pub第3波免费赠书正式推出,精品赠书20册,抢楼得书!
  6. Error in library(patRoon) : 不存在叫‘patRoon‘这个名字的程辑包
  7. 为什么提问能力很重要?
  8. 《紫川》之远东战火 十二卷
  9. 社交鼻祖人人网被卖 曾意气风发比肩Facebook 一代人的回忆终结了
  10. 计算机硬件输出设备有哪些,输出设备有哪些,输出设备的作用