最近工作了一段时间,今天跟大家讨论一下关于“规则与模型”的问题。
大家肯定都知道,机器学习方法主要分两类,一类是基于统计的方法,比如贝叶斯、KNN等,都是对数据的某种特征进行归类计算得到数据划分的依据的;另一类是基于规则的方法,比如,语义规则,语法规则或者业务规则等等,这些规则主要是根据数据本身的特征人为地对分类细节进行限定,没有什么太高深的理论,但是实用性很强。当然,我觉得还有第三种方法,就是基于统计与基于规则相结合的方法,比如关联规则,apriori方法,或者决策树方法。这些方法在分类或者求变量关系的时候本质上是基于规则分类,但是在训练过程中却是使用统计的方法的。比如apriori方法,该方法本身就是求规则的一种方法,但该方法训练的时候是需要对各种关联特征进行统计的。训练完毕后寻找强关联性的特征可以进行分类,因为我觉得找出哪些是强关联哪些不是强关联就是一个分类的过程。再比如决策树,同样的道理,决策树本身得到的那棵树就是一棵规则树,但是在寻找树的分裂属性上,无论是ID3还是C4.5,都是基于统计方法的。我认为这种通过训练出的规则进行统计分类的方法就是统计与规则相结合的方法。那么这三类方法哪些是比较有效的呢,或者说哪些是比较适合大部分数据的呢?
我的个人理解是,没有。我们在学校里写paper,最主要的任务有三:第一,提高算法性能;第二,提高算法对数据的匹配度;第三,提高数据对算法的匹配度。举个例子来说,我用SVM对新浪微博文本做情感分析,要么改进SVM核心算法,提高分类精度;要么对SVM选取特征的方法或空间构造的方法进行改进,提高分类精度;要么就是直接改进数据特征提取方式,提高数据对分类器的匹配度。但是,不管是哪一种方法,都要满足最小泛化阈值。也就是说,对训练数据之外的测试数据的分类准确度一定要满足最低要求。我们把训练数据和测试数据的概念扩大一下,如果我们把要训练的某类数据作为训练数据,把该类别之外的数据作为测试数据,情况就完全不一样了。比如,我把微博数据作为训练数据,把短信类短文本数据作为测试数据,虽然同样都属于短文本,但泛化值出奇的低。这是因为我们无论采用哪一种方法,数据都必须是封闭的,或者说是相对封闭的。我们用分类器或者基于统计的方法,其实主要就是为了提高泛化能力,因为统计一个词的个数和一个数的个数的意义是一样的。但是现在看来,好像基于统计的方法的泛化能力还是有限。
导致这种现象的原因是什么呢?我在刚开始学机器学习的时候就遇到一个很大的矛盾,既然SVM是最好的基于统计的分类方法,而基于统计的方法的目的就是为了提高泛化能力,为什么在使用SVM的时候还是需要去适应数据呢?在我理解,分类方法对数据适应的越多,规则成分就越多。我在最近做“技能词识别”的时候使用了各种规则,尝试了各种方法,然后我返现我犯了两个个错误,第一SVM是一种思想,不是一种具体的方法。思想本身无法使用,只有把它应用到实践才有价值;第二就是数据挖掘,或者机器学习的核心的重点永远是数据和思想的问题,没有方法的问题。因为我们选择的方法一定是要匹配数据的,目前来说这是根本;方法也是必须要符合分类某数据的核心思想的。由此我想出,无论是基于规则的方法还是基于统计的方法都是基础理论,单纯的使用基础理论是没有什么意义的,或者说只能满足很少一部分数据的。只有结合实际情况,结合多种基础理论,才能把机器学习运用到实际当中,因为我们的核心是数据,是实际情况。
所以说,如果们分类的时候发现基于统计的方法远远不如基于规则的方法,或者反过来,并不表明哪一种方法好,而是说明某一种方法更适合目前要分析的数据。对完全不同数据类型的数据进行泛化我觉得目前来说不太现实,因为对于真实的人来说让一个人根本不懂英语的中国人去理解英文那是不可能的。当然,以后会发展到什么程度我是难以预料的,我的眼光目前也比较短浅看不到很深远的东西。但我觉得,如果某一天这种泛化能力实现了,人类将走向灭绝。
对了,最后一点,我觉得将“基于统计的学习方法”和“基于规则的学习方法”改为“基于统计的学习思想”和“基于规则的学习思想”更好一些。
可能会有逻辑不对的地方,欢迎批评指正!