Scikit Learn 中具有小正样本集的机器学习实验设计

Posted

技术标签:

【中文标题】Scikit Learn 中具有小正样本集的机器学习实验设计【英文标题】:Machine Learning Experiment Design with Small Positive Sample Set in Sci-kit Learn 【发布时间】:2016-05-22 13:55:36 【问题描述】:

我对有关如何训练具有非常有限的正集和大量负集的集的任何提示感兴趣。

我有大约 40 个正面示例(关于特定主题的相当长的文章)和大约 19,000 个负面示例(大部分来自 sci-kit learn newsgroups 数据集)。我还有大约 1,000,000 条可以使用的推文……对我正在尝试训练的主题持否定态度。负集与正集的大小是否会对分类器的训练产生负面影响?

我想在 sci-kit learn 中使用交叉验证。我需要把它分解成训练/测试开发/测试集吗?知道 sci-kit 中有一些预构建的库。您推荐或以前使用过的任何实现示例都会有所帮助。 谢谢!

【问题讨论】:

您打算使用哪种类型的分类器? 我有一个随机森林分类器...基本上读入一个 TSV 文件,创建一个词袋,然后生成矢量化器和随机森林分类器。我想用 SVM 看到这个,朴素贝叶斯,但还没有实现。谢谢您的帮助。任何 cmets/指导表示赞赏。如果检测到主题,则输出应为 1 或 0。 【参考方案1】:

第一个问题的答案是肯定的,它对结果的影响程度取决于算法。我的建议是密切关注基于类的统计数据,例如召回率和精度(在 classification_report 中找到)。

对于RandomForest(),您可以查看this thread,其中讨论了 样本权重参数。一般来说sample_weight是什么 你正在寻找scikit-learn

对于SVM,请查看this example 或this example。

对于NB 分类器,这个应该由贝叶斯隐式处理 规则,但在实践中您可能会看到一些较差的性能。

对于您的第二个问题,有待讨论,我个人将我的数据分成训练和测试拆分,对训练集执行交叉验证以进行参数估计,对所有训练数据进行重新训练,然后在我的测试集上进行测试。但是,您拥有的数据量可能会影响您拆分数据的方式(更多的数据意味着更多的选择)。

【讨论】:

很棒的答案。谢谢! 我应该尝试拆分我的文章以获得更多样本吗?您建议将多少百分比的正负数据用于训练和测试拆分 (80% / 20%)? 不知道拆分文章好不好,要看文章的长度。您认为您的 tf-idf 向量会描述一半的文档以及整个内容吗?也许看看一些无监督的学习技术,比如聚类来感受一下。如果你打算使用这个模型来预测,我总是推荐一个大于 20% 的测试集,最好是 50-66%。您能否标记我的答案,以便其他人可以将其视为您问题的答案?【参考方案2】:

您可能会使用随机森林来解决分类问题。基本上有3个参数来处理数据不平衡。类权重、样本大小和截止值。

类权重——一个类赋予的权重越高,其错误率降低的越多。

Samplesize- 对少数类进行过采样以改善类不平衡,同时对每棵树的缺陷进行采样[不确定 Sci-kit 是否支持这一点,以前是 R 中的参数)

Cutoff- 如果 >x% 的树投票给少数类,则将其归类为少数类。默认情况下,对于 2 类问题,x 在随机森林中是 1/2。对于少数类,您可以将其设置为较低的值。

在https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm查看平衡预测错误

对于第二个问题,如果您使用的是随机森林,则不需要保留单独的训练/验证/测试集。随机森林不会根据验证集选择任何参数,因此验证集是不必要的。

同样在随机森林的训练过程中,训练每棵树的数据是从训练数据中通过放回抽样获得的,因此每个训练样本没有用于大约 1/3 的树。我们可以使用这 1/3 树的投票来预测随机森林分类的​​开箱概率。因此,对于 OOB 准确性,您只需要一个训练集,而不是验证或测试数据来预测未见数据的性能。在https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm 处检查 Out of Bag 错误以供进一步研究。

【讨论】:

我不同意您关于随机森林不根据验证集选择参数的说法。树的深度和每次拆分使用的特征数量对于正确处理很重要。特征的数量在 NLP 应用中尤为重要,因为 tf-idf 向量通常包含无信息的特征。

以上是关于Scikit Learn 中具有小正样本集的机器学习实验设计的主要内容,如果未能解决你的问题,请参考以下文章

在 scikit-learn 中处理不平衡测试集的最佳方法

机器学习-scikit learn学习笔记

[机器学习与scikit-learn-3]:scikit-learn模型地图与模型选择

机器学习:SVM(scikit-learn 中的 RBFRBF 中的超参数 γ)

机器学习之概述

python机器学习——使用scikit-learn训练感知机模型