能否提供一个详细的Python代码示例,演示如何使用KNN算法实现手写数字识别,包含数据准备,knn模型训练,模型评估,与可视化结果
时间: 2024-11-09 15:20:33 浏览: 23
使用OpenCV与KNN算法实现手写数字识别(包含详细的完整的程序和数据)
当然可以。为了演示如何使用KNN(K-Nearest Neighbors)算法实现手写数字识别,我们将使用经典的MNIST数据集。首先,我们需要安装必要的库,如`numpy`, `matplotlib`, 和 `scikit-learn`。这里是一个完整的例子:
```python
# 导入所需库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
# 加载MNIST数据集
mnist = fetch_openml('mnist_784')
X, y = mnist['data'], mnist['target']
# 数据预处理
X = X / 255.0 # 归一化像素值到0-1之间
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 创建KNN分类器
knn = KNeighborsClassifier(n_neighbors=5) # 我们选择5作为k值
# 训练模型
knn.fit(X_train_scaled, y_train)
# 预测测试集
y_pred = knn.predict(X_test_scaled)
# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
conf_mat = confusion_matrix(y_test, y_pred)
print(f"Accuracy: {accuracy*100:.2f}%")
print("Confusion Matrix:")
print(conf_mat)
# 可视化混淆矩阵
plt.imshow(conf_mat, cmap='Blues', interpolation='nearest')
plt.colorbar(shrink=0.8)
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.title('Confusion Matrix')
plt.show()
# 相关问题--
1. 如何调整K值对模型性能的影响?
2. 这个例子中为什么要归一化数据?
3. MNIST数据集还有哪些常用的机器学习方法进行图像识别?>>
阅读全文