在前文中,我们已经介绍过了KNN算法的原理以及其python实现,具体请见KNN算法及其python实现。

本文将主要介绍KNN算法的R语言实现,使用的R包是kknn。

数据简介

本文数据选择了红酒质量分类数据集,这是一个很经典的数据集,原数据集中“质量”这一变量取值有{3,4,5,6,7,8}。为了实现二分类问题,我们添加一个变量“等级”,并将“质量”为{3,4,5}的观测划分在等级0中,“质量”为{6,7,8}的观测划分在等级1中。

数据下载戳我

因变量:等级

自变量:非挥发性酸性、挥发性酸性、柠檬酸、剩余糖分、氯化物、游离二氧化硫、二氧化硫总量、浓度、pH、硫酸盐、酒精

library(openxlsx)
wine = read.xlsx("C:/Users/Mr.Reliable/Desktop/classification/winequality-red.xlsx")
#将数据集分为训练集和测试集,比例为7:3
train_sub = sample(nrow(wine),7/10*nrow(wine))
train_data = wine[train_sub,]
test_data = wine[-train_sub,]

KNN的实现

R包下载

install.packages('kknn')

实现KNN

kknn函数的重要参数:

参数 意义
formula yyy~x1+12+...+xnx_1+1_2+...+x_nx1​+12​+...+xn​,确定自变量和因变量
train 训练集
test 测试集
k 默认为7,表示选择7个最近的样本为代表
distance 默认为2,表示使用的是哪个明可夫斯基距离
kernel 可以选择的选项:rectangular(无权重),triangular,epanechnikov,biweight,triweight,cos,inv,gaussian,rank,optimal(默认)

kknn还有一些其他的参数,具体可以参考kknn参数选择

library(pROC) #绘制ROC曲线
library(kknn)
#数据预处理
train_data$等级 = factor(train_data$等级)
test_data$等级 = factor(test_data$等级)
wine_knn <- kknn(等级 ~  非挥发性酸性+挥发性酸性+柠檬酸+剩余糖分  +氯化物+游离二氧化硫+二氧化硫总量+浓度+pH+硫酸盐+酒精,train_data,test_data,k=7,distance = 2)

这样我们就实现了KNN算法

ROC曲线和AUC值

#在测试集上预测
pre_knn <- fitted(wine_knn)
#输出混淆矩阵
table(test_data$等级, pre_knn,dnn=c("真实值","预测值"))
#绘制ROC曲线并计算AUC值
knn_roc <- roc(test_data$等级,as.numeric(pre_knn))
plot(knn_roc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),grid.col=c("green", "red"), max.auc.polygon=TRUE,auc.polygon.col="skyblue", print.thres=TRUE,main='knn算法ROC曲线')


选择不同的kernel和k值将对模型的结果产生影响。一般来讲,使用默认值的效果比较好。

R语言:KNN算法的实现——kknn包相关推荐

  1. R语言·文本挖掘︱Rwordseg/rJava两包的安装(安到吐血)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言·文本挖掘︱Rwordseg/rJava ...

  2. R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

    笔者寄语:与前面的RsowballC分词不同的地方在于这是一个中文的分词包,简单易懂,分词是一个非常重要的步骤,可以通过一些字典,进行特定分词.大致分析步骤如下: 数据导入--选择分词字典--分词 但 ...

  3. R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战

    R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战 目录

  4. R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景、受试者口服茶碱的之后观察茶碱的浓度变化的山脊图

    R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景.受试者口服茶碱的之后观察茶碱的浓度变化的山脊图(Rid ...

  5. R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片

    R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片 目录

  6. R语言KNN模型数据分类实战

    R语言KNN模型数据分类实战 目录 R语言KNN模型数据分类实战 #KNN基本原理 #案例分析 ​#数据集说明

  7. C语言DFS算法的实现(附完整源码)

    C语言DFS算法的实现 C语言DFS算法的实现完整源码(定义,实现,main函数测试) C语言DFS算法的实现完整源码(定义,实现,main函数测试) #include <iostream> ...

  8. C语言BFS算法的实现(附完整源码)

    C语言BFS算法的实现 C语言BFS算法的实现完整源码(定义,实现,main函数测试) C语言BFS算法的实现完整源码(定义,实现,main函数测试) #include <iostream> ...

  9. R语言ggplot2可视化:gganimate包transition_time函数创建动态散点图动画(gif)、shadow_wake函数配置动画的渐变效果(gradual falloff)拖尾效应

    R语言ggplot2可视化:gganimate包基于transition_time函数创建动态散点图动画(gif).使用shadow_wake函数配置动画的渐变效果(gradual falloff)形 ...

  10. 随笔7:R语言绘图黑白印刷风格芯片包

    R语言绘图黑白印刷风格芯片包 1.基本说明 1.1本包的目标 让使用者将注意力集中在参数设定与调整上,而不是代码使用的细节,类似于一个芯片封装的过程.对几个常用的绘图函数进行了封装,并调整为印刷风格供 ...

最新文章

  1. sorry for yesterday
  2. 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
  3. GMIS 2017 Martin Müller演讲:深度学习时代的启发式搜索
  4. System message SM02
  5. 基于epoll+threadpool的webServer分析与实现
  6. icmp消息类型报告传输_ICMP消息的类型和ICMP消息格式
  7. qtableview与sqlite使用显示科学计算_使用MATLAB Profiler提升程序运行的效率
  8. 计算机科学家壁纸,电脑励志好看的文字壁纸推荐
  9. 计算机硬件和维护的论文,浅谈计算机的硬件维护论文
  10. 员工“风清扬”感慨:为公司裁员结果把自己裁了,网友:真够狠的
  11. 还在为英语学习发愁吗?身为程序员的你可能需要这样一份“宝典”(上)...
  12. 1t硬盘怎么分区最好_1TB硬盘如何分区
  13. 对于Verilog语言的一些总结
  14. 关于F# 6的那些新功能?你了解吗?
  15. 华为防火墙USG5500的配置方法
  16. 八大方法改善皮肤黄气
  17. vc++ C函数atoi和itoa的用法总结(转载)
  18. Terragen 4生成环境贴图教程
  19. 队列实现杨辉三角(附详细图解)
  20. 安全应急响应中心 Security Response Center(src)简介

热门文章

  1. Android架构师能力素质模型
  2. 基于 HTML5 + WebGL 的太阳系 3D 展示系统
  3. 功能安全专题之端到端(E2E) 的通信保护
  4. opencv+python获取摄像头视频流并翻转保存文件
  5. AtCoder Beginner Contest 178 C
  6. AtCoder Beginner Contest 233(A~D)题解
  7. 二、鼎捷T100总账管理之核算项管理篇
  8. 集合中的(交集,并集,差集,补集,对称差集)
  9. hdu 3987 Harry Potter and the Forbidden Forest
  10. OKR工作法阅读笔记(第一天)-序言和前言