我正在尝试使用 Weka 进行文本分类。为此,使用稀疏 ARFF 数据文件格式是有意义的。使用 Weka 3.7.2,我尝试了:
- 使用TextDirectoryLoader将文本目录转换为 Instances 对象 。
- 使用StringToWordVector将前一阶段产生的字符串转换为数字。
第一阶段工作得很好。第二阶段导致了一个问题,在 Weka 的 ARFF 文件格式规范中是这样描述的:
警告:从具有字符串属性的数据集中保存 SparseInstance 对象存在一个已知问题。在 Weka 中,字符串和标称数据值存储为数字;这些数字充当可能属性值数组的索引(这非常有效)。但是,第一个字符串值被分配索引 0:这意味着,在内部,这个值被存储为 0。当写入 SparseInstance 时,内部值为 0 的字符串实例不会输出,因此它们的字符串值会丢失(并且当再次读取arff文件,默认值0是不同字符串值的索引,所以属性值出现变化)。
ARFF 格式建议使用此解决方案:
要解决此问题,请在索引 0 处添加一个虚拟字符串值,只要您声明可能在 SparseInstance 对象中使用并保存为 Sparse ARFF 文件的字符串属性,就不会使用该虚拟字符串值。
我正在尝试这样做 - 添加一个虚拟字符串。我未能手动执行此操作(通过编辑 ARFF 文件)。任何做过这个的人都可以发布一个例子——一个程序段,一个正确修改的 ARFF 文件,或者其他方式来做到这一点?
谢谢。