基于最近邻数据进行分类
完整代码:
import torch
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
# 生成一个简单的数据集 (2个特征和2个分类)
# X为输入特征,y为标签
X = np.array([[1, 2], [2, 3], [3, 4], [5, 7], [6, 8], [7, 9], [8, 10], [3, 6], [4, 5], [6, 4]])
y = np.array([0, 0, 0, 1, 1, 1, 1, 0, 0, 1])
# 数据转换为 PyTorch 张量
X_tensor = torch.tensor(X, dtype=torch.float32)
y_tensor = torch.tensor(y, dtype=torch.long)
# 打印数据
print("Features:")
print(X_tensor)
print("Labels:")
print(y_tensor)
# 使用 sklearn KNN 分类器,调整邻居数量为 5
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X, y)
# 预测
y_pred = knn.predict(X)
# 计算准确率
accuracy = accuracy_score(y, y_pred)
print(f"Accuracy: {accuracy * 100:.2f}%")
# 可视化数据
plt.figure(figsize=(6, 4))
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='bwr', marker='o', edgecolor='k', s=100)
plt.title("KNN Classification Example")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()
# 测试:给定新的输入数据进行预测
test_data = np.array([[5, 6], [2, 3]])
test_prediction = knn.predict(test_data)
print(f"Predictions for test data {test_data} are {test_prediction}")
- 生成数据:创建了一个具有 2 个特征和 2 个类别标签的数据集。
X
是输入特征,y
是标签。 - 转换为 PyTorch 张量:虽然这里我们不需要在 KNN 算法中使用 PyTorch,但我们将数据转换为 PyTorch 张量,显示如何与 PyTorch 数据结构进行交互。
- KNN 分类器:使用
sklearn.neighbors.KNeighborsClassifier
创建并训练 KNN 模型。我们将n_neighbors
设置为 5,即选择 5 个最近邻。 - 预测与准确率:使用训练好的模型对所有数据进行预测,并计算准确率。
- 可视化:使用
matplotlib
将数据点可视化,数据点的颜色根据标签进行区分。 - 测试预测:我们对新的测试数据点
[5, 6]
和[2, 3]
进行预测。 - 结果:
-
Features: tensor([[ 1., 2.], [ 2., 3.], [ 3., 4.], [ 5., 7.], [ 6., 8.], [ 7., 9.], [ 8., 10.], [ 3., 6.], [ 4., 5.], [ 6., 4.]]) Labels: tensor([0, 0, 0, 1, 1, 1, 1, 0, 0, 1]) Accuracy: 90.00% Predictions for test data [[5 6] [2 3]] are [1 0]