R语言:KNN算法的实现——kknn包

本文详细介绍了如何在R语言中使用kknn包实现KNN算法,以红酒质量分类数据集为例,探讨了数据简介、R包下载、KNN实现过程以及ROC曲线和AUC值的计算,强调了kknn函数的关键参数设置。
Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

在前文中,我们已经介绍过了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 y y y~ x 1 + 1 2 + . . . + x n x_1+1_2+...+x_n x1+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曲线')

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

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值