R语言:KNN算法的实现——kknn包
在前文中,我们已经介绍过了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包相关推荐
- R语言·文本挖掘︱Rwordseg/rJava两包的安装(安到吐血)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言·文本挖掘︱Rwordseg/rJava ...
- R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)
笔者寄语:与前面的RsowballC分词不同的地方在于这是一个中文的分词包,简单易懂,分词是一个非常重要的步骤,可以通过一些字典,进行特定分词.大致分析步骤如下: 数据导入--选择分词字典--分词 但 ...
- R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战
R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战 目录
- R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景、受试者口服茶碱的之后观察茶碱的浓度变化的山脊图
R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景.受试者口服茶碱的之后观察茶碱的浓度变化的山脊图(Rid ...
- R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片
R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片 目录
- R语言KNN模型数据分类实战
R语言KNN模型数据分类实战 目录 R语言KNN模型数据分类实战 #KNN基本原理 #案例分析 #数据集说明
- C语言DFS算法的实现(附完整源码)
C语言DFS算法的实现 C语言DFS算法的实现完整源码(定义,实现,main函数测试) C语言DFS算法的实现完整源码(定义,实现,main函数测试) #include <iostream> ...
- C语言BFS算法的实现(附完整源码)
C语言BFS算法的实现 C语言BFS算法的实现完整源码(定义,实现,main函数测试) C语言BFS算法的实现完整源码(定义,实现,main函数测试) #include <iostream> ...
- R语言ggplot2可视化:gganimate包transition_time函数创建动态散点图动画(gif)、shadow_wake函数配置动画的渐变效果(gradual falloff)拖尾效应
R语言ggplot2可视化:gganimate包基于transition_time函数创建动态散点图动画(gif).使用shadow_wake函数配置动画的渐变效果(gradual falloff)形 ...
- 随笔7:R语言绘图黑白印刷风格芯片包
R语言绘图黑白印刷风格芯片包 1.基本说明 1.1本包的目标 让使用者将注意力集中在参数设定与调整上,而不是代码使用的细节,类似于一个芯片封装的过程.对几个常用的绘图函数进行了封装,并调整为印刷风格供 ...
最新文章
- sorry for yesterday
- 给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
- GMIS 2017 Martin Müller演讲:深度学习时代的启发式搜索
- System message SM02
- 基于epoll+threadpool的webServer分析与实现
- icmp消息类型报告传输_ICMP消息的类型和ICMP消息格式
- qtableview与sqlite使用显示科学计算_使用MATLAB Profiler提升程序运行的效率
- 计算机科学家壁纸,电脑励志好看的文字壁纸推荐
- 计算机硬件和维护的论文,浅谈计算机的硬件维护论文
- 员工“风清扬”感慨:为公司裁员结果把自己裁了,网友:真够狠的
- 还在为英语学习发愁吗?身为程序员的你可能需要这样一份“宝典”(上)...
- 1t硬盘怎么分区最好_1TB硬盘如何分区
- 对于Verilog语言的一些总结
- 关于F# 6的那些新功能?你了解吗?
- 华为防火墙USG5500的配置方法
- 八大方法改善皮肤黄气
- vc++ C函数atoi和itoa的用法总结(转载)
- Terragen 4生成环境贴图教程
- 队列实现杨辉三角(附详细图解)
- 安全应急响应中心 Security Response Center(src)简介
热门文章
- Android架构师能力素质模型
- 基于 HTML5 + WebGL 的太阳系 3D 展示系统
- 功能安全专题之端到端(E2E) 的通信保护
- opencv+python获取摄像头视频流并翻转保存文件
- AtCoder Beginner Contest 178 C
- AtCoder Beginner Contest 233(A~D)题解
- 二、鼎捷T100总账管理之核算项管理篇
- 集合中的(交集,并集,差集,补集,对称差集)
- hdu 3987 Harry Potter and the Forbidden Forest
- OKR工作法阅读笔记(第一天)-序言和前言