机器学习常用算法优缺点对比
最近看完了《集体智慧编程》一书,对常用的机器学习算法有了大体的了解,书中也分析了各个算法的优缺点,并指出了解决不同问题选择不同算法的方法,但是书中所讲太过繁琐,我在此提炼一下相关观点,也当是对自己看完本书作一些记录吧。
常用的10类机器学习算法:
- 线性回归
- 逻辑回归
- 决策树
- SVM(支持向量机)
- 朴素贝叶斯
- k最近邻算法
- k均值算法
- 随机森林算法
- 降维算法
- Gradient Boost和Adaboost算法
贝叶斯分类器
优点:
- 同时具备接收大数据量训练和查询时具备高速度的特点
- 具有支持增量式训练的能力(不借助于旧有训练数据,每一组新的训练数据都有可能引起概率值的变化,而如决策树和支持向量机,则需要我们一次性将整个数据集都传给它们。)
- 对贝叶斯分类器实际学习状况的解释相对简单。
缺点:
- 无法处理基于特征值组合所产生的变化结果。例如:“在线”和“药店”分开出现时一般出现在正常邮件中,但当组合起来时“在线药店”却一般出现在垃圾邮件中,贝叶斯分类器无法理解这种特征组合。
决策树分类器
优点:
- 利用决策树可以很容易的解释一个受训模型,而且算法将最重要的判断因素很好的安排在了靠近树的根部位置。
- 决策树能找到能使信息增益达到最大化的分界线,因此它能够同时处理分类数据和数值数据。
- 与贝叶斯分类器相比,它能够很容易地处理变量之间的相互影响。
缺点:
- 不支持向量式训练,每次训练都要从头开始。
神经网络
优点:
- 能够处理复杂的非线性函数,并且能发现不同输入之间的依赖关系。
- 允许增量式训练
缺点:
- 神经网络是一种黑盒方法,无法确知推导过程。
- 在选择训练数据的比率及与问题相适应的网络规模方面,并没有明确的规则可以遵循。
支持向量机
优点:
- 在对新的观测数据进行分类时速度极快,因为支持向量机分类时只需判断坐标点位于分界线的哪一侧即可。
- 通过将分类输入转换成数值输入,可以令支持向量机同时支持分类数据和数值数据。
缺点:
- 针对每个数据集的最佳核变换函数及其相应的参数都是不一样的,而且每当遇到新的数据集时都必须重新确定这些函数及参数。
- 和神经网络一样,SVM也是一种黑盒技术,实际上,由于存在向高维空间的变换,SVM的分类过程甚至更加难于解释。
k-最近邻算法
优点:
- 能够利用复杂函数进行数值预测,同时又保持简单易懂的特点
- 合理的数据缩放量不但可以改善预测的效果,而且还可以告诉我们预测过程中各个变量的重要程度。
- KNN是一种在线(online)技术,这意味着新的数据可以在任何时候被添加进来,而不需要进行任何的计算。
缺点:
- 为了完成预测,它要求所有的训练数据都必须缺一不可,为了找到最为接近的数据项,每一项待预测的数据必须和其他数据项进行比较,会产出极大的数据计算量。
- 寻找合理的缩放因子并不是那么简单。
总结
每种机器学习的方法都有其固有的优缺点,因为这些固有的优缺点的存在,所以每种算法都有其适用的问题领域,具体到我们使用机器学习处理任务时,要充分了解需要解决问题的特点,从而选择最有效的机器学习算法来解决问题。