机器学习算法实验3 - K近邻算法(KNN)

K近邻算法(K-Nearest Neighbors Algorithm)是一种常用的机器学习算法,用于分类和回归问题。它的基本思想是通过寻找最近邻的样本来确定新样本的类别,即找到离目标样本最近的K个训练样本,根据这K个样本的类别进行投票或求平均得到新样本的类别。

K近邻算法的原理

K近邻算法的原理非常简单。首先,我们需要有一组已知类别的训练样本,每个样本都有一组特征值和一个类别标签。当我们得到一个新的样本时,我们需要度量该样本与训练样本中所有样本之间的距离,常用的距离度量方法有欧氏距离、曼哈顿距离等。然后,我们选取离新样本最近的K个邻居样本,根据这K个样本的类别进行投票或求平均,得到新样本的类别。

K近邻算法的实现

下面我们通过一个简单的示例来演示K近邻算法的实现过程。假设我们有一个带有两个特征的数据集,每个样本都属于两个类别之一。我们的任务是根据已有的样本,对新样本进行分类。

首先,我们需要导入所需的库和模块:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

然后,我们生成一个随机的二维数据集,并将其可视化:

X, y = make_blobs(n_samples=200, centers=2, random_state=0, cluster_std=1.0)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='coolwarm')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

接下来,我们将数据集分为训练集和测试集:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

然后,我们创建一个K近邻分类器,并将训练集传递给它进行训练:

knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)

最后,我们使用测试集对分类器进行评估,并可视化分类结果:

accuracy = knn.score(X_test, y_test)
print("Accuracy:", accuracy)

h = 0.02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.8, cmap='coolwarm')
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap='coolwarm', marker='x')
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

运行上述代码,我们可以得到分类器的准确率,并通过可视化结果看到分类边界。

总结

K近邻算法是一种简单且易于理解的机器学习算法,它的原理非常直观。通过寻找最近的K个邻居样本,我们可以对新样本进行分类或回归。在实际应用中,我们需要选择合适的K值和距离度量方法,以及进行数据预处理和模型评估等步骤来提高算法的性能。

希望本文能够帮助你了解和使用K近邻算法,并在实际问题中取得好的效果。如果你对该算法感兴趣,可以进一步学习和探索