KNN是什么?它是如何工作的?

什么是K最近邻算法(KNN)?

K最近邻算法(KNN)是一种简单而强大的监督学习算法,常用于分类和回归问题。它基于一个简单的假设:与一个数据点最相似的数据点的标签也应该相似。KNN的工作原理相当直观,它通过比较新数据点与训练集中已知数据点的相似性来预测新数据点的标签。在本文中,我们将深入探讨KNN算法的工作原理、数学推导、Python代码示例以及实际应用。

KNN的工作原理

KNN算法的核心思想是基于距离度量,它假设相似的数据在特征空间中具有相似的标签。因此,当我们要预测一个新数据点的标签时,我们会找到离它最近的K个训练数据点,并根据这些邻居的标签进行预测。

算法原理

假设我们有一个包含N个样本的训练集$X = {x_1, x_2, …, x_N}$,每个样本有M个特征。对于一个新的样本$x_q$,我们的任务是预测它的标签$y_q$。KNN的步骤如下:

  1. 计算新样本$x_q$与训练集中每个样本$x_i$的距离。
  2. 选择离$x_q$最近的K个样本。
  3. 根据这K个样本的标签,采用多数投票的方式确定$x_q$的标签$y_q$。

公式推导

距离度量

常用的距离度量方法有欧氏距离、曼哈顿距离和闵可夫斯基距离。在KNN中,常用的是欧氏距离:

$$
\text{Euclidean Distance} = \sqrt{\sum_{i=1}^{M}(x_{iq} – x_{ik})^2}
$$

其中,$x_{iq}$表示新样本的第i个特征,$x_{ik}$表示训练集中第k个样本的第i个特征。

标签预测

标签预测采用多数投票的方式,即选择K个最近邻居中出现最频繁的标签作为新样本的标签。

计算步骤

  1. 计算新样本与每个训练样本的距离。
  2. 根据距离找到K个最近邻居。
  3. 统计这K个邻居的标签,选择出现最频繁的标签作为预测结果。

Python代码示例

import numpy as np
from collections import Counter

class KNN:
    def __init__(self, k=3):
        self.k = k

    def fit(self, X_train, y_train):
        self.X_train = X_train
        self.y_train = y_train

    def euclidean_distance(self, x1, x2):
        return np.sqrt(np.sum((x1 - x2)**2))

    def predict(self, X_test):
        predictions = []
        for x in X_test:
            distances = [self.euclidean_distance(x, x_train) for x_train in self.X_train]
            k_indices = np.argsort(distances)[:self.k]
            k_nearest_labels = [self.y_train[i] for i in k_indices]
            most_common = Counter(k_nearest_labels).most_common(1)
            predictions.append(most_common[0][0])
        return predictions

# 示例
X_train = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y_train = np.array([0, 0, 1, 1])
X_test = np.array([[4, 3], [8, 7]])

knn = KNN(k=2)
knn.fit(X_train, y_train)
predictions = knn.predict(X_test)
print(predictions)

代码细节解释

  • KNN类包含了初始化方法__init__、拟合方法fit和预测方法predict
  • euclidean_distance函数计算了两个样本之间的欧氏距离。
  • 在预测过程中,我们找到了K个最近邻居的索引,并统计了它们的标签。
  • 最后,我们选择出现频率最高的标签作为预测结果。

通过这样的代码示例,我们可以清晰地理解KNN算法的实现原理及其在Python中的实际应用。

通过本文的介绍,相信您已经对KNN算法有了更深入的理解。KNN虽然简单,但在实际问题中却有着广泛的应用,特别是在模式识别、数据挖掘等领域。

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/828453/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球