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

相关推荐
DFminer1 小时前
【LLM】fast-api 流式生成测试
人工智能·机器人
郄堃Deep Traffic1 小时前
机器学习+城市规划第十四期:利用半参数地理加权回归来实现区域带宽不同的规划任务
人工智能·机器学习·回归·城市规划
int型码农1 小时前
数据结构第八章(一) 插入排序
c语言·数据结构·算法·排序算法·希尔排序
UFIT1 小时前
NoSQL之redis哨兵
java·前端·算法
喜欢吃燃面1 小时前
C++刷题:日期模拟(1)
c++·学习·算法
SHERlocked931 小时前
CPP 从 0 到 1 完成一个支持 future/promise 的 Windows 异步串口通信库
c++·算法·promise
怀旧,1 小时前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法
积极向上的向日葵2 小时前
有效的括号题解
数据结构·算法·
GIS小天2 小时前
AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月7日第101弹
人工智能·算法·机器学习·彩票
阿部多瑞 ABU2 小时前
主流大语言模型安全性测试(三):阿拉伯语越狱提示词下的表现与分析
人工智能·安全·ai·语言模型·安全性测试