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

embedded/2024/11/30 5:53:05/

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("这是一个香蕉!")
这是一个苹果!

 

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


http://www.ppmy.cn/embedded/141661.html

相关文章

【css实现收货地址下边的平行四边形彩色线条】

废话不多说&#xff0c;直接上代码&#xff1a; <div class"address-block" ><!-- 其他内容... --><div class"checked-ar"></div> </div> .address-block{height:120px;position: relative;overflow: hidden;width: 500p…

TensorFlow手动更新模型特定变量

手动更新模型的特定变量是指在训练过程中不通过优化器的自动更新机制&#xff0c;而是直接对某些模型参数进行更新。这通常需要对特定变量的梯度进行处理并应用一个自定义的学习率。下面是如何实现这一操作的示例&#xff1a; 手动更新模型特定变量的步骤 计算损失和梯度&…

记 centos9 安装 docker

第一步&#xff1a;安装该dnf-plugins-core软件包&#xff08;它提供了管理 DNF 存储库的命令&#xff09; sudo dnf -y install dnf-plugins-core 第二步&#xff1a;设置存储库(这里使用的是阿里云的镜像源) sudo dnf config-manager --add-repo https://mirrors.aliyun.co…

猜一个0到10之间的数字 C#

生成随机数、使用循环和判断比较大小&#xff0c;最后猜出正确的数字 主要是生成随机数&#xff0c;固定步骤。 using System;class Program {static void Main(string[] args){//Random生成随机数的类//new用于创建对象的实例//Random()内可以填入种子&#xff0c;生成伪随机…

【vue for beginner】Vue该怎么学?

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 vue2 和 vue3 Vue2现在正向vue3逐渐更新中&#xff0c;官方vue2已经不再更新。 这个历程和当时的pyt…

11.25Pytorch_手动构建模型实战

八、手动构建模型实战 我们来整一个小小的案例&#xff0c;帮助加深对知识点的理解~ 0. 模型训练基础概念 在进行模型训练时&#xff0c;有三个基础的概念我们需要颗粒度对齐下&#xff1a; 名词定义Epoch使用训练集的全部数据对模型进行一次完整训练&#xff0c;被称为“一…

整数对最小和(Java Python JS C++ C )

题目描述 给定两个整数数组array1、array2,数组元素按升序排列。 假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素, 并对取出的所有元素求和,计算和的最小值。 注意: 两对元素如果对应于array1、array2中的两个下标均相同,则视为同一对元…

MySQL 中字符类型长度为什么推荐 2 的次方数大小?

MySQL 中字符类型长度为什么推荐 2 的次方数大小&#xff1f; 在 MySQL 数据库中&#xff0c;VARCHAR 类型是一种非常灵活的字符串存储类型&#xff0c;它允许存储可变长度的字符串。尽管在大多数情况下&#xff0c;直接根据实际需求设置 VARCHAR 的长度即可&#xff0c;但有一…