📜  Python中的k最近邻算法(1)

📅  最后修改于: 2023-12-03 14:46:38.060000             🧑  作者: Mango

Python中的k最近邻算法

介绍

k最近邻(k-nearest neighbors, KNN)算法是一种常用的分类和回归算法。它的基本思想是通过测量不同特征之间的距离,将新的数据分配给其最近邻的 k 个邻居中最常见的类别或者进行回归预测。

KNN算法是一种非参数化的机器学习算法,它不依赖于任何假设或者预先的模型。KNN算法可以用于分类问题,如判断一张图片中的数字是0-9中的哪个数字;也可以用于回归问题,如根据房屋的面积、卧室数量等特征预测房价。

KNN算法的核心思想是相似性度量和多数表决。相似性度量是通过计算不同特征之间的距离来判断数据点之间的相似程度。常用的距离度量方法包括欧氏距离、曼哈顿距离等。多数表决则是将待分类或回归的数据点的 k 个最近邻的标签或值进行统计,选择出现最多的标签或计算平均值作为预测结果。

实现

以下是使用Python实现KNN算法的代码示例:

from collections import Counter
from math import sqrt

def euclidean_distance(point1, point2):
    distance = 0.0
    for i in range(len(point1)):
        distance += (point1[i] - point2[i])**2
    return sqrt(distance)

def k_nearest_neighbors(X_train, y_train, X_test, k=3):
    distances = []
    for i in range(len(X_train)):
        dist = euclidean_distance(X_train[i], X_test)
        distances.append((dist, y_train[i]))
    distances.sort(key=lambda x: x[0])
    nearest_neighbors = distances[:k]
    labels = [neighbor[1] for neighbor in nearest_neighbors]
    return Counter(labels).most_common(1)[0][0]

上面代码中的 euclidean_distance 函数用于计算两个数据点之间的欧氏距离。k_nearest_neighbors 函数是KNN算法的主要实现,它接受训练集特征 X_train、训练集标签 y_train 和待预测的数据点 X_test,并返回预测的标签。

使用示例

下面是使用示例代码:

# 创建一个简单的训练集和测试集
X_train = [[1, 1], [2, 2], [3, 3], [4, 4]]
y_train = ['A', 'A', 'B', 'B']
X_test = [3.5, 3.5]

# 调用KNN算法进行预测
prediction = k_nearest_neighbors(X_train, y_train, X_test, k=3)

print(f"预测结果: {prediction}")

在上述示例中,训练集由4个数据点组成,每个数据点有两个特征。标签分别为'A'和'B'。我们使用KNN算法对一个新的数据点进行分类预测,K值为3。最终预测结果将打印出来。

总结

KNN算法是一种简单有效的机器学习算法,适用于各种分类和回归问题。通过测量数据点之间的距离,KNN算法能够根据邻居的标签或值对数据点进行预测。在Python中,我们可以轻松实现KNN算法,并将其应用于实际问题中。