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 的表现通常是不错的!

相关推荐
子燕若水1 小时前
Unreal Engine 5中的AI知识
人工智能
极限实验室2 小时前
Coco AI 实战(一):Coco Server Linux 平台部署
人工智能
杨过过儿2 小时前
【学习笔记】4.1 什么是 LLM
人工智能
巴伦是只猫2 小时前
【机器学习笔记Ⅰ】13 正则化代价函数
人工智能·笔记·机器学习
大千AI助手2 小时前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
AI生存日记3 小时前
百度文心大模型 4.5 系列全面开源 英特尔同步支持端侧部署
人工智能·百度·开源·open ai大模型
LCG元3 小时前
自动驾驶感知模块的多模态数据融合:时序同步与空间对齐的框架解析
人工智能·机器学习·自动驾驶
why技术3 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
YuTaoShao4 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展