ZBLOG

import numpy as np import matplotlib.pyplot as plt from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay # 从mnist_reader中读取MNIST数据集 X_train, y_train = mnist_reader.load_mnist(".") ...

KNN算法的参数weights可以设置为两个值:'uniform''distance'

  • weights='uniform'时,KNN算法对每个最近邻样本赋予相同的权重,即不考虑距离远近。
  • weights='distance'时,KNN算法将最近邻样本的权重与其距离成反比关系,距离越近的样本权重越高。

要比较使用不同weights参数值对分类准确率和混淆矩阵的影响,您可以修改代码如下:

# 构建并训练使用 'uniform' 权重的 KNN 分类器
knn_uniform = KNeighborsClassifier(n_neighbors=best_k, weights='uniform')
knn_uniform.fit(X_train, y_train)
y_pred_uniform = knn_uniform.predict(X_test)

# 计算并绘制 'uniform' 权重下的混淆矩阵
cm_uniform = confusion_matrix(y_test, y_pred_uniform)
cmd_uniform = ConfusionMatrixDisplay(confusion_matrix=cm_uniform)
cmd_uniform.plot()

# 输出 'uniform' 权重下的准确率
accuracy_uniform = np.sum(y_pred_uniform == y_test) / len(y_test)
print("Accuracy with uniform weights:", accuracy_uniform)


# 构建并训练使用 'distance' 权重的 KNN 分类器
knn_distance = KNeighborsClassifier(n_neighbors=best_k, weights='distance')
knn_distance.fit(X_train, y_train)
y_pred_distance = knn_distance.predict(X_test)

# 计算并绘制 'distance' 权重下的混淆矩阵
cm_distance = confusion_matrix(y_test, y_pred_distance)
cmd_distance = ConfusionMatrixDisplay(confusion_matrix=cm_distance)
cmd_distance.plot()

# 输出 'distance' 权重下的准确率
accuracy_distance = np.sum(y_pred_distance == y_test) / len(y_test)
print("Accuracy with distance weights:", accuracy_distance)

运行以上修改后的代码将会得到使用不同权重参数('uniform''distance')所得到的准确率以及相应的混淆矩阵。您可以比较这两种权重设置下的分类准确率,观察它们在不同数据场景下的表现。

当样本之间的距离对于分类任务非常重要时,使用weights='distance'可能会提高分类准确率。例如,在某些情况下,更近邻居提供的信息可能对预测结果有更大影响,而较远邻居提供的信息则相对较小。因此,在一些具有不均衡特征分布或具有明显类别界限的数据集上,使用weights='distance'可能优于标准KNN(即使用 weights='uniform')。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?