KNN中如何处理离群值?

关于 KNN 中如何处理离群值?

介绍

在机器学习领域中,KNN(K-最近邻)算法是一种常用的分类和回归算法。它通过将样本空间划分为不同的区域,并根据邻居样本的标签来对未知样本进行分类或估计。

然而,由于离群值的存在,KNN 算法可能受到不良影响。离群值指的是明显偏离其他数据点的异常值。处理离群值是提高模型鲁棒性的一个关键问题。

本文将详细介绍如何在 KNN 中处理离群值,包括算法原理、推导、计算步骤和 Python 代码示例。

算法原理

KNN 算法的基本原理是利用最近邻样本的标签来推断未知样本的标签。对于分类问题,最常用的方法是 majority voting,即选择 K 个最近邻样本中出现最频繁的标签作为未知样本的标签。对于回归问题,可以采用 K 个最近邻样本的均值或加权平均作为预测值。

然而,当数据集中存在离群值时,KNN 算法的表现可能不佳。离群值的存在可能导致最近邻的选择偏离正常范围,从而产生错误的分类结果或回归预测。

如何处理离群值

为了解决离群值问题,在 KNN 算法中,可以采用以下两种方法来处理离群值:

  1. 异常值检测和移除:首先,可以使用离群值检测方法(如基于距离或统计的方法)来识别离群值。然后,将这些离群值从数据集中移除或标记为缺失值,以避免对模型的不良影响。

  2. 距离加权:在计算 K 个最近邻样本时,可以使用距离加权的方法,赋予离未知样本更近的样本更高的权重。这样可以减小离群值对结果的影响,使得模型更加鲁棒。

公式推导

距离加权 KNN 公式推导

设未知样本为$X_u$,已知样本集为$X$,未知样本的最近邻集合为$X_k$,对应的标签集合为$Y_k$。假设距离函数为欧氏距离$dist(x_1, x_2)$。

距离加权 KNN 的预测公式为:

$$\hat{y}u = \frac{\sum{i=1}^{k}\frac{1}{dist(x_u, x_{k_i}} \cdot y_{k_i}}{\sum_{i=1}^{k}\frac{1}{dist(x_u, x_{k_i}}},$$

其中,$k$ 表示选择的最近邻样本数量。

计算步骤

  1. 根据距离函数计算未知样本与已知样本之间的距离。

  2. 根据距离排序,选择距离最近的 $k$ 个已知样本。

  3. 根据选择的已知样本的标签进行距离加权计算。

  4. 对于分类问题,使用 majority voting 确定未知样本的标签;对于回归问题,取距离加权均值作为预测值。

Python 代码示例

下面是使用 Python 实现的距离加权 KNN 算法的代码示例:

import numpy as np

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

def weighted_knn(X, y, X_u, k):
    distances = [distance(X_u, x) for x in X]
    indices = np.argsort(distances)[:k]
    weights = [1 / distances[i] for i in indices]
    weighted_labels = [weights[i] * y[i] for i in indices]
    return np.sum(weighted_labels) / np.sum(weights)

# 虚拟数据集
X = np.array([[1, 2], [3, 4], [5, 6]])
y = np.array([0, 1, 0])
X_u = np.array([4, 5])

k = 2

prediction = weighted_knn(X, y, X_u, k)
print("预测结果:", prediction)

上述代码中,我们定义了一个距离函数和一个距离加权 KNN 函数。虚拟数据集 X 包含三个已知样本,y 是对应的标签。未知样本 X_u 是 [4, 5],我们选择 k=2 来计算预测结果。

代码细节解释

  1. 距离函数 distance 使用欧氏距离公式计算两个点之间的距离。

  2. weighted_knn 函数接受已知样本集 X、标签集 y、未知样本 X_u 和选择的最近邻数量 k,返回距离加权 KNN 的预测结果。

  3. weighted_knn 函数中,我们计算未知样本与已知样本之间的距离,并根据距离排序选择最近的 k 个已知样本。

  4. 我们根据选择的最近邻样本的标签和距离进行距离加权计算,并计算加权后的标签均值作为预测结果。

  5. 最后,我们使用虚拟数据集进行测试,并输出预测结果。

通过该代码示例,我们可以实现距离加权 KNN,并使用自定义的数据集进行预测。

总结

本文详细介绍了 KNN 算法中如何处理离群值的方法。通过异常值检测和移除、距离加权这两种方式,可以提高 KNN 算法对离群值的鲁棒性。同时,提供了公式推导、计算步骤和 Python 代码示例来说明算法原理和实现细节。希望本文对于理解 KNN 算法中离群值处理有所帮助。

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

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

(0)

大家都在看

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