分类算法2:k近邻法及R语言实现

本文深入探讨了K近邻算法的三大核心要素:K值选择、距离度量和分类决策规则。通过鸢尾花数据集实验,展示了不同K值对分类结果的影响,强调了合理选择K值的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kkk近邻法是一种基本的分类与回归方法,这里主要讲述在分类问题中的k近邻算法。

kkk近邻法的三个基本要素:
(1):kkk值的选择;
(2):距离的度量;
(3):分类决策的规则。

kkk近邻法的基本思想:
step1:给定一个训练集;
step2:输入一个新的数据,在训练集中找到与该数据最邻近的kkk个数据;
step3:决策,如果这k个数据的多数属于某个类,就把输入的新数据归于这个类。

所以根据它的三个基本要素及基本思想,可以很清晰的看出接下来要做的工作无非就是两个:
(1):kkk值的选择;
(2):距离的度量。

首先介绍距离的度量问题:
kkk近邻模型的特征空间通常是nnn维是实数向量空间,即:RnR^nRn,使用的距离通常是欧氏距离,当然还有曼哈顿距离以及更一般的LpL_{p}Lp距离。下面分别介绍这几种距离的计算:
设:xi=(xi(1),xi(2),...,xi(n))τx_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^{\tau}xi=(xi(1),xi(2),...,xi(n))τ,xj=(xj(1),xj(2),...,xj(n))τx_j=(x_j^{(1)},x_j^{(2)},...,x_j^{(n)})^{\tau}xj=(xj(1),xj(2),...,xj(n))τ.

xix_ixixjx_jxjLpL_pLp距离定义为:
Lp(xi,xj)=(∑I=1n∣xi(l)−xj(l)∣p)1pL_p(x_i,x_j)=(\sum_{I=1}^n|x_i^{(l)}-x_j^{(l)}|^p)^{\frac{1}{p}}Lp(xi,xj)=(I=1nxi(l)xj(l)p)p1,这里p≥1p\geq1p1.
p=1p=1p=1时,为曼哈顿距离,当p=2p=2p=2时,为欧式距离。

注:不同距离的选择会导致最终分类的结果也有所以不同。

再介绍kkk值的选择
kkk值的选择会对kkk近邻法的结果产生重大的影响,想想为什么呢?
当选择较小的kkk值时,就相当于用一个较小的领域中的训练集数据进行预测,这样,近似误差会减小,但是估计误差会增大,预测结果对近邻的数据非常敏感,容易发生过拟合;
当选择较大的kkk值时,其结果恰好与选择较小的kkk值相反,其近似误差会变大,估计误差会变小;
当选择的k=Nk=Nk=N时,这时便完失去了预测的意义!

这里使用鸢尾花数据集

## k近邻算法

#-----利用鸢尾花数据------
iris

# 构造训练集和测试集,依旧用抽样的方式

train_ord <- sample(nrow(iris),120,replace = FALSE)
traindat <- iris[train_ord,]
testdat <- iris[-train_ord,]

##  构造分类器,并展示结果

library(class)
result <- knn(train <- traindat[,1:4],test <- testdat[,1:4],cl <- traindat$Species,k = 3)
library(gmodels)
CrossTable(testdat$Species,result)

##  调整k值为4,与k=3进行比较

result1 <- knn(train <- traindat[,1:4],test <- testdat[,1:4],cl <- traindat$Species,k = 4)
CrossTable(testdat$Species,result1)

k=3k=3k=3
k=1
k=4k=4k=4

在这里插入图片描述
从上述结果可以看出,当k=3k=3k=3k=4k=4k=4时的结果是一样的,但是分类结果都非常不错!

参考文献
【1】李航,统计学习方法,清华大学出版社.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值