惰性学习法
我们接触比较多的分类方法,例如决策树,关联规则挖掘,支持向量机,贝叶斯分类,后向传播等等,都可以被称为“急切学习法”,他们接受训练集的信息,在对新的元组(测试集中)进行检验之前,就已经构造好了泛化模型(即分类器),然后根据分类器,直接对新元组分类。所以“急切学习法”的名字很形象:赶紧学(训练之后立即得到分类器),学完之后,直接用(对新元组分类)。
现在我要说一种新的分类方法,最近邻(kNN)分类,和这些“急切学习法”不同,kNN分类并不着急学习,他对于接受的训练元组初始时不做任何处理,只是简单存储,直到接收到测试集中新元组的那一刻,再利用训练集中的元组进行泛化,给出分类结果。这种模式也被称为“惰性学习法”。那kNN分类来说,当接收到新元组需要做检验时,程序计算出与这个新元组(测试元组)最近的k个最近的训练元组,根据多数投票的原则,确定测试元组的类别。具体的算法和注意事项我会在下面详细说明。
和“急切学习法”相比,“惰性学习法”有优势,也有缺点:
先说优点:
- 天生支持增量学习。了解上面我说的那几种“急切学习法”的话,你会明白当训练元组增加时,那些方法即使可以做增量拓展,也很复杂且低效。
- 能对超多变形的复杂决策空间建模。而这可能不太容易被“急切学习法”描述。
- 在数据量不多但数据代表性较强时,kNN分类效果较好。
再说缺点:
- 计算开销大,了解kNN查询的话,你就知道这种计算执行起来很慢。
- 正因为计算开销大,所以需要有效的存储技术和并行硬件的支持。
不过无论如何,“惰性学习法”(尤其是kNN分类)为我们提供了一种和大多分类方法不同的思路,还是有用武之地的,所以我觉得有必要在此总结。
kNN分类
基本步骤
依次读取训练元组: { x1,x2,…,xn} { x 1 , x 2 , … , x n } ,其中 xi x i 由 m m 个属性 组成。即 xi={ xi,1,xi,2,…,xi,m} x i = { x i , 1 , x i , 2 , … , x i , m } ,其中 <