AI开发:K-最近邻 通俗入门 - Python 机器学习

K-最近邻(KNN,K-Nearest Neighbors)是一个非常简单但有效的机器学习算法。它的基本思想是:给定一个数据点,我们根据它的"邻居"来做预测,看看它与哪些数据点相似,并根据这些邻居的标签来决定该数据点的标签。

KNN 基本概念

假设你有一个数据集,每个数据点都有一些特征和一个标签(可以是分类标签,比如"猫"或"狗")。KNN 做预测时,找到离当前数据点最近的 K 个数据点(邻居),然后根据这些邻居的标签来决定当前数据点的标签。

  • K: 选择最近的 K 个邻居。
  • 距离: KNN 使用距离度量来找最近的邻居,通常是欧几里得距离(即两点之间的直线距离)。
  • 多数投票: KNN 根据邻居们的标签来决定当前点的标签,通常是采取"多数投票"的方式。

示例:用 KNN 做分类

假设你有一个关于水果的简单数据集,其中包含了水果的重量和颜色特征(比如"红色"和"黄色"),并且标签是"苹果"或"香蕉"。

步骤1:准备数据

首先,我们需要一些数据:

复制代码
import numpy as np

# 数据集:每个数据点有两个特征:重量、颜色
# 红色苹果和黄色香蕉
X = np.array([[150, 1], [120, 0], [170, 1], [130, 0], [160, 1]])
# 标签:1表示苹果,0表示香蕉
y = np.array([1, 0, 1, 0, 1])

在上面的代码中,X 是一个二维数组,代表了每个水果的特征。第一个特征是水果的重量,第二个是颜色(1表示红色,0表示黄色)。y 是水果的标签,1表示"苹果",0表示"香蕉"。

步骤2:计算距离

KNN 需要计算数据点之间的距离。我们通常使用欧几里得距离,这是两点之间的直线距离。

复制代码
from sklearn.neighbors import KNeighborsClassifier

# 创建 KNN 分类器,k=3表示我们选择最近的3个邻居
knn = KNeighborsClassifier(n_neighbors=3)

# 训练 KNN 模型
knn.fit(X, y)

# 预测一个新的水果(重量为145,颜色为红色)
new_fruit = np.array([[145, 1]])
prediction = knn.predict(new_fruit)

# 输出预测结果
if prediction == 1:
    print("这是一个苹果!")
else:
    print("这是一个香蕉!")
bash 复制代码
这是一个苹果!
步骤3:解释结果

在上面的代码中,我们创建了一个 KNN 模型,并用之前的数据集进行了训练。然后,我们给一个新数据点(重量145g,红色)进行预测。KNN 会根据最近的3个邻居(也就是 K=3)来判断这个新水果的标签。

假设结果显示:"这是一个苹果!",说明根据最近的3个邻居(可能是一些苹果),KNN 推测这个新水果是苹果。

步骤4:选择 K 值

K 值的选择是 KNN 中一个重要的部分。通常,K 值越大,模型越平滑,但可能会导致过于"笼统"的预测;K 值越小,模型对数据的变化更敏感,可能导致过拟合。选择合适的 K 值需要通过实验来确定。

进一步理解:KNN 的优缺点

优点:
  1. 简单易懂:KNN 是一个非常直观的算法,容易理解。
  2. 不需要训练:与许多其他算法不同,KNN 在训练过程中没有明显的计算过程,训练几乎是零开销。
  3. 适用于小规模数据:KNN 在数据集较小时表现良好。
缺点:
  1. 计算开销大:每次预测时都需要计算与所有训练数据点的距离,特别是在数据量大的时候,效率较低。
  2. 对不相关特征敏感:如果数据中有噪声或不相关特征,KNN 的预测可能会受到影响。
  3. 内存消耗大:因为KNN需要保存整个训练集,所以内存消耗可能较大。

结论

KNN 是一个非常简单且实用的算法,特别适用于一些基础的分类任务。不过,它对数据量大的场景可能不太适用,需要一些优化或替代方法。对于小规模数据,KNN 的表现通常是不错的!

相关推荐
m0_6501082424 分钟前
【论文精读】迈向更好的指标:从T2VScore看文本到视频生成的新评测范式
人工智能·论文精读·评估指标·文本到视频生成·t2vscore·tvge数据集·视频质量评估
十子木31 分钟前
C++ 类似pytorch的库,工具包,或者机器学习的生态
c++·pytorch·机器学习
多喝开水少熬夜31 分钟前
损失函数系列:focal-Dice-vgg
图像处理·python·算法·大模型·llm
算家计算40 分钟前
一张白纸,无限画布:SkyReels刚刚重新定义了AI视频创作
人工智能·aigc·资讯
Kandiy1802539818742 分钟前
PHY6252国产蓝牙低成本透传芯片BLE5.2智能灯控智能家居
人工智能·物联网·智能家居·射频工程
立志成为大牛的小牛1 小时前
数据结构——三十七、关键路径(王道408)
数据结构·笔记·程序人生·考研·算法
机器之心1 小时前
字节Seed团队发布循环语言模型Ouro,在预训练阶段直接「思考」,Bengio组参与
人工智能·openai
ytttr8731 小时前
基于MATLAB的Relief算法特征权重选择实现
算法
新智元1 小时前
AI 教父 Hinton 末日警告!你必须失业,AI 万亿泡沫豪赌才能「赢」
人工智能·openai
新智元1 小时前
CUDA 再见了!寒武纪亮出软件全家桶
人工智能·openai