如何用python编写knn算法?
knn(k-nearest neighbors,k近邻算法)是一种简单而常用的分类算法。它的思想是通过测量不同样本之间的距离,将测试样本分类到最近的k个邻居中。本文将介绍如何使用python编写并实现knn算法,并提供具体的代码示例。
首先,我们需要准备一些数据。假设我们有一组二维的数据集,每个样本都有两个特征。我们将数据集分为两个类别,并在二维平面上绘制出来。代码如下:
import numpy as npimport matplotlib.pyplot as plt# 生成随机数据np.random.seed(0)x1 = np.random.randn(100, 2) + np.array([0, 2])x2 = np.random.randn(100, 2) + np.array([2, 0])x = np.vstack((x1, x2))y = np.hstack((np.zeros(100), np.ones(100)))# 绘制数据集plt.scatter(x[:, 0], x[:, 1], c=y)plt.show()
接下来,我们需要编写knn算法的实现代码。首先,我们定义一个函数来计算两个样本之间的欧氏距离(euclidean distance)。代码如下:
def euclidean_distance(x1, x2): return np.sqrt(np.sum((x1 - x2)**2))
然后,我们编写一个函数来预测一个测试样本的类别。该函数首先计算测试样本与所有训练样本之间的距离,然后选择距离最近的k个样本,并根据这k个邻居的类别进行投票,最后返回得票最多的类别作为预测结果。代码如下:
def knn_predict(x_train, y_train, x_test, k): distances = [euclidean_distance(x_test, x) for x in x_train] k_indices = np.argsort(distances)[:k] k_nearest_labels = [y_train[i] for i in k_indices] return np.argmax(np.bincount(k_nearest_labels))
最后,我们将数据集划分为训练集和测试集,并使用knn算法进行预测。代码如下:
from sklearn.model_selection import train_test_split# 划分训练集和测试集x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)# 对每个测试样本进行预测predictions = [knn_predict(x_train, y_train, x_test, k=3) for x_test in x_test]# 计算准确率accuracy = np.mean(predictions == y_test)print("accuracy:", accuracy)
通过以上代码示例,我们完成了knn算法的编写。可以看到,使用python实现knn算法相对简单,而且代码量较少。在实际应用中,我们可以根据具体问题调整k值,以达到最佳的分类效果。
总结起来,本文介绍了如何使用python编写knn算法,包括数据准备、欧氏距离计算、算法实现和准确率计算等步骤。希望本文能对读者理解和应用knn算法有所帮助。
以上就是如何用python编写knn算法?的详细内容。