gpt4 book ai didi

tensorflow - 不平衡数据集上的一类文本分类

转载 作者:行者123 更新时间:2023-11-30 08:39:33 27 4
gpt4 key购买 nike

我从网页文本数据中抓取了不平衡数据集,并手动将其分类为类别,而另一个负类可以具有我标记为任何类型的文本数据。从数据集来看,很明显负样本大约非常少1200(满分 6000)。

负 = 1200

正数 = 4800

最初,使用不平衡的端口词干数据集,该模型以高精度偏向多数类,但在未见过的数据中表现最差。

So I took 1200 Negative and 1200 Positive and made it balanced.

I implemented a Dense Model of 64 nodes in 4 layers with regularization of 0.5 using Keras and was able to achieve 60% accuracy in cross-validation while train accuracy goes as high as up to >95%.

查看val_accacc,我觉得在大约20个epoch后它完全过度拟合。除此之外,由于平衡数据集中的数据行数较少,它也无法泛化。

  • 有哪些方法可以解决此类问题?
  • One Class SVM 可以帮助进行单类别文本分类吗?
  • 如果 One Class SVM 可以提供帮助,那么任何人都可以提供其实现的基本示例或资源吗?

最佳答案

首先,您确定您认为负面的 6000 个类别中没有正面类别吗?垃圾进来,垃圾出去,确保这里不是这种情况。

解决此类问题的方法是什么

按照我解决问题的顺序。

  • 确保您的数据表示良好。如果您正在处理文本数据,您应该使用像 pretrained word2vec 这样的词向量。 ,也可在 tensorflow 中找到和 tensorflow hub (您可以在这里找到更高级的词嵌入方法,例如 ELMo

  • 获取更多示例 - 这个示例通常应该会产生最佳结果(如果执行上述步骤),但需要时间。

  • 尝试不同的算法 - 有些算法并不真正关心类不平衡。我认为决策树及其变体是最突出的。你真的应该从简单的决策树开始检查它们,而不是 random forest以及像 xgboost 这样的提升树, LightGBMcatboost ,最后三个应该表现得非常相似,我认为,由于关于这个主题的 Material 丰富,xgboost 可能是最好的选择。
  • 不同的指标 - 准确性不是最好的指标,因为它很大程度上受到负面类别的插入。使用其他指标,例如 precision and recall并专注于后者(因为您的算法可能找不到足够的正类)。
  • 加权损失 - 正例错误的权重将高于负例错误的权重。与下一个相比,我更喜欢它,因为该模型试图适应数据。 Here是 Tensorflow 中自定义损失的示例。
  • 上采样 - 与您所做的相反,多次为模型提供相同的正例(在本例中每次 5 次,因此有 6000 个正例,与负例一样多)。您不会丢失信息,但训练需要更长的时间(总共 7200 个示例基本上不存在问题)。
  • 欠采样 - 您在这里所做的,但是您丢失了很多有关负类及其特征的信息。对于较大的数据集更好,您的数据集较小。
  • 创造性方法 - 文本数据更难,如果不是这种情况,您可以尝试降维或其他数据表示形式,这可以找到正点和负点之间差异的根本原因。最难,而且可能对你的情况没有帮助。

一类 SVM 能否提供帮助

怀疑吧,它是用来检测异常值的。 7200 个数据点中的 1200 个不应被视为异常值。此外,它可能与负类共享许多功能,并且您无法利用当前拥有的标记数据。

如果你想尝试一下,sklearn 中有一个实现 here .

关于tensorflow - 不平衡数据集上的一类文本分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55018167/

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