- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
增加或稳定这个基本 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/
直接从 Python 代码运行 pylint 时,我似乎无法获得任何返回值。从命令行运行它会生成一个漂亮的报告,在底部有一个总结分数。 我已经尝试将“Run”的返回值放入一个变量中,并获取它的“rep
我是 Python 新手,正在尝试学习单词检测。我有一个带有单词的数据框 sharina['transcript'] Out[25]: 0 thank you for calling my
http://jsfiddle.net/q8P7Y/ 我在最后显示最终分数时遇到问题,有很多方法可以做到这一点,但我不确定什么是最好的。 正如你所看到的,下一个按钮只是 div 的显示/隐藏,而不是页
我使用滑动 slider 并有计数器分数。它计数很好,但我需要计数 =(所有幻灯片 - 1)。例如,如果我有 20 张幻灯片,我想显示总数 19。有什么办法可以做到这一点吗?我使用他们网站上的常规 j
我使用滑动 slider 并有计数器分数。它计数很好,但我需要计数 =(所有幻灯片 - 1)。例如,如果我有 20 张幻灯片,我想显示总数 19。有什么办法可以做到这一点吗?我使用他们网站上的常规 j
我试图在按下按钮时添加分数,分数显示在 JTextField 中,但是当按下按钮时,分数会添加,它显示为 0。我有一个存储分数的整数字段 private int score=0; yesButton
我可以在选项(单选按钮)随机播放之前计算分数/分数,如下面的代码所示。在Collection.shuffle()之前,选项是固定的,因为 CorrectChoice将始终分配给c2单选按钮。那么我可以
我在这里的代码只能得到87%的代码,因为“带有非正参数的加法参数什么也没做。我该如何解决呢?我尝试了更多的方法,但是我什至无法解决此错误在同学的帮助下 说明是: 对于此分配,您将创建一个存储分数的类。
昨天,我尝试以一种方式执行此操作...今天我尝试另一种方式,但仍然卡住了。我必须找到一种使用整数除法和取模来做到这一点的方法。这是我的代码,后面是错误消息。 public int evaluateFr
我这里有一些特殊字符: http://209.141.56.244/test/char.php 但是当我在这里通过 ajax 抓取这个文件时,它们显示为 back ?标记: http://209.14
我得到了一张图表 G与 n顶点,标记自 1至 n (2 a_1 -> a_2 -> ... a_k -> n A然后将占据 1 的所有“子节点”节点, a_1 , ... a_x (其中 x = ce
我有一个看起来像这样的 mongodb 集合: db.scores.insert({"name": "Bob", value: 96.3, timeStamp:'2010-9-27 9:32:00'}
我试图更好地了解 lucene 如何对我的搜索进行评分,以便我可以对我的搜索配置或文档内容进行必要的调整。 以下是分数明细的一部分。 产品: 0.34472802 = queryWeight,
在我网站上用户生成的帖子下,我有一个类似亚马逊的评级系统: Was this review helpful to you: Yes | No 如果有投票,我会在该行上方显示结果,如下所示:
对于我的项目,我需要找出哪些搜索结果被视为“良好”匹配。目前,分数因查询而异,因此需要以某种方式对它们进行标准化。标准化分数将允许选择高于给定阈值的结果。 我为 Lucene 找到了几个解决方案: h
我有一个由 57 个变量组成的数据文件。由于测量水平不均匀,我想将其中的大约 12 个转换为 z 分数。我查找了互联网资源和帮助文件。一个互联网资源建议我需要 Rbasic 包(不存在)。我使用了 s
我对 SOLR 核心运行查询并使用过滤器限制结果例如 fq: {!frange l=0.7 }query($q)。我知道 SOLR 分数不有绝对意义,但是0.7(只是一个例子)是计算出来的基于用户输入
我想找到不同的方法来解决我遇到的现实生活问题:想象一下进行一场比赛或一场游戏,在此期间用户收集积分。您必须构建一个查询来显示具有最佳“n”分数的用户列表。 我举一个例子来澄清。假设这是用户表,其中包含
我有很多 wiki 页面,我想训练一个分类器,看看是否可以通过一些特征(包括段落的位置和段落的 lucene 分数)来确定重点搜索的位置。我尝试将每个段落视为一个文档,这使我能够获得每个段落的 luc
我是 R 编程新手,在使用一些基本代码时遇到问题。 我有一个包含以下列的数据框:条件(因子)、用户(因子)和灵敏度(int)。对于每个用户有 20 个敏感项。我需要为每个用户创建一个具有标准化敏感度分
我是一名优秀的程序员,十分优秀!