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

  • Post category:Python

下面是详细讲解“Python实现K-近邻算法的示例代码”的完整攻略,包含两个示例说明。

K-近邻法

K-近邻算法是一种常用的分类算法,其基本思想是将新的数据点与已知数据点进行比较,找到最相似的K个数据点,并将新的数据点归类为这K个数据点中出现最多的类别。K-近邻算法的K值和距离度量方式是算法的两重要参数。

Python实现K-近邻算法

要实现K-近邻算法,可以使用Python中的NumPy和Scikit-learn库。以下是算法的基本步骤:

  1. 使用NumPy库读取数据,并将其转换为矩阵式。

  2. 使用Scikit-learn库的train_test_split函数将数据集分为训练集和测试集。

  3. 使用Scikit-learn库的KNeighborsClassifier类创建K-近邻分类器,并设置K值和距离度量方式。

  4. 使用K-近邻分类器的fit方法将训练集拟合到模型中。

  5. 使用K-近邻分类器的predict方法对测试集进行预测,并计算测准确率。

以下是一个示例代码,用于K-近邻算法:

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 读取数据
data = np.loadtxt('data.txt')

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data[:, :-1], data[:, -1], test_size=0.2, random_state=42)

# 创建K-近邻分类器
knn = KNeighborsClassifier(n_neighbors=3, metric='euclidean')

# 拟合训练集
knn.fit(X_train, y_train)

# 预测测试集
y_pred = knn.predict(X_test)

# 计算准确率
accuracy = np.mean(y_pred == y_test)
print('Accuracy:', accuracy)

这个代码使用NumPy库读取数据,并将其转换为矩阵形式。然后,我们使用Scikit-learn库的train_test_split函数将数据集分为训练集和测试集。接下来,我们使用KNeighborsClassifier类创建K-近邻分类器,并设置K值为3和距离度量方式为欧几里得距离。然后,我们使用K-近邻分类器的fit方法将训练集拟合到模型中,并使用predict方法对测试集进行预测最后,我们计算预测准确率。

示例1:使用K-近邻算法分类鸢尾花数据集

让我们使用K-近邻算法分类鸢尾花数据集。我们将以下代码:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 加载鸢尾花数据集
iris = load_iris()

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris, test_size=0.2, random_state=42)

# 创建K-近邻分类器
knn = KNeighborsClassifier(n_neighbors=3, metric='euclidean')

# 拟合训练集
knn.fit(X_train, y_train)

# 预测测试集
y_pred = knn.predict(X_test)

# 计算准确率
accuracy = np.mean(y_pred == y_test)
print('Accuracy:', accuracy)

这个代码使用Scikit-learn库的load_iris函数加载鸢尾数据集。然后,我们使用train_test_split函数将数据集分为训练集和测试集。接下来,我们使用KNeighborsClassifier类创建K-近邻分类器,并设置K值为3和距离度量方式为欧几里得距离。然后,我们使用K-近邻分类器的fit方法将训练集拟合到模型中,并使用predict方法对测试集进行预测。最后,我们计算预测准确率。

输出结果为:

Accuracy: 1.0

这个结果表示,使用K-近邻算法对鸢尾花数据集进行分类的准确率为100%。

示例2:使用K-近邻算法分类手写数字数据集

让我们使用K-近邻算法分类手写数字数据集。我们将以下代码:

import numpy as np
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 加载手写数字数据集
digits = load_digits()

# 将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split.data, digits.target, test_size=0.2, random_state=42)

# 创建K-近邻分类器
knn = KNeighborsClassifier(n_neighbors=3, metric='euclidean')

# 拟合训练集
knn.fit(X_train, y_train)

# 预测测试集
_pred = knn.predict(X_test)

# 计算准确率
accuracy = np.mean(y_pred == y_test)
print('Accuracy:', accuracy)

这个代码使用Scikit-learn库的load_digits函数加载手写数字数据集。然后,我们使用train_test_split函数将数据集分为训练集和测试集。接下来,我们使用KNeighborsClassifier类创建K-近邻分类器,并设置K值为3和距离度量方式为欧几里得距离。然后,我们使用K-近邻分类器的fit方法将训练集拟合到模型中,并使用predict方法对测试集进行预测。最后,我们计算预测准确率。

输出结果为:

Accuracy: 0.9888888888888889

这个结果表示,使用K-近邻算法对手写数字数据集进行分类的准确率为98.89%。

希这些示例说明帮助你理解如何使用Python实现K-近邻算法。