ZBLOG

# 使用mnist_reader解析并载入数据 import mnist_reader # 从当前目录下读取MINST训练/测试数据.(程序会自动寻找train-images-idx3-ubyte.gz等文件) X_train, y_train = mnist_reader.load_mnist(".") X_test, y_test = mnist_reader.load_mnist(".", kind="t10k") X_train.shape 为MNIST数据集构建一个KNN分类器...

根据给出的代码和问题,我们可以使用MNIST数据集构建KNN分类器,并找到最佳的K值。然后,我们可以计算KNN在测试集上的准确率,并绘制混淆矩阵。

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

import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt

接下来,我们需要加载MNIST数据集:

import mnist_reader

X_train, y_train = mnist_reader.load_mnist(".")
X_test, y_test = mnist_reader.load_mnist(".", kind="t10k")

然后,我们可以定义一个函数来计算并返回KNN在给定K值下的准确率和混淆矩阵:

def knn_accuracy(k):
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(X_train, y_train)
    y_pred = knn.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    confusion_mat = confusion_matrix(y_test, y_pred)
    return accuracy, confusion_mat

接下来,我们可以尝试不同的K值,并选择具有最高准确率的K值:

k_values = [1, 3, 5, 7] # 可以根据实际情况进行调整

best_accuracy = 0.0
best_k = None

for k in k_values:
    accuracy, _ = knn_accuracy(k)
    
    if accuracy > best_accuracy:
        best_accuracy = accuracy
        best_k = k

print("Best K value:", best_k)

然后,我们可以使用找到的最佳K值来计算准确率和混淆矩阵:

best_accuracy, confusion_mat = knn_accuracy(best_k)
print("Accuracy with best K:", best_accuracy)
print("Confusion Matrix:\n", confusion_mat)

# 绘制混淆矩阵
plt.imshow(confusion_mat, cmap='Blues')
plt.colorbar()
plt.xlabel('Predicted Label')
plt.ylabel('True Label')
plt.show()

关于weights参数,当设置为’distance’时,KNN会根据样本之间的距离赋予不同权重。这意味着更近的邻居对分类的贡献更大。这种方式在处理非线性可分问题时可能效果更好,因为它能够更好地捕捉样本之间的细微差异。然而,在一些简单线性可分问题中,使用标准的KNN(即将weights参数设置为’uniform’)可能表现得更好。

希望这个代码示例能够帮助你构建一个基于MNIST数据集的KNN分类器,并理解distance权重与标准KNN之间的区别。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?