最近看完了《集体智慧编程》一书,对常用的机器学习算法有了大体的了解,书中也分析了各个算法的优缺点,并指出了解决不同问题选择不同算法的方法,但是书中所讲太过繁琐,我在此提炼一下相关观点,也当是对自己看完本书作一些记录吧。

常用的10类机器学习算法:

  1. 线性回归
  2. 逻辑回归
  3. 决策树
  4. SVM(支持向量机)
  5. 朴素贝叶斯
  6. k最近邻算法
  7. k均值算法
  8. 随机森林算法
  9. 降维算法
  10. Gradient Boost和Adaboost算法

贝叶斯分类器

优点:

  • 同时具备接收大数据量训练和查询时具备高速度的特点
  • 具有支持增量式训练的能力(不借助于旧有训练数据,每一组新的训练数据都有可能引起概率值的变化,而如决策树和支持向量机,则需要我们一次性将整个数据集都传给它们。)
  • 对贝叶斯分类器实际学习状况的解释相对简单。

缺点:

  • 无法处理基于特征值组合所产生的变化结果。例如:“在线”和“药店”分开出现时一般出现在正常邮件中,但当组合起来时“在线药店”却一般出现在垃圾邮件中,贝叶斯分类器无法理解这种特征组合。

决策树分类器

优点:

  • 利用决策树可以很容易的解释一个受训模型,而且算法将最重要的判断因素很好的安排在了靠近树的根部位置。
  • 决策树能找到能使信息增益达到最大化的分界线,因此它能够同时处理分类数据和数值数据。
  • 与贝叶斯分类器相比,它能够很容易地处理变量之间的相互影响。

缺点:

  • 不支持向量式训练,每次训练都要从头开始。

神经网络

优点:

  • 能够处理复杂的非线性函数,并且能发现不同输入之间的依赖关系。
  • 允许增量式训练

缺点:

  • 神经网络是一种黑盒方法,无法确知推导过程。
  • 在选择训练数据的比率及与问题相适应的网络规模方面,并没有明确的规则可以遵循。

支持向量机

优点:

  • 在对新的观测数据进行分类时速度极快,因为支持向量机分类时只需判断坐标点位于分界线的哪一侧即可。
  • 通过将分类输入转换成数值输入,可以令支持向量机同时支持分类数据和数值数据。

缺点:

  • 针对每个数据集的最佳核变换函数及其相应的参数都是不一样的,而且每当遇到新的数据集时都必须重新确定这些函数及参数。
  • 和神经网络一样,SVM也是一种黑盒技术,实际上,由于存在向高维空间的变换,SVM的分类过程甚至更加难于解释。

k-最近邻算法

优点:

  • 能够利用复杂函数进行数值预测,同时又保持简单易懂的特点
  • 合理的数据缩放量不但可以改善预测的效果,而且还可以告诉我们预测过程中各个变量的重要程度。
  • KNN是一种在线(online)技术,这意味着新的数据可以在任何时候被添加进来,而不需要进行任何的计算。

缺点:

  • 为了完成预测,它要求所有的训练数据都必须缺一不可,为了找到最为接近的数据项,每一项待预测的数据必须和其他数据项进行比较,会产出极大的数据计算量。
  • 寻找合理的缩放因子并不是那么简单。

总结

每种机器学习的方法都有其固有的优缺点,因为这些固有的优缺点的存在,所以每种算法都有其适用的问题领域,具体到我们使用机器学习处理任务时,要充分了解需要解决问题的特点,从而选择最有效的机器学习算法来解决问题。