2024-2025秋季学期第五周调研技能学习——KNN(K-近邻)算法/K-means算法

2024-2025秋季学期第五周调研技能学习——KNN(K-近邻)算法/K-means算法

一、KNN

1、KNN介绍

KNN算法(K-Nearest Neighbours algorithm,简称KNN)是一种基本分类与回归方法,是最简单的机器学习算法之一。其基本做法是:给定测试实例,基于某种距离度量找出训练集中与其最靠近的K个实例点,然后基于这K个最近邻的信息来进行预测。假设有一组手写数字(0~9)需要识别,在使用KNN算法训练一个模型后,便可以轻松识别手写数所属的数字,并以此逐步提高精确度。

KNN算法有三个基本要素:距离度量、K值的选择及分类决策规则。

  1. 距离度量:通常使用曼哈顿距离(类似于棋盘上走格子从一点到另一点)等度量方式。

  2. K值的选择:对于不同的K值,使用训练集训练模型,并在验证集上评估性能,以确认表现最好的K值。K值如果过大,可能会包含太多的非近邻点;反之,模型会对噪声敏感,导致不精确。

  3. 分类决策规则:K个近邻的决策规则通常是多数表决,即选择K个近邻中出现最多的类别作为预测类别。

2、KNN算法流程

  1. 计算测试数据与各个训练数据之间的距离。
  2. 按照距离的递增关系进行排序。
  3. 选择距离最小的K个点。
  4. 确定前K个点所在类别的出现频率。
  5. 返回前K个点中出现频率最高的类别作为测试数据的预测分类。

3、KNN算法案例

KNN
K近邻法是一种基本分类与回归方法,是最简单的机器学习算法之一。KNN算法是机器学习中最简单的算法之一,它的原理非常直观:如果一个新样本在特征空间中的K个最相似(即距离最近)的样本中的大多数属于某一个类别,那么这个新样本也属于这个类别。

以下是一个简化的KNN算法的应用示例,假设我们有一个简单的数据集,用于根据两种特征(花瓣长度和花瓣宽度)来分类三种不同的花(Setosa、Versicolor、Virginica)。

数据集

这里是一个简化的示例数据集:

花瓣长度花瓣宽度类别
5.13.5Setosa
4.93.0Setosa
6.22.9Versicolor
5.43.9Versicolor
6.33.3Virginica
5.82.7Virginica

新样本

假设我们有一个新的样本需要分类:

  • 花瓣长度:5.7
  • 花瓣宽度:2.8

K值选择

我们选择K=3,即我们要找到与新样本最接近的3个样本。

步骤

  1. 计算距离:计算新样本与数据集中每个样本的欧氏距离。
  2. 欧氏距离公式 d = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} d=(x2x1)2+(y2y1)2
    对于新样本(5.7, 2.8)和第一个样本(5.1, 3.5)的距离是:
    d = ( 5.7 − 5.1 ) 2 + ( 2.8 − 3.5 ) 2 = 0. 6 2 + ( − 0.7 ) 2 = 0.36 + 0.49 = 0.85 ≈ 0.921 d = \sqrt{(5.7 - 5.1)^2 + (2.8 - 3.5)^2} = \sqrt{0.6^2 + (-0.7)^2} = \sqrt{0.36 + 0.49} = \sqrt{0.85} \approx 0.921 d=(5.75.1)2+(2.83.5)2 =0.62+(0.7)2 =0.36+0.49 =0.85 0.921
    重复此过程,计算新样本与数据集中所有样本的距离。
  3. 选择最近的K个样本:将所有计算出的距离排序,并选择最近的3个。
    假设我们计算出的距离排序如下:
    • 样本1(Setosa):0.921
    • 样本6(Virginica):1.21
    • 样本4(Versicolor):1.41
    • 样本2(Setosa):1.61
    • 样本3(Versicolor):1.72
    • 样本5(Virginica):1.89
      则最近的3个样本是样本1(Setosa)、样本6(Virginica)和样本4(Versicolor)。
  4. 投票:根据这3个样本的类别进行多数投票。
    • Setosa:1票
    • Versicolor:1票
    • Virginica:1票
      由于这里每个类别都得到了一票,我们可以选择K=4,即扩大近邻数量,再次投票,或者采用其他策略来打破平局。但在这个简化示例中,我们可以随机选择一个类别或者进一步分析数据。

结论

在这个例子中,由于投票结果出现了平局,我们无法直接确定新样本的类别。在实际情况中,我们可能需要重新考虑K值,或者使用加权投票法来处理这种平局的情况。如果选择K=4,并且第4个最近的样本是Setosa,那么新样本将被分类为Setosa。如果第4个最近的样本是Versicolor或Virginica,那么新样本将被分类为那个类别。

KNN算法中,K的取值比较重要,那么该如何确定K取多少值好呢?答案是通过交叉验证(将样本数据按照一定比例,拆分出训练用的数据和验证用的数据,比如6:4拆分出部分训练数据和验证数据),从选取一个较小的K值开始,不断增加K的值,然后计算验证集合的方差,最终找到一个比较合适的K值。

在K最近邻(KNN)算法中,可以使用K-Fold交叉验证的混淆矩阵评估模型的性能。

K-Fold交叉验证是一种统计学方法,用于评估机器学习模型在独立数据集上的性能。在K-Fold交叉验证中,数据集被分成K个子集,每个子集都轮流作为验证集,其余的K-1个子集则作为训练集。模型训练和验证的过程会重复K次,每次使用不同的验证集,最终得到K个模型性能的评估结果。

在K-Fold交叉验证中,每个折(fold)都可以生成一个混淆矩阵。如果要得到一个总的混淆矩阵,通常会将所有折的混淆矩阵合并起来,然后计算总的分类准确率、精确率、召回率等指标。

下图就是K-Fold交叉验证一个实例
在这里插入图片描述
矩阵解释如下

当真实类别为Iris-setosa时,预测正确的数量是50个,没有错误预测到其他两个类别。
当真实类别为Iris-versicolor时,预测正确的数量是46个,其中4个被错误地预测为Iris-virginica。
当真实类别为Iris-virginica时,预测正确的数量是48个,其中2个被错误地预测为Iris-versicolor。
此外,还给出了平均分类准确率为96.00%的信息。这意味着在所有测试样本中,正确分类的比例非常高。

二、 K-means 算法

1、k-means介绍

k-means算法中的k代表类簇个数,means代表类簇内数据对象的均值(这种均值是一种对类簇中心的描述),因此又被称为k-均值算法。它以距离作为数据对象间相似性度量的标准,即数据对象间的距离越小,则它们的相似性越高,越有可能在同一类簇。假设有一市场需要发展,k-means算法可以对消费群体进行识别、归类,以便对其进行更精准的营销、推荐,从而进行客户引流。

k-means算法是一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类与分类最大的区别在于,聚类过程为无监督过程,即待处理数据对象没有任何先验知识,而分类过程为有监督过程,即存在有先验知识的训练数据集。

2、k-means算法流程

  1. 首先确定一个k值,即希望将数据集经过聚类得到k个集合。
  2. 从数据集中随机选择k个数据点作为质心。
  3. 对数据集中每一个点,计算其与每一个质心的距离,离哪个质心近,就划分到那个质心所属的集合。
  4. 把所有数据归好集合后,重新计算每个集合的质心。
  5. 若新计算出来的质心和原来的质心之间的距离小于设置的阈值(表示位置变化不大,趋于稳定/收敛),可以认为聚类已经达到期望的结果,算法终止。
  6. 若新质心和原质心距离大于阈值,返回步骤3~5。
    在这里插入图片描述

3、K-means算法案例

引言

本文通过两个案例介绍K-means算法的实际应用。

案例一:牧师——居民模型。

案例二:餐饮连锁店A拟在B地为线下门店选址,于是对B地的不同街道进行调研。现运用K-means算法将不同街道(样本)划分为几个聚类,并判断每个聚类的特征,作为选址依据。


牧师——居民模型

案例描述与分析

4位新牧师到一个小镇布道,开始牧师随意选了4个布道点,居民前往各自最近的点位参加 (随机选择质心,并第一次划分)

第一次活动后,各牧师记下来自己点位的居民的家,并选择它们的中心点为新的布道点 (重新计算质心)

布道点变更后,部分居民家最近的点位也发生变化,居民前往新的最近点位参加活动 (新的划分)

数次变更后,布道点不再变化,小镇中的居民家根据距离分为了4个聚类

总结

在上述模型中,牧师运用K-means算法将一个先前陌生的小镇划分为4个区域。


线下门店选址

数据准备

餐饮连锁店A的选址考虑周边的商业住宅、餐饮服务数量,以下是B地20个街道的相关数据:

街道商业住宅数餐饮服务数
15437
22854
32386
46523
53287
61623
79887
8103157
93456
107865
1198123
124587
132345
147523
152313
164787
178756
185484
1912963
207432
数据建模
K值选取

聚类划分目标是使样本到其聚类样本中心 误差平方和(SSE) 最小,易知K值越大(SSE)越小,而K值过大又不能达到聚类划分的要求。当K值超过某个数时SSE不再明显减小,此时就是最佳K值

以下是该案例中取不同K值时的SSE:

K值12345678910
SSE12345.679876.546543.214321.094000.753950.323900.003890.123885.673880.00

观察得最佳K值为4。

聚类划分

取K=4,运用K-means算法进行聚类划分:

聚类街道号商业住宅数平均值餐饮服务数平均值
12,3,5,6,13,1528.8351.33
21,4,9,10,12,16,18,2053.87551.375
37,8,11,19107107.5
414,178139.5
特征描述

根据4个聚类的商业住宅、餐饮服务数平均值分析,

聚类1为休闲区域,聚类2为中等密度区域

聚类3为繁华区域,聚类4为商务区域

餐饮连锁店A可根据自己的商业定位,在相应聚类的街道中开设新店。


总结

K-means算法提供了一种简单的、无监督的聚类方法,可以得到具有不同特征的聚类,用于决策。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值