gpt4 book ai didi

machine-learning - 使用随机训练/测试集进行分类的模型选择

转载 作者:行者123 更新时间:2023-11-30 09:05:58 24 4
gpt4 key购买 nike

我正在使用一个极其不平衡且异构的多类{K = 16}数据库进行研究,其中N ~= 250很小>。对于某些标签,数据库有足够数量的监督机器学习示例,但对于其他标签,我几乎没有。由于多种原因,我也无法扩展我的数据库。

作为第一种方法,我以分层方式将数据库分为训练集 (80%) 和测试集 (20%)。最重要的是,我应用了几种提供一些结果的分类算法。我在 500 个分层训练/测试集 ( as each stratified sampling takes individuals randomly within each stratum ) 上应用了此过程,希望选择一个性能可接受的算法(模型)。

由于我的数据库,根据训练集的具体示例,测试集上的性能差异很大。我正在处理(对于我的应用程序)准确率高达 82% 的运行和低至 ​​40% 的运行。所有运行的准确率中位数约为 67%。

面对这种情况,我不确定选择最佳性能模型时的标准程序(如果有的话)是什么。我的理由是,90%的模型可能具有更好的泛化能力,因为训练集中选择的具体示例更加丰富,从而可以更好地对测试集进行分类。但是,我完全意识到测试集可能由更容易分类的“更简单”案例组成,或者训练集由所有难以分类的案例组成。

考虑到训练/测试集中示例的分布导致结果差异很大,是否有任何标准程序来选择性能最佳模型?我在某个地方犯了概念错误吗?从业者通常会选择性能最佳的模型而不进行任何进一步探索吗?

我不喜欢使用平均值/中位数精度的想法,因为显然有些模型比其他模型概括得更好,但我绝不是该领域的专家。

最佳情况之一的测试集上预测标签的混淆矩阵:

Confusion Matrix of one of the runs

最坏情况之一的测试集上预测标签的混淆矩阵:

Confusion matrix of another run

它们都使用相同的算法和参数

最佳答案

良好的准确性=/=良好的模型

我想首先指出,测试集上的良好准确度不一定等于一般的良好模型! (就您的情况而言)这主要与您的样本分布极其倾斜有关。
特别是在进行分层分割并且有一个类别占主导地位时,只需一遍又一遍地预测这一类别,您可能会获得良好的结果。

查看是否发生这种情况的一个好方法是查看 confusion matrix (更好的图片here)您的预测。
如果某个类似乎也混淆了其他类,则表明模型不好。我认为,在你的情况下,通常很难找到一个好的模型,除非你在训练期间积极尝试更多地平衡你的类(class)。

利用 Ensembles 的力量

另一个想法确实是在多个模型上使用集成(在您的情况下是由不同的分割产生的),因为它被假设为 generalize better
即使您可能会在纸面上牺牲很多准确性,我敢打赌,集成的混淆矩阵可能看起来比单个“高精度”模型的混淆矩阵要好得多。特别是如果您忽略性能极差的模型(再次确保“差”性能来自实际的糟糕性能,而不仅仅是不幸的 split ),我可以看到一个非常好的概括。

尝试 k 重交叉验证

另一种常见技术是 k 折交叉验证。您实际上不是在单个 80/20 分割上执行评估,而是将数据划分为 k 个同样大的集合,然后始终在 k-1 组上进行训练,同时在另一组上进行评估。然后,您不仅可以感觉到您的分割是否合理(您通常会获得 k 折 CV 实现中不同分割的所有结果,例如 sklearn 中的结果),而且还可以获得一个总体得分 告诉你所有折叠的平均值。
请注意,5 倍 CV 等于分成 5 个 20% 的集合,所以本质上就是您现在正在做的事情,加上“洗牌部分”。
在类别不平衡的情况下,或者您通常希望确保模型实际上表现良好的情况下,CV 也是处理少量训练数据的好方法。

关于machine-learning - 使用随机训练/测试集进行分类的模型选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51929134/

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