prioritizing what to work on
设计一个机器学习算法时,我们应该先做什么?以垃圾邮件识别的例子为例:
垃圾邮件发送者可能会故意将一些字符写错,如上图中的Medicine用1来代替i,M0rgages中o用0来代替。
我们有一些标识为Spam的邮件,有一些标识为non-spam的邮件,这些邮件做为trainning data用监督学习来设计分类算法
挑选100个词做为是否是垃圾邮件的词,然后将这100个词按照字母顺序来进行排序,如果邮件中出现了这个词,那么相应的分量为1,如果邮件中没有出现的话,则为0;
实际上,我们并不是手动来挑选这100个词的,而是通过查找整个训练集来挑出最常见的n个词(一般为10000-50000)
如果你要build a spam classifier,一个你需要面对的问题是:怎样合理利用你的时间来建立一个高识别率的,低错误的识别系统。
首先我们自然会想到收集更多的数据,more data,算法可能会更好。-----在垃圾邮件识别领域,有一些projects称为Honey Pot projects(一些假的邮件地址,然后让这些假的邮件地址到spammer那儿去,用来收集成千上万的垃圾邮件),这样我们就得到了很多trainning data来训练我们的算法。
但是之前我们也看到了,获得更多的训练数据也是有用,在某些情况下也没有用。这时我们也有其它的方法来提高算法的性能。-----创建更加复杂的特征值
基于邮件路由信息(来自于邮件头部)来创建更复杂的特征值: 当spammer发送邮件时,它们通常会将垃圾邮件的来源进行模糊化,或者使用假的email headers,或者通过一些非常不常见的设施、通过不常见的路由来发送垃圾邮件。这些信息将会在email headers里面有所反映。所以如果我们查看email headers的话,试图去建立更复杂的features去捕获这种类型的邮件路由信息去识别某封邮件是否是垃圾邮件。
基于邮件内容来创建更复杂的特征值:如discount和discounts应该当成一样的吗?或者将标点符号包括进去,如可能垃圾邮件会使用很多感叹号等等。spammer经常将一些词故意误拼,这时我们需要更复杂的算法来识别这些误拼的单词(如med1cine,w4tches等等)。
总结:
通常我们会将我们接下来要做些什么像上图那样列举下来,可是我们很难说哪种方法更有用,所以我们不要固定在哪种做法上.通常我们会随机选择一个方法来实行,但是这种方法因为是随机选择的,所以可能对于我们算法的提高没有帮助,接下来将介绍通过一种方法来选择哪种方法对我们性能的提高有帮助。