gpt4 book ai didi

python - KNN 模型的准确度分数(IRIS 数据)

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:38 25 4
gpt4 key购买 nike

增加或稳定这个基本 KNN 模型在 IRIS 数据上的准确度得分(不要显着变化)的一些关键因素是什么?

尝试

from sklearn import neighbors, datasets, preprocessing
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix

iris = datasets.load_iris()
X, y = iris.data[:, :], iris.target

Xtrain, Xtest, y_train, y_test = train_test_split(X, y)
scaler = preprocessing.StandardScaler().fit(Xtrain)
Xtrain = scaler.transform(Xtrain)
Xtest = scaler.transform(Xtest)

knn = neighbors.KNeighborsClassifier(n_neighbors=4)
knn.fit(Xtrain, y_train)
y_pred = knn.predict(Xtest)

print(accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))
print(confusion_matrix(y_test, y_pred))

样本准确度分数

0.9736842105263158
0.9473684210526315
1.0
0.9210526315789473

分类报告

              precision    recall  f1-score   support

0 1.00 1.00 1.00 12
1 0.79 1.00 0.88 11
2 1.00 0.80 0.89 15

accuracy 0.92 38
macro avg 0.93 0.93 0.92 38
weighted avg 0.94 0.92 0.92 38

样本混淆矩阵

[[12  0  0]
[ 0 11 0]
[ 0 3 12]]

最佳答案

我建议调整 k-NN 的 k 值。由于 iris 是一个小型数据集并且非常平衡,我将执行以下操作:

For every value of `k` in range [2 to 10] (say)  Perform a n-times k-folds crossvalidation (say n=20 and k=4)    Store the Accuracy values (or any other metric)

根据平均值和方差绘制分数,并选择具有最佳 k 值的 k 值。交叉验证的主要目标是估计测试误差,并在此基础上选择最终模型。会有一些差异,但应该小于 0.03 或类似值。这取决于数据集和您采用的折叠数。一个好的过程是,为 k 的每个值制作所有 20x4 精度值的箱线图。选择下分位数与上分位数相交的 k 值,或者简单地说,在精度(或其他度量值)没有太大变化的情况下。

一旦您基于此选择了k 的值,目标就是使用该值来构建使用整个训练数据集的最终模型。接下来,这可用于预测新数据。

另一方面,对于更大的数据集。制作一个单独的测试分区(就像您在此处所做的那样),然后仅在训练集上调整 k 值(使用交叉验证,忘记测试集)。选择合适的k训练算法后,只使用训练集进行训练。接下来,使用测试集报告最终值。永远不要根据测试集做出任何决定。

还有一种方法是训练、验证、测试划分。使用训练集进行训练,使用不同的 k 值训练模型,然后使用验证分区进行预测并列出分数。根据此验证分区选择最佳分数。接下来使用训练集或训练+验证集使用基于验证集选择的k值训练最终模型。最后,取出测试集并报告最终得分。同样,切勿在其他任何地方使用测试集。

这些是适用于任何机器学习或统计学习方法的通用方法。

执行分区(训练、测试或交叉验证)时需要注意的重要事项,请使用 stratified sampling这样在每个分区中,类别比率保持不变。

阅读更多关于 crossvalidation 的信息.在 scikitlearn 中,这很容易做到。如果使用 R,您可以使用 caret .

要记住的主要一点是,目标是训练一个在新数据上泛化或在新数据上表现良好的函数,而不是在现有数据上表现良好。

关于python - KNN 模型的准确度分数(IRIS 数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56895458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com