机器学习算法1---KNN

本文深入探讨了KNN算法,包括其基本原理、KNN三要素、距离计算和K值选择。通过实例解释了分类和回归任务中的多数表决和加权平均决策规则。此外,还讨论了算法实现中的注意事项,如特征标准化和KD树优化,并介绍了scikit-learn库中的KNN分类和回归模型参数。

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

目录

一、KNN算法原理

1、KNN三要素

2、一个简单案例

3、算法原理简单实现

【KNN分类---等权】

【KNN分类-加权】

 【KNN回归---等权】

【KNN回归---加权】

4、注意要点

二、KNN算法实现

1、参数说明

2、鸢尾花数据案例

3、算法特点


一、KNN算法原理

k近邻(k-nearst-neiber),它计算的是待预测样本属性和标签样本属性的距离, 每个样本都可以用它最接近的k个邻居来代表。

它是监督学习,做分类&回归任务都可以。KNN在分类预测时,一般采用多数表决法;而在做回归预测时,一般采用平均值法。

1、KNN三要素

1)、【计算距离】计算待预测样本与训练集样本的距离

2)、【确定K值】从训练集中获取K个离待预测样本距离最近的样本数据

3)、【决策规则】K个中哪类样本多,这个待预测样本就判断为哪类

多数表决原则在计算机中有着广泛应用,特别是在自组织结构,也就是缺乏中心结构的体系中。区块链技术中发挥了核心作用的共识计算实质上也是遵照了多数表决原则。

2、一个简单案例

1)、【计算距离】将训练集中所有样例画入坐标系,计算待预测电影与已知分类的电影的欧式距离。

2)、【确定K值】按照距离升序排序,取前K个电影,假设k=3

3)、【决策规则】K个中哪类样本多,这个待预测电影就判断为哪类

3、算法原理简单实现

【距离】一般是欧式距离

\sqrt{\left( x_{1}-x_{2} \right)^{2}+\left( y_{1}-y_{2} \right)^{2}}

python计算欧式距离的3种方法:

a1 =np.array([3,104])
a2 =np.array([18,90])
dis1 = np.sum((np.array(a1) - np.array(a2)) ** 2) ** 0.5
dis2 = np.sqrt(np.sum(np.square(a1-a2)))
dis3 =np.linalg.norm(a1-a2)
# print(dis1) #20.518284528683193
# print(dis2) #20.518284528683193
# print(dis3) #20.518284528683193

【K值】K值太小,容易过拟合;K值太大容易欠拟合;因此需要网格搜索调参

【决策规则】分类模型(多数表决或加权多数表决),回归模型(平均值法或者加权平均值法)

加权---越近的投票权越大,通常用距离反比。

(1)多数表决和加权多数表决案例:

案例:距离待预测样本最近的5个点里,A类3个(距离分别是2,2,2),B类2个(距离分别是1,1)

  • 多数表决:A类3票,B类2票,判为A类;
  • 加权多数表决:

1)距离权重,A类(1/2票+1/2票+1/2票),B类(1票+1票)

2)距离权重和,sum=1/2+1/2+1/2+1+1=7/2

3)距离权重归一化,A1=(1/2)/ sum=1/7票 ;B1=(1)/sum =2/7票

4)分类求和:A类3/7票,B类4/7票,判为B类。

【KNN分类---等权】

##一、等权分类
import numpy as np
import pandas as pd
##初始化训练数据
T = [[3, 104, -1],
     [2, 100, -1],
     [1, 81, -1],
     [101, 10, 1],
     [99, 5, 1],
     [98, 2, 1]
     ]
##预测数据
x_test = [18, 90]
##邻居
K = 5

##思路:
#1、计算x到所有样本点的距离---sqrt((x1-x2)^2+(y1-y2)^2)
#2、距离从低到高排序,选前5个
#3、看5个样本点中-1和1的类别数量,谁的数量多判断为哪一类

"""1、计算x到所有样本点的距离---sqrt((x1-x2)^2+(y1-y2)^2)"""
listdistance = []
for t in T:  ## t是每条电影的数据
    dis = np.sum((np.array(t[:-1]) - np.array(x_test)) ** 2) ** 0.5
    listdistance.append([dis, t[-1]])

# print(listdistance)
# [[20.518284528683193, -1], 
# [18.867962264113206, -1], 
# [19.235384061671343, -1], 
# [115.27792503337315, 1], 
# [117.41379816699569, 1], 
# [118.92854997854805, 1]]

"""2、距离从低到高排序,选前5个"""
##按照dis进行排序
listdistance.sort()
# print(listdistance)
# [[18.867962264113206, -1], 
# [19.235384061671343, -1], 
# [20.518284528683193, -1], 
# [115.27792503337315, 1], 
# [117.41379816699569, 1], 
# [118.92854997854805, 1]]

listdistance=listdistance[:K]

"""3、看5个样本点中-1和1的类别数量,谁的数量多判断为哪一类"""
##选取K个邻居放入投票箱
arr = np.array(listdistance[:K])[:, -1]  #所有行,最后一列,降维
# print(arr)
# 
### 关于头歌平台中KNN算法机器学习教程与实例 #### 头歌平台概述 头歌(Tougo)是一个专注于计算机科学教育的学习平台,提供丰富的在线课程资源和实践环境。对于机器学习领域的内容,尤其是像KNN这样经典的算法,通常会通过理论讲解、代码实现以及实际应用案例相结合的方式进行教学。 #### KNN算法简介 KNN(K-Nearest Neighbors)是一种基于实例的学习方法,既可用于分类也可用于回归分析。其核心思想是:给定一个测试样本,在训练集中找到与其最近的K个邻居,并依据这K个邻居的信息来进行决策[^2]。 #### KNN算法的主要步骤 1. 数据预处理阶段,包括标准化或归一化操作以消除不同特征间量纲差异的影响。 2. 计算待测样本到所有已知样本的距离,常用欧氏距离或其他形式的距离度量方式。 3. 找出距离最小的前K个样本作为近邻点集合。 4. 对于分类任务采用投票机制决定最终类别;而对于回归任务则取平均值或者加权平均值得出结果。 #### 距离计算公式示例 以下是两种常见距离公式的Python实现: ```python import numpy as np def euclidean_distance(x, y): """欧几里得距离""" return np.sqrt(np.sum((np.array(x) - np.array(y)) ** 2)) def manhattan_distance(x, y): """曼哈顿距离""" return np.sum(abs(np.array(x) - np.array(y))) ``` 上述函数分别实现了欧氏距离和曼哈顿距离的计算过程。 #### 实际应用场景举例 假设我们有一个简单的电影分类场景,其中每部影片由两个属性描述:“拥抱次数”和“打斗次数”。利用已有标注的数据集可以构建模型并预测未知标签的新样例所属类型[^4]。 #### 可能存在的挑战及优化方向 尽管KNN易于理解和实现,但在大规模数据集上的性能可能较差,因为每次都需要遍历整个数据库寻找最接近的邻居。因此可以通过KD树索引结构加速查询效率,或是引入降维技术减少维度灾难带来的影响[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值