【发布时间】:2011-09-28 14:33:59
【问题描述】:
我想仔细检查一些我不确定的关于分类器学习训练集的概念。当我们为训练数据选择记录时,我们是选择每个类别的相同数量的记录,总和为 N,还是应该随机选择 N 条记录(不考虑类别)?
直觉上我想到的是前者,但认为先验类的概率会相等并且没有真正的帮助?
【问题讨论】:
标签: machine-learning classification
我想仔细检查一些我不确定的关于分类器学习训练集的概念。当我们为训练数据选择记录时,我们是选择每个类别的相同数量的记录,总和为 N,还是应该随机选择 N 条记录(不考虑类别)?
直觉上我想到的是前者,但认为先验类的概率会相等并且没有真正的帮助?
【问题讨论】:
标签: machine-learning classification
这取决于您的班级分布,并且只能通过手头问题的领域知识来确定。 您可以提出以下问题:
如果是这样,您可能应该重新分配类。
根据我的经验,重新分配类没有坏处,但并不总是必要的。
这真的取决于你的班级分布。在欺诈或入侵检测的情况下,预测类的分布可能小于 1%。 在这种情况下,如果您希望分类器学习每个类之间的差异,则必须在训练集中均匀分布这些类。否则,它将生成一个分类器,该分类器可以正确分类超过 99% 的案例,而从未正确识别欺诈案例,这就是创建分类器的重点。
一旦您拥有一组均匀分布的类,您就可以使用任何技术(例如 k-fold)来执行实际训练。
另一个需要调整类分布但不一定在每个记录数相同的例子是从它们的形状确定字母表的大写字母的情况。
如果您采用英语中常用字母的分布来训练分类器,则几乎不会有字母Q 的情况(如果有的话)。另一方面,字母O 很常见。如果您不重新分配类以允许相同数量的Q 和O,则分类器没有足够的信息来区分Q。您需要向其提供足够的信息(即更多 Qs),以便它可以确定 Q 和 O 确实是不同的字母。
【讨论】:
首选方法是使用 K 折交叉验证来获取学习和测试数据。
引用自维基百科:
K 折交叉验证
在 K 折交叉验证中, 原始样本是随机的 划分为 K 个子样本。的 K 个子样本,单个子样本为 保留作为验证数据 测试模型,剩下的 K − 1 个子样本用作训练 数据。交叉验证过程是 然后重复K次(折叠), 使用 K 个子样本中的每一个 恰好一次作为验证数据。 褶皱的 K 结果可以 被平均(或以其他方式组合)到 产生一个单一的估计。这 这种方法优于重复 随机子采样就是全部 观察用于两者 训练和验证,以及每个 观察用于验证 恰好一次。 10折交叉验证 常用。
在分层 K 折交叉验证中, 选择折叠,以便 平均响应值约为 在所有褶皱中相等。如果是 二分法分类,这 意味着每个折叠大约包含 两种类型的比例相同 类标签。
您应该始终采用通用方法,以便与其他科学数据获得可比较的结果。
【讨论】:
我构建了一个贝叶斯分类器的实现,通过检查示例中单词的出现来确定样本是否为 NSFW(不适合工作)。在为 NSFW 检测训练分类器时,我尝试过使训练集中的每个类都具有相同数量的示例。这并没有像我计划的那样奏效,因为其中一个班级的每个例子的单词比另一个班级多得多。
由于我根据这些词计算 NSFW 的可能性,我发现根据类别的实际大小(以 MB 为单位)平衡它们是有效的。我对这两种方法都尝试了 10 次交叉验证(根据示例数量和类大小进行平衡),发现根据数据大小进行平衡效果很好。
【讨论】: