如何在 Python 中实现 KNN 算法?

2025年1月5日 | 阅读6分钟

引言

在本教程中,我们将学习如何在 Python 中实现 KNN 算法。KNN 是一种简单的监督式机器学习 (ML) 算法。监督学习可用于分类或回归,并常用于缺失值填充。KNN 算法基于这样一个理念:一个给定数据点最近的观测值是数据集中“最相似”的观测值。因此,我们可以根据最近可用值的价值来对无法再次找到的点进行分类,用户可以通过选择 K 来选择算法中使用的附近观测值的数量。在这里,我们将向您展示如何在 Python 中使用 KNN 算法。

什么是监督学习?

监督学习是机器学习 (ML) 的一部分。在这种学习类型中,我们在训练数据中想要预测的值以及我们想要学习的数据中的值被称为目标。数据集中的所有其他列都称为特征或独立变量预测因子或预测变量。监督学习分为两类,如下所示:

1. 分类

分类是监督学习的一部分。分类是寻找一个函数,该函数有助于根据不同类型的参数将数据集分组。在分类中,计算机从训练数据中进行训练,并根据该类别将数据分为不同的类别。

2. 回归

回归是监督学习的另一部分。回归是寻找因变量和自变量之间关系的过程。它有助于预测固定变量,例如预测市场趋势、房价等。

如何在监督学习中获得带标签的数据?

在监督学习中有多种方法可以获得带标签的数据,如下所示:

  1. 首先,带标签的数据必须是历史数据。
  2. 实验获取数据:我们可以进行实验来生成带标签的数据,例如 A/B 测试。
  3. 众包

在这里,我们使用 scikit-learn 包在 Python 中执行监督学习。我们还使用 TensorFlow、Keras 等其他一些包。

什么是 KNN 算法?

KNN 算法的全称是 k-nearest neighbor 算法。该算法可以解决分类问题。k-最近邻或 KNN 算法在最初通过考虑数据分布来创建边界。当出现新数据时,算法会将其与最近的行进行匹配。因此,k 值越大,分离曲线越平滑,模型越复杂。然而,k 值越小,模型就越容易过拟合数据,模型也越容易。

分析数据集时,拥有一个 k 值对于防止数据集过拟合和欠拟合问题至关重要。通过使用 k-最近邻算法,我们可以拟合历史数据或训练模型,从而可以预测未来数据。

程序代码

现在,我们学习 Python 中 KNN 算法的程序代码。代码如下:

在上面的示例中,我们完成了一些特定的步骤。这些步骤将在下面讨论:

  1. 我们从 scikit-learn 包中导入了 Python 中的 k-nearest neighbor 算法。
  2. 然后,我们创建了特征变量和目标变量。
  3. 训练数据和测试数据在此处拆分。
  4. 使用邻居值,我们正在生成 KNN 模型。
  5. 在模型中,我们已经训练并拟合了所有数据。
  6. 我们对模型尚未见过的数据集进行预测。

在这里,我们已经了解了如何使用 KNN 算法解决监督机器学习问题。现在,我们已经学习了如何使用 KNN 算法来衡量给定模型的准确性。

程序代码

现在,我们学习 Python 中 KNN 算法的程序代码,用于预测给定模型的准确性。代码如下:

我们如何为数据集决定正确的 K 值?

此外,我们需要了解数据以获得所需 k 值的范围。但是要获得正确的 k 值,我们必须为每个所需的 k 值测试模型。为了清楚这一点,我们需要举个例子。

程序代码

现在,我们学习 Python 中 KNN 算法的程序代码,通过该代码我们可以为数据集决定正确的 K 值。代码如下:

输出

现在,我们在 Python 中编译上述代码,成功编译后运行它。输出如下:

How to Implement the KNN Algorithm in Python

在上面的示例中,我们创建了一个图来显示具有高准确性的 k 值。此方法不用于在进程之间选择 n_neighbors 的正确值。相反,我们执行超参数调整来选择能提供最佳性能的值。

KNN 算法的局限性是什么?

KNN 是一种易于学习的简单算法。它不依赖机器学习 (ML) 模型来生成预测。KNN 是一种分类器,只需要知道它需要处理多少个集群(一个或多个)。这意味着它可以在不知道有多少其他类别的情况下快速评估是否需要添加新类别。这种简单性的主要缺点是它无法预测不寻常的事情(如新疾病),而 KNN 无法做到这一点,因为它需要知道健康人群中稀有产品的数量。

此外,KNN 算法通过实验获得准确性。它是一种速度较慢且在时间和内存方面成本更高的算法。为了预测目的,需要内存来存储所有训练数据集。此外,由于欧几里得距离对幅度敏感,数据集中的幅度大的特征比幅度小的特征更重要。这些是 KNN 或 k-nearest neighbour 算法的局限性。

结论

因此,通过本教程,我们正在学习如何在 Python 中实现 KNN 算法。在这里,我们学习了机器学习 (ML) 的一部分——监督学习。在对监督学习有了基本了解之后,我们探索了 k-nearest neighbor 算法或 KNN 算法来解决监督机器学习问题。我们还检查了模型的准确性。在这里,我们还学习了如何为数据集决定正确的 K 值。我们分享了这个概念的程序代码以及该代码的输出。