📜  K最近邻居的Python实现(1)

📅  最后修改于: 2023-12-03 15:17:11.248000             🧑  作者: Mango

K最近邻居的Python实现

K最近邻居(K-Nearest Neighbors,简称KNN)是一种基本的分类与回归算法,它是通过在所有数据中寻找与新数据最相似的K个数据(最近邻居),然后将新数据归为相同类别或回归预测的方法。KNN的思想简单,易于理解和实现,而且对于许多实际问题,KNN的性能往往可以与更复杂的算法相媲美。

算法流程
  1. 根据给定的距离度量,计算测试数据与各个训练数据之间的距离;

  2. 对于距离值进行排序;

  3. 选取距离最小的K个点;

  4. 确定K个点中,出现次数最多的类别;

  5. 当K=1时,算法称为最近邻算法。

代码实现
导入模块
import numpy as np
from collections import Counter
构建数据集
X_train = np.array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
y_train = ['A', 'A', 'B', 'B']
定义距离度量

使用欧氏距离来计算样本间的距离

def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2)**2))
KNN分类器
class KNN:
    def __init__(self, k=3):
        self.k = k

    def predict(self, X_test, X_train, y_train):
        y_pred = []
        for x_test in X_test:
            # 计算测试数据与所有训练数据之间的距离
            distances = [euclidean_distance(x_test, x_train) for x_train in X_train]
            # 对所有距离值进行排序
            nearest_indices = np.argsort(distances)[:self.k]
            # 选取距离最小的k个点
            k_nearest_labels = [y_train[i] for i in nearest_indices]
            # 确定k个点中,出现次数最多的类别
            most_common = Counter(k_nearest_labels).most_common(1)
            y_pred.append(most_common[0][0])
        return y_pred
测试

用构建的数据集进行预测

X_test = np.array([[1.1, 1.4], [0.1, 0.5], [1.2, 1.9], [0.3, 0.1]])
knn = KNN(k=3)
predictions = knn.predict(X_test, X_train, y_train)
print(predictions)

输出:

['A', 'B', 'A', 'B']

以上就是K最近邻居的Python实现,希望能帮助到你。