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