【问题标题】:Input matches no features in training set; how much more training data do I need?输入不匹配训练集中的特征;我还需要多少训练数据?
【发布时间】:2016-05-06 18:14:45
【问题描述】:

我是文本挖掘的新手。我正在研究垃圾邮件过滤器。我做了文本清理,删除了停用词。 n-gram 是我的特点。所以我建立一个频率矩阵并使用朴素贝叶斯建立模型。我的训练数据集非常有限,所以我面临以下问题。

当一个句子来找我进行分类时,如果它的特征与训练中的现有特征都不匹配,那么我的频率向量只有零。

当我发送这个向量进行分类时,我显然得到了一个无用的结果。

什么是理想的训练数据大小才能获得更好的结果?

【问题讨论】:

  • 获取更多垃圾邮件并不难。
  • 获得更多垃圾邮件并不难,但获得相关帖子却很难。我正在处理网络表单帖子。我能知道训练数据的理想大小吗
  • 那你的功能还不够丰富。手动或通过本体为相关词创建类别,例如“预付费用”、“资金”、“银行转帐”、“西联汇款”、“汇票”、“汇票”、“彩票”、“奖品”、“奖金”等。对所有垃圾邮件类别执行此操作(例如药品、在家工作等)。然后重新运行并重新检查仍然不匹配任何功能的任何内容。在此处发布几个示例以使事情具有可重复性。

标签: machine-learning nlp classification


【解决方案1】:

当一个句子来找我进行分类时,如果它的特征与训练中的现有特征都不匹配,那么我的频率向量只有零。

您应该对输入进行归一化,使其在 0 附近形成某种粗略分布。一种常见的方法是进行这种转换:

input_signal = (feature - feature_mean) / feature_stddev

那么只有当所有特征都在平均值时才会出现全零。

【讨论】:

  • 当功能都完全处于平均水平时,这如何帮助解决问题,这是我期望的结果?如果您没有任何关于提取的特征的任何信息,它们将继续无法使您做出任何决定。
  • 文本很难让所有特征最终都达到平均值。这通常意味着文本必须包含单词“V1GRA”0.00434211111 次和单词“PRINCE”0.0003213232 次。但也有一个解决方案,即在所有样本中插入一个虚拟值 1,然后可以控制如果所有其他特征都为 0 会发生什么。
  • 极稀疏特征模型的根本问题在于,很可能没有任何输入特征出现在训练数据中。同样,对已知特征进行计算对未知特征没有帮助。
  • 如果训练数据中的任何地方都不存在某个特征,我猜想计算全局平均值和标准差会很困难,而且这些也会随着时间而改变。我不知道如何处理。
【解决方案2】:

通常,您拥有的数据越多越好。你会在某个时候得到递减的回报。通过在改变训练集大小的同时绘制交叉验证性能来查看您的训练集大小是否存在问题通常是一个好主意。在 scikit-learn 中有一个“learning curve”的例子。

Scikit-learn 学习曲线示例

您可以考虑引入外部示例帖子以增加您的训练集的大小。

随着训练集的增长,您可能希望尝试减少分类器的偏差。这可以通过添加 n-gram 特征或切换到逻辑回归或 SVM 模型来完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-22
    • 2019-03-18
    • 1970-01-01
    • 2018-12-16
    • 2018-10-10
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    相关资源
    最近更新 更多