ZBLOG

任务1: 为MNIST数据集构建一个KNN分类器,找到最好的K值,查看其在测试集上的准确率. 绘制混淆矩阵。

好的,我们来构建一个KNN分类器并评估其在MNIST数据集上的性能。

首先,我们需要导入必要的库和数据集:

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.metrics import accuracy_score, confusion_matrix

# 加载MNIST数据集
mnist = fetch_openml('mnist_784', version=1)
X = mnist.data.astype('float32')
y = mnist.target.astype('int')

# 将像素值缩放到0-1之间
X /= 255.0

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

接下来,我们可以定义一个函数来实现KNN分类器:

def knn_classifier(X_train, y_train, X_test, k):
    distances = []
    
    # 计算测试样本与每个训练样本之间的欧氏距离
    for i in range(len(X_test)):
        dists = np.sqrt(np.sum((X_train - X_test[i])**2, axis=1))
        distances.append(dists)

    # 将距离排序,并获取k个最近邻样本的索引
    indices = np.argsort(distances)[:, :k]
    
    # 获取k个最近邻对应的标签
    knn_labels = y_train[indices]
    
    # 统计每个测试样本最常见的标签作为预测结果
    y_pred = np.array([np.argmax(np.bincount(labels)) for labels in knn_labels])
    
    return y_pred

接下来,我们可以使用不同的K值进行训练和测试,并找到在测试集上准确率最高的K值:

k_values = [1, 3, 5, 7, 9]  # 不同的K值

accuracy_scores = []

for k in k_values:
    # 使用KNN分类器进行预测
    y_pred = knn_classifier(X_train, y_train, X_test, k)
    
    # 计算准确率
    accuracy = accuracy_score(y_test, y_pred)
    accuracy_scores.append(accuracy)

# 找到准确率最高的K值
best_k = k_values[np.argmax(accuracy_scores)]

print("最好的K值:", best_k)

最后,我们可以绘制混淆矩阵来评估模型在测试集上的性能:

# 使用最佳K值进行预测
y_pred_best = knn_classifier(X_train, y_train, X_test, best_k)

# 绘制混淆矩阵
confusion_mat = confusion_matrix(y_test, y_pred_best)

plt.imshow(confusion_mat, cmap='Blues')
plt.colorbar()
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.title('Confusion Matrix')
plt.show()

希望以上代码能够满足你的需求。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=14008

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?