1

我正在尝试使用 Weka 将文档分类为两个类别(类别 1 和类别 2)。

我收集了一个训练集,其中包含属于这两个类别的 600 个文档,要分类的文档总数为 1,000,000。

因此,为了执行分类,我应用了 StringToWordVector 过滤器。我从过滤器中将以下内容设置为真: - IDF 变换 - TF 变形 - OutputWordCounts

我想问一些关于这个过程的问题。

1)我应该使用多少个文​​档作为训练集,以避免过度拟合?

2)应用过滤器后,我得到了训练集中的单词列表。我是否必须删除它们中的任何一个才能在分类器中获得更好的结果,或者它不起作用?

3)作为分类方法,我通常选择naiveBayes,但我得到的结果如下:

-------------------------
Correctly Classified Instances         393               70.0535 %
Incorrectly Classified Instances       168               29.9465 %
Kappa statistic                          0.415 
Mean absolute error                      0.2943
Root mean squared error                  0.5117
Relative absolute error                 60.9082 %
Root relative squared error            104.1148 %
----------------------------

如果我使用 SMO,结果是:

------------------------------
Correctly Classified Instances         418               74.5098 %
Incorrectly Classified Instances       143               25.4902 %
Kappa statistic                          0.4742
Mean absolute error                      0.2549
Root mean squared error                  0.5049
Relative absolute error                 52.7508 %
Root relative squared error            102.7203 %
Total Number of Instances              561     
------------------------------

那么在文档分类中,哪一个是“更好”的分类器?哪一个更适合小型数据集,比如我拥有的那个?我读过 naiveBayes 在大数据集上表现更好,但如果我增加我的数据集,会导致“过度拟合”效应吗?另外,关于 Kappa 统计,是否有任何可接受的阈值,或者在这种情况下并不重要,因为只有两个类别?

很抱歉这篇长文,但我已经尝试了一周来改进分类结果,但没有成功,尽管我试图获得更适合每个类别的文档。

4

3 回答 3

2

1)我应该使用多少个文​​档作为训练集,以避免过度拟合?\

您不需要选择训练集的大小,在 WEKA 中,您只需使用 10 倍交叉验证即可。回到问题,机器学习算法对过拟合问题的影响远不止数据集。


2)应用过滤器后,我得到了训练集中的单词列表。我是否必须删除它们中的任何一个才能在分类器中获得更好的结果,或者它不起作用?\

确实如此。但不能保证结果是否会好转。


3)作为分类方法我通常选择naiveBayes,但我得到的结果如下:\

通常,为了定义一个分类算法的好坏,ROC/AUC/F-measure值总是被认为是最重要的指标。您可以在任何机器学习书籍中学习它们。

于 2012-09-23T10:55:02.973 回答
1

要回答您的问题:

  1. 我会使用(10 倍)交叉验证来评估您的方法。该模型在 90% 的数据上训练了 10 次,并且每次使用数据的不同部分对 10% 的数据进行测试。因此,结果对您当前(随机)选择的训练和测试集的偏差较小。
  2. 删除停用词(即,频繁出现的词,具有很少的区分值,如the,heand)是改进分类器的常用策略。Weka'sStringToWordVector允许您选择包含这些停用词的文件,但它还应该有一个包含英文停用词的默认列表。
  3. 鉴于您的结果,SMO 执行两个分类器中最好的(例如,它有更多Correctly Classified Instances)。您可能还想看看 (Lib)SVM 或 LibLinear(如果它们本身不在 Weka 中,您可能需要安装它们;Weka 3.7.6 有一个包管理器,可以轻松安装),它可以在文档分类也是如此。
于 2012-09-22T09:39:09.020 回答
0

关于第二个问题 2)应用过滤器后,我得到了训练集中的单词列表。我是否必须删除它们中的任何一个才能在分类器中获得更好的结果,或者它不起作用?

我正在构建一个分类器并使用著名的 20news 组数据集对其进行训练,在没有预处理的情况下对其进行测试时,结果并不好。因此,我根据以下步骤对数据进行了预处理:

  1. 用空格替换 TAB、NEWLINE 和 RETURN 字符。
  2. 只保留字母(即将标点、数字等变成空格)。
  3. 将所有字母转为小写。
  4. 用一个空格代替多个空格。
  5. 每个文档的标题/主题只是简单地添加在文档文本的开头。
  6. no-short 从上一个文件中获得,通过删除长度小于 3 个字符的单词。例如,删除“他”但保留“他”。
  7. no-stop 从上一个文件中获得,通过删除 524 个 SMART 停用词。其中一些已经被删除,因为它们少于 3 个字符。
  8. 通过将 Porter's Stemmer 应用于剩余的单词,从上一个文件中获得。可以在此处找到有关词干提取的信息。

这些步骤取自http://web.ist.utl.pt/~acardoso/datasets/

于 2012-10-23T19:30:52.537 回答