kNN 算法分类器的实现,模仿例子构建训练数据集,以及与训练数据对应的分类来训练 kNN 分类器,并在窗口显示结果图像。代码
时间: 2024-10-29 13:11:36 浏览: 22
k-近邻 (k-Nearest Neighbors, kNN) 算法是一种基于实例的学习方法,它通过测量新样本与训练集中每个样本之间的距离(通常使用欧氏距离),并选择 k 个最近邻居来进行预测。以下是使用 Python 和 scikit-learn 库实现一个简单的 kNN 分类器的例子:
首先,我们需要导入必要的库:
```python
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
```
接着,我们生成一个示例的训练数据集和对应标签:
```python
# 生成二元分类数据集
X, y = make_classification(n_samples=500, n_features=2, n_classes=2, random_state=42)
```
将数据集分为训练集和测试集:
```python
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
```
创建 kNN 分类器,并指定 k 的值(这里设置为 3):
```python
knn = KNeighborsClassifier(n_neighbors=3)
```
训练模型:
```python
knn.fit(X_train, y_train)
```
现在我们可以用测试集进行预测并计算准确率:
```python
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
```
最后,为了可视化效果,我们可以画出决策边界(对于二维数据)。这需要借助于 matplotlib,但由于 kNN 没有内置的可视化决策边界的函数,我们可以简单地随机选取一些点来表示:
```python
# 可视化示例,假设我们有一个二维数据集
if len(X.shape) == 2 and X.shape[1] == 2:
# 随机选取一些测试点
plot_points = X_test[np.random.choice(range(len(X_test)), size=50, replace=False)]
# 绘制实际分类
plt.scatter(plot_points[:, 0], plot_points[:, 1], c=y_test[plot_points[:, 0]])
# 绘制预测分类
plt.scatter(plot_points[:, 0], plot_points[:, 1], c=y_pred[plot_points[:, 0]], marker='x', alpha=0.8)
plt.show()
```
这就是一个基本的 kNN 分类器的实现过程。注意实际应用中可能还需要处理更高维度的数据,以及优化超参数 `n_neighbors`。
阅读全文