python可视化实现KNN算法

  • Post category:Python

Python可视化实现KNN算法攻略

本攻略将介绍如何使用Python可视化实现K最近邻算法。K最近邻算法是一种常用的机器学习算法,用于分类和回归问题。本攻略中,我们将介绍K最近邻算法的原理和实现方法,并提供两个示例来演示如何使用该算法进行分类和回归,并使用matplotlib库进行可视化。

K最近邻算法的原理

K最近邻算法是一种基于实例的学习算法,它通过计算样本之间的距离来进行分类或回归。K最近邻算法的步骤包括:

  1. 计算距离:计算测试样本与训练样本之间的距离。
  2. 选择K个最近邻:选择K个距离最近的训练样本。
  3. 进行分类或回归:对于分类问题,选择K个最近邻中出现最多的类别作为测试样本的类别;对于回归问题,选择K个最近邻的平均值作为测试样本的预测值。

Python实现K最近邻算法

以下是使用Python实现K最近邻算法的示例代码:

import numpy as np
from collections import Counter

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

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

    def predict(self, X):
        y_pred = []
        for x in X:
            distances = [np.sqrt(np.sum((x - x_train) ** 2)) for x_train in self.X_train]
            k_indices = np.argsort(distances)[:self.k]
            k_nearest_labels = [self.y_train[i] for i in k_indices]
            most_common = Counter(k_nearest_labels).most_common(1)
            y_pred.append(most_common[0][0])
        return y_pred

在这个示例中,我们首先定义了一个KNN类,它包含了K最近邻算法的初始化、拟合和预测。我们使用numpy库计算距离,并使用Counter库计算最近邻中出现最多的类别。然后我们使用fit方法拟合模型,并predict方法预测测试样本的类别。

示例说明

以下是分类问题的示例,演示如何使用K最近邻算法对鸢尾花数据集进行分类,并使用matplotlib库进行可视化:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from knn import KNN
import matplotlib.pyplot as plt

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)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)

plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()

在这个示例中,我们首先使用sklearn库加载鸢尾花数据集,并使用train_test_split函数将数据集分成训练集和测试集。然后我们使用KNN类拟合模型,并使用predict方法预测测试集的类别。最后,我们使用accuracy_score函数计算模型的准确率,并使用scatter函数将测试集的数据点可视化。

以下是回归问题的示例,演示如何使用K最近邻算法对波士顿房价数据集进行回归,并使用matplotlib库进行可视化:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from knn import KNN
import matplotlib.pyplot as plt

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

knn = KNN(k=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

mse = mean_squared_error(y_test, y_pred)
print('MSE:', mse)

plt.scatter(y_test, y_pred)
plt.xlabel('True values')
plt.ylabel('Predictions')
plt.show()

在这个示例中,我们首先使用sklearn库加载波士顿房价数据集,并使用train_test_split函数将数据集分成训练集和测试集。然后我们使用KNN类拟合模型,并使用predict方法预测测试集的房价。最后,我们使用mean_squared_error函数计算模型的均方误差,并使用scatter函数将测试集的真实值和预测值可视化。