How could I transfer what I've got to this format?
这就是我将如何做到这一点。我将使用您必须计算训练集中每封邮件的字数的脚本。然后,使用另一个脚本并将该数据转换为您之前显示的 LIBSVM 格式。(这可以通过多种方式完成,但使用 Python 等简单的输入/输出语言编写应该是合理的)我会将所有“好邮件”数据批处理到一个文件中,并将该类标记为“1” . 然后,我将对“垃圾邮件”数据执行相同的过程,并将该类标记为“-1”。正如 nologin 所说,LIBSVM 要求类标签在特征之前,但特征本身可以是任意数字,只要它们是按升序排列的,例如 2:5 3:6 5:9 是允许的,但不是 3:23 1 :3 7:343。
如果您担心您的数据格式不正确,请使用他们的脚本
checkdata.py
在训练之前,它应该报告任何可能的错误。
一旦你有两个单独的文件,其中的数据格式正确,你可以调用
cat file_good file_spam > file_training
并生成一个包含好邮件和垃圾邮件数据的培训文件。然后,对测试集执行相同的过程。以这种方式形成数据的一个心理优势是,您知道训练(或测试)集中的前 700 封(或 300 封)邮件是好邮件,其余的是垃圾邮件。这样可以更轻松地创建您可能想要对数据执行操作的其他脚本,例如精确/召回代码。
如果您还有其他问题,http://www.csie.ntu.edu.tw/~cjlin/libsvm/faq.html上的 FAQ应该可以回答一些问题,以及安装时附带的各种 README 文件. (我个人发现“工具”和“Python”目录中的 README 是一个很大的福音。)遗憾的是,FAQ 并没有涉及 nologin 所说的关于数据是稀疏格式的内容。
最后一点,我怀疑您是否需要计算邮件中可能出现的每个可能的单词。我建议只计算您怀疑出现在垃圾邮件中的最常见单词。其他潜在功能包括总字数、平均字长、平均句子长度以及您认为可能有用的其他可能数据。