解释 StringToWordVector() 的输出 – Weka

我正在尝试使用 Weka 的 Java API 进行文档分类。

这是我的数据文件目录结构。

+- text_example|+- class1|  ||  3 html文件|+- class2|   ||   1 html文件|+- class3    |    3 html文件

我使用 ‘TextDirectoryLoader’ 创建了 ‘arff’ 文件。然后我在创建的 arff 文件上使用了 StringToWordVector 过滤器,并设置了 filter.setOutputWordCounts(true)

下面是应用过滤器后的输出样本。我需要澄清一些问题。

@attribute </form> numeric@attribute </h1> numeric..@attribute earth numeric@attribute easy numeric

这个巨大的列表应该是初始 html 文件内容的分词,对吗?

然后我有,

@data{1 2,3 2,4 1,11 1,12 7,..............}{10 4,34 1,37 5,.......}{2 1,5 6,6 16,...}{0 class2,34 11,40 15,.....,4900 3,...{0 class3,1 2,37 3,40 5....{0 class3,1 2,31 20,32 17......{0 class3,32 5,42 1,43 10.........

为什么前三个项目没有类属性?(应该有 class1)。前导的 0 是什么意思,如 {0 class2,..}, {0 class3..}。例如,它说在 class3 文件夹中的第三个 html 文件中,由整数 32 标识的词出现了 5 次。只是想知道如何获取由 32 引用的词(标记)?

我如何减少特征向量的维度?我们不需要使所有特征向量的大小相同吗?(例如,只考虑训练集中最常见的 100 个术语,之后在测试时,只考虑测试文档中这 100 个术语的出现。因为,如果在测试阶段出现一个全新的词,分类器会忽略它吗?)。

我在这里遗漏了什么吗?我是 Weka 的新手。

另外,如果有人能解释分类器如何使用 StringToWordVector 过滤器创建的向量,我将非常感激。(例如,使用训练数据创建词汇表,降维,这些是在 Weka 代码内部发生的吗?)


回答:

  1. @attribute 的大列表包含了从您的输入中提取的所有标记。
  2. 您的 @data 部分采用稀疏格式,即对于每个属性,只有当其值不为零时才显示。对于前三行,类属性是 class1,您只是看不到它(如果是未知的,您会在前三行的开头看到 0 ?)。为什么会这样?Weka 在内部将名义属性(包括类)表示为双精度数,并从零开始计数。所以您的三个类在内部是:class1=0.0, class2=1.0, class3=2.0。由于零值在稀疏格式中不显示,您在前三行中看不到类。(另见 http://www.cs.waikato.ac.nz/ml/weka/arff.html 上的“稀疏 ARFF 文件”部分)
  3. 要获取由索引 n 表示的词/标记,您可以计数,或者如果您有 Instances 对象,可以在其上调用 attribute(n).name()。对于此,n 从 0 开始计数。
  4. 要减少特征向量的维度,有很多选项。如果您只想保留最常见的 100 个术语,您可以使用 stringToWordVector.setWordsToKeep(100)。请注意,这将尝试保留每个类的 100 个词。如果您不想按类保留 100 个词,可以使用 stringToWordVector.setDoNotOperateOnPerClassBasis(true)。如果有几个词频相同,您会得到略高于 100 的结果,所以 100 只是一个目标值。
  5. 关于测试阶段出现的新词,我认为这是不可能发生的,因为您必须在分类之前将所有实例传递给 stringToWordVector。不过,我对此不是 100% 确定,因为我使用的是两类设置,并且我让 StringToWordVector 在告诉分类器之前转换所有我的实例。

我一般建议您使用 Weka 的 KnowledgeFlow 工具进行实验,以学习如何使用不同的类。如果您知道如何在那里做事,您可以很容易地将这些知识用于您的 Java 代码。希望我能帮到您,尽管回答有点晚了。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注