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

相关推荐
双向337 分钟前
私有化部署全攻略:开源模型本地化改造的性能与安全评测
人工智能
189228048618 分钟前
NY243NY253美光固态闪存NY257NY260
大数据·网络·人工智能·缓存
AI波克布林9 分钟前
发文暴论!线性注意力is all you need!
人工智能·深度学习·神经网络·机器学习·注意力机制·线性注意力
张子夜 iiii9 分钟前
机器学习算法系列专栏:主成分分析(PCA)降维算法(初学者)
人工智能·python·算法·机器学习
GIS宇宙12 分钟前
五分钟免费开启你的Vibe Coding之旅!
人工智能
用户51914958484513 分钟前
Three.js实例化技术:高效渲染数千3D对象
人工智能·aigc
weixin_4569042715 分钟前
一文讲清楚Pytorch 张量、链式求导、正向传播、反向求导、计算图等基础知识
人工智能·pytorch·学习
一匹电信狗21 分钟前
【C++】异常详解(万字解读)
服务器·c++·算法·leetcode·小程序·stl·visual studio
ciku26 分钟前
Spring AI Starter和文档解读
java·人工智能·spring
Blossom.11835 分钟前
把 AI 推理塞进「 8 位 MCU 」——0.5 KB RAM 跑通关键词唤醒的魔幻之旅
人工智能·笔记·单片机·嵌入式硬件·深度学习·机器学习·搜索引擎