Python实现KNN(K-近邻)算法的示例代码

  • Post category:Python

下面是详细讲解“Python实现KNN(K-近邻)算法的示例代码”的完整攻略,包括算法原理、Python实现和两个示例。

算法原理

KNN(K-近邻)算法是一种基于实例的学习算法,其主要思想是通过计算样本之间的距离,找到与目标样本最近的K个样本,然后根据这K个样本的类别,来预测目标样本的类别。

KNN算法的实过程如下:

  1. 计算目标样本与每个样本之间的距离。
  2. 选取与目标样本距离最近的K个样本。
  3. 根据这K个样本的类别,来预测目标样本的类别。

KNN算法的核心在于如计算样本之间的距离,常见的距离计算方法包括欧氏距离、曼哈顿距离和余弦距离等。

Python实现

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

import numpy as np
from collections import Counter

class KNN:
    def __init__(self, k=3, distance='euclidean'):
        self.k = k
        self.distance = distance

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

    def predict(self, X):
        y_pred = []
        for x in X:
            distances = []
            for x_train in self.X_train:
                if self.distance == 'euclidean':
                    dist = np.sqrt(np.sum((x - x_train) ** 2))
                elif self.distance == 'manhattan':
                    dist = np.sum(np.abs(x - x_train))
                elif self.distance == 'cosine':
                    dist = np.dot(x, x_train) / (np.linalg.norm(x) * np.linalg.norm(x_train))
                distances.append(dist)
            k_nearest = np.argsort(distances)[:self.k]
            k_nearest_labels = [self.y_train[i] for i in k_nearest]
            most_common = Counter(k_nearest_labels).most_common(1)
            y_pred.append(most_common[0][0])
        return y_pred

上述代码中,使用Python实现了KNN算法。首先定义了一个KNN类,表示KNN算法,包括K值和距离计算方法。在KNN类中,定义了拟合函数fit和预测函数predict。然后使用K算法进行分类,返回预测结果。

示例说明

以下两个示例,说明如何使用上述代码进行KNN算法。

示例1

使用KNN算法鸢尾花数据集进行分类。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

knn = KNN(k=3, distance='euclidean')
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(accuracy_score(y_test, y_pred))

运行上述代码,输出结果如下:

1.0

上述代码,使用KNN算法对鸢尾花数据集进行分类。首先使用train_test_split函数将数据集分为训练集和测试集,然后使用KNN算法进行分类,最后使用accuracy_score函数计算分类准确率。运行结果为分类准确率。

示例2

使用KNN算法对手写数字数据集进行分类。

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2, random_state=42)

knn = KNN(k=3, distance='euclidean')
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(accuracy_score(y_test, y_pred))

运行上述代码,输出结果如下:

0.9861111111112

上述代码中,使用KNN算法对手写数字数据集进行分类。首先使用train_test_split函数将数据集分为训练集和测试集,然后使用KNN算法进行分类,最后使用accuracy_score函数计算分类准确率。运行结果为分类准确率。

结语

本文介绍了如何Python实现KNN算法,包括算法原理、Python实现和两个示例说明。KNN算法是一种常用的分类算法,其主要思想是通过计算样本之间的距离,找到与目标样本最近的K个样本,然后根据这K个样本的类别,预测目标样本的类别。在实现中,需要注意选择合适的K值和距离计算方法,并根据具体情况进行整。