K 近邻法(K-Nearest Neighbor)

一、K 近邻法是什么?

K 近邻法是一种基本的分类和回归算法,它是一种最简单的机器学习算法之一。该算法通过计算一个点周围 K 个最近邻居的距离来确定该点的类别或值。基于 K 近邻法的分类和回归算法具有简单、直观、易于理解的特点。

二、K 近邻法的原理

K 近邻法的原理是基于距离度量的。当给定一个样本后, K 近邻算法会在训练集中寻找 K 个距离该样本最近的样本点,然后将这 K 个样本点的类别作为预测样本的类别。

其中,距离度量通常采用欧式距离或曼哈顿距离。在分类问题中,K 近邻法采用投票法来确定预测样本的类别。在回归问题中,K 近邻法采用简单平均法来确定预测样本的值。

三、K 近邻法的优缺点

1、优点

K 近邻法非常简单,易于理解和实现,在处理多分类时效果良好,对异常值不敏感。此外,它对于样本空间的默认分布实现文本分类的效果尤为突出。

2、缺点

在处理大规模数据时,计算距离会花费大量时间,而距离计算是 K 近邻算法最耗时的操作。此外,由于 K 近邻算法需要保存全部数据集,因此当数据集很大时,需要占用大量的存储空间。

四、K 近邻法的实现

1、数据准备

在使用 K 近邻法之前,需要先准备数据集。数据集通常包含多个特征和它们所对应的类别或标签。下面是一个简单的数据集示例(其中:X1 和 X2 是两个特征,Y 是类别):

X1	X2	Y
4.5	3.0	setosa
6.7	3.1	versicolor
5.3	2.3	virginica

2、计算距离

计算距离是 K 近邻算法的核心操作之一。常用的距离度量有欧式距离和曼哈顿距离。

以下是采用欧式距离计算样本点 A 与样本点 B 之间距离的示例代码:

import math
def euclidean_distance(point_A, point_B):
    distance = 0
    for i in range(len(point_A)):
        distance += pow((point_A[i] - point_B[i]), 2)
    return math.sqrt(distance)

3、K 近邻分类

在使用 K 近邻法进行分类时,需要计算测试样本点与数据集中所有样本点之间的距离。然后,根据距离排序选取离测试样本点最近的 K 个样本点。最后,根据这 K 个样本点的 class 进行投票,选出出现最多的 class。以下是 K 近邻分类算法的示例代码:

def knn_classification(X_train, y_train, X_test, k):
    distances = []
    for i in range(len(X_train)):
        dist = euclidean_distance(X_train[i], X_test)
        distances.append((dist, y_train[i]))

    distances.sort()
    neighbors = distances[:k]

    class_votes = {}

    for neighbor in neighbors:
        response = neighbor[1]
        if response in class_votes:
            class_votes[response] += 1
        else:
            class_votes[response] = 1

    sorted_votes = sorted(class_votes.items(), key=lambda x: x[1], reverse=True)

    return sorted_votes[0][0]

4、K 近邻回归

K 近邻回归与分类有所不同,它通过简单平均法来确定测试样本点的值。具体操作是:计算测试样本点与数据集中所有样本点之间的距离,并选取离测试样本点最近的 K 个样本点。然后,计算这 K 个样本点的平均值,作为测试样本点的预测值。以下是 K 近邻回归算法的示例代码:

def knn_regression(X_train, y_train, X_test, k):
    distances = []
    for i in range(len(X_train)):
        dist = euclidean_distance(X_train[i], X_test)
        distances.append((dist, y_train[i]))

    distances.sort()
    neighbors = distances[:k]

    avg = 0
    for neighbor in neighbors:
        avg += neighbor[1]

    return avg/k

五、总结

K 近邻法是一种基本的分类和回归算法,具有简单、直观、易于理解的特点。在处理大规模数据时,计算距离会花费大量时间,而距离计算是 K 近邻算法最耗时的操作。由于 K 近邻算法需要保存全部数据集,因此当数据集很大时,需要占用大量的存储空间。

原创文章,作者:TSNHF,如若转载,请注明出处:https://www.506064.com/n/334481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
TSNHFTSNHF
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相关推荐

  • 最近邻插值

    一、插值方法介绍 在计算机图形学中,图像放大实际上是一种插值方法,最近邻插值是其中最简单的一种,也是最容易理解的一种方法。该方法的思想是,根据已知的数据点,找到离待插值点最近的一个…

    编程 2025-01-20
  • K近邻(KNN)聚类分析

    一、KNN聚类算法 在机器学习领域,KNN(K-Nearest Neighbor,K最近邻)是一种常用的分类和回归算法。KNN算法通过测量不同特征值之间的距离进行分类。KNN聚类算…

    编程 2024-12-12
  • k近邻算法原理详解

    一、k近邻算法的原理及计算步骤 k近邻算法是一种用于分类和回归的机器学习算法,它的本质是找出与某个数据点最近的k个数据点,利用它们来确定该数据点的分类或回归值。 具体计算步骤如下:…

    编程 2024-12-07

发表回复

登录后才能评论