首先说一下两种学习方式: lazy learning 和 eager learning。
先说 eager learning, 这种学习方式是指在进行某种判断(例如,确定一个点的分类或者回归中确定某个点对应的函数值)之前,先利用训练数据进行训练得到一个目标函数,待需要时就只利用训练好的函数进行决策,这是一种一劳永逸的方法, SVM 就属于这种学习方式;
而 lazy learning 是指只有到了需要决策时才会利用已有数据进行决策,而在这之前不会经历eager learning 所拥有的训练过程, KNN 属于这种方式。
Eager learning 考虑到了所有训练样本,说明它是一个全局的近似,优点是虽然它需要耗费训练时间,可是它的决策时间基本为 0。
Lazy learning 在决策时虽然需要计算所有样本与查询点的距离,但是在真正做决策时却只用了局部的几个训练数据,所以它是一个局部的近似,然而虽然不需要训练,它的复杂度还是需要 O(n),n 是训练样本的个数。
Lazy learning 的缺点: 1. 需要的存储空间比较大 2. 决策过程比较慢。
针对全局和局部的问题,我想了一个实际的例子。假设,现在我们要针对中国各地区的贫富问题进行划分,已经知道西部大部分地方比较贫穷,少部分地方富裕;而东部大部分地方富裕,少部分地方贫穷。首先,我们使用 SVM进行求解,按照 SVM 的思想,最后的结果一定是沿着中国地图无情的划一条线,而用KNN 时,东部城市中北京,上海等算是富裕的,而菏泽啊这样的就不太富裕;西部呢,像成都啊(不知道算不算西部,就假设算吧)算是富裕的,西宁啊这样的算是不太富裕的。
使用应用KNN算法时,我们无法对预测的误差有一个统计意义上的估计,结果的波动可能很大,这通常不是我们希望看到的。但是KNN的实现简单,使用灵活,也有自己的用武之地。
参考:
因此:
SVM需要训练过程,预测效率高。
KNN计算复杂度高,但是需要调的参比较小。
理由:因为训练样本数量特别大,使用复杂核函数的SVM会导致运算很慢,因此应该考虑通过引入更多特征,然后使用线性核函数的SVM或者lr来构建预测性更好的模型。
SVM有多种核可以选择,可以处理各种非线性问题(条件是选对核函数)。大多数情况准确率都比LR要高,但是模型较大,训练效率低。