欢迎访问宙启技术站
智能推送

实践Python:使用python实现K近邻算法进行分类

发布时间:2023-12-04 09:07:05

K近邻算法是一种简单而又有效的分类算法,它基于样本之间的距离进行分类。在这篇文章中,我将介绍如何使用Python实现K近邻算法,并使用一个例子进行分类。

首先,我们需要导入一些必要的库,包括numpy和collections。

import numpy as np
from collections import Counter

接下来,我们需要定义一个KNNClassifier类,该类将实现K近邻算法。在初始化函数中,我们需要指定K的值,以及定义一个空的训练集列表。

class KNNClassifier:
    def __init__(self, k):
        self.k = k
        self.X_train = []

接下来,我们需要定义一个fit函数,该函数将用于训练算法。在这个函数中,我们将传入训练数据集(X_train)和它们对应的标签(y_train),并将它们保存在我们之前定义的X_train列表中。

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

接下来,我们需要定义一个predict函数,该函数将用于对测试数据进行分类。在这个函数中,我们将传入测试数据集(X_test),并使用K近邻算法对其进行分类。

首先,我们需要计算测试数据集中每个样本与训练数据集中所有样本的距离。可以使用欧氏距离或曼哈顿距离等计算距离的方法。

    def predict(self, X_test):
        predictions = []
        for x_test in X_test:
            distances = [np.linalg.norm(x_test - x_train) for x_train in self.X_train]

然后,我们选择距离最小的K个训练样本,这些样本将成为少数票决的候选样本。

            k_nearest_indices = np.argsort(distances)[:self.k]
            k_nearest_labels = [self.y_train[i] for i in k_nearest_indices]

接下来,我们使用Counter函数求出候选样本中最常见的标签,这个标签将作为测试样本的预测结果。

            most_common = Counter(k_nearest_labels).most_common(1)
            prediction = most_common[0][0]
            predictions.append(prediction)

最后,我们返回所有测试样本的预测结果。

        return predictions

现在,我们已经完成了KNNClassifier类的实现。现在我们可以使用一个例子来测试我们的算法。

首先,我们需要生成一些训练数据和测试数据。在这个例子中,我们生成了100个二维样本,每个样本都有一个标签(0或1)。

np.random.seed(0)
X_train = np.random.rand(100, 2)
y_train = np.random.randint(0, 2, 100)
X_test = np.random.rand(10, 2)

接下来,我们创建一个KNNClassifier对象,并使用fit函数进行训练。

knn = KNNClassifier(k=3)
knn.fit(X_train, y_train)

最后,我们使用predict函数对测试数据进行分类,并打印出分类结果。

predictions = knn.predict(X_test)
print(predictions)

这篇文章介绍了如何使用Python实现K近邻算法进行分类,包括定义KNNClassifier类,实现fit函数、predict函数以及一个示例用法。希望这篇文章对你理解和实践K近邻算法有所帮助。