可以从一下几个维度进行分析, 选择合适的算法:
- 数据集的大小
- 特征空间维度
- 特征是否相互独立
- 是否为线性特征[注1]
- 对拟合程度的要求
- 其他要求: 性能, 时间, 空间
影响选择的因素有很多, 如果没有特别的要求, 尽量选择简单的模型(Occam's Razor)
Logistic Regression(LR)
LR首屈一指. 适用于特征基本线性相关, 并且问题线性可分. 当特征为非线性特征时, 可使用特征工程将非线性特征转换为线性特征(离散化+one-hot, 重排序). 正则化使模型对噪声鲁棒, 不容易过拟合训练数据, 并且可使用正则化进行特征选择. LR的另一特性是输出概率, 有效支持排序任务和分类阈值的选择. LR对大数据也有较好的支持, 可以构建高效的分布式的模型.
虽然LR不会百分百有效, 但是在尝试其他分类器前, 不妨先使用LR+L2建立一个不错的基线.
当你选择LR建立基线后, 你需要尝试一些其他的分类器, 主要有两个方向:
- SVM
- 树模型集成(Tree Ensemble)
一般情况下推荐树模型集成, 但SVM也有值得考虑的情景.
SVM(Support Vector Machine)
LinearSVM与LR并无太大的不同, 主要的区别在于:
- 损失函数的不同(hinge loss vs cross-entropy loss)
- 模型解释的不同(maximum margin vs logistic distributed)
使用SVM代替LR主要有两个原因:
- 核函数解决线性不可分问题(SVM+非线性核函数(RBF))
- 特征维度高(文本分类)
SVM的主要缺点: 在训练样本较多的情况下, 训练效率低下.
树模型集成(Tree Ensemble)
树模型集成主要包含两种算法:
- 随机森林(Random Forest)
- 梯度提升树(Gradient boosted trees)
树模型集成与LR的主要区别在于:
- 树模型集成不用考虑是否为线性特征, 或者特征之间是否为线性关系
- 因为树模型集成方式的不同(bagging or boosting), 树模型集成可以处理高维特征和训练样本较多的数据
- 树模型的拟合能力较强
随机深林和梯度提升树的不同
- 梯度提升树的参数更多, 所以梯度提升树的拟合能力更好, 但是也更容易过拟合
- 随机森林则更加的稳定, 对大数据支持更好
深度学习(Deep Learning)
深度学习在图片分类等非结构数据上有着很好的表现, 当你不满足于前面的一些方法, 你可以尝试一下深度学习.
总结
LR是一个不错的基线, 随机森林也是一个不错的分类器. 如果觉得还存在提升空间, 可以试一试GBDT和深度学习. 另外, 也可以在kaggle上看看主流的算法有哪些, 并且适应什么样的问题.
文章翻译至: Quora: What are the advantages of different classification algorithms?
注1: 线性特征
若满足标签y是特征x的线性组合
则有
- 特征为线性特征
- 特征之间为线性关系
- 问题为线性可分问题
因此, 我认为线性特征, 特征之间的线性关系, 问题是否是线性可分, 标签是否是特征之间的线性组合为同一个概念.
线性特征 vs 非线性特征
非线性特征主要包含两种:
- 类别特征
- 特征的高次幂
另外, 知乎上有一篇对另一个高票回答进行了翻译: 用于数据挖掘的分类算法有哪些,各有何优劣?
以下是对第二篇文章翻译的转载
尝试将quora上的这个回答翻译了下。第一次翻译,不好之处请见谅。
What are the advantages of different classification algorithms?
以下是我这些年总结的指南
训练集有多大?
如果你的训练集很小,高偏差/低方差的分类器(如朴素贝叶斯)比低偏差/高方差的分类器(如K近邻或Logistic回归)更有优势,因为后者容易过拟合。但是随着训练集的增大,高偏差的分类器并不能训练出非常准确的模型,所以低偏差/高方差的分类器会胜出(它们有更小的渐近误差)。
你也可以从生成模型与判别模型的区别来考虑它们。
某些分类器的优势
朴素贝叶斯(Naive Bayes, NB)
超级简单,就像做一些计数的工作。如果条件独立假设成立的话,NB将比判别模型(如Logistic回归)收敛更快,所以你只需要少量的训练数据。即使条件独立假设不成立,NB在实际中仍然表现出惊人的好。如果你想做类似半监督学习,或者是既要模型简单又要性能好,NB值得尝试。
Logistic回归(Logistic Regression, LR)
LR有很多方法来对模型正则化。比起NB的条件独立性假设,LR不需要考虑特征是否是相关的。与决策树与支持向量机(SVM)不同,LR有很好的概率解释,且很容易利用新的训练数据来更新模型(使用在线梯度下降法)。如果你想要一些概率信息(如,为了更容易的调整分类阈值,得到分类的不确定性,得到置信区间),或者希望将来有更多数据时能方便的更新改进模型,LR是值得使用的。
决策树(Decision Tree, DT)
DT容易理解与解释(对某些人而言——不确定我是否也在他们其中)。DT是非参数的,所以你不需要担心异常点(或离群点)和数据是否线性可分的问题(例如,DT可以轻松的处理这种情况:属于A类的样本的特征x取值往往非常小或者非常大,而属于B类的样本的特征x取值在中间范围)。DT的主要缺点是容易过拟合,这也正是随机森林(Random Forest, 或者Boosted树)等集成学习算法被提出来的原因。此外,RF在很多分类问题中经常表现得最好(我个人相信一般比SVM稍好),且速度快可扩展,也不像SVM那样需要调整大量的参数,所以最近RF是一个非常流行的算法。
支持向量机(Support Vector Machine, SVM)
很高的分类正确率,对过拟合有很好的理论保证,选取合适的核函数,面对特征线性不可分的问题也可以表现得很好。SVM在维数通常很高的文本分类中非常的流行。由于较大的内存需求和繁琐的调参,我认为RF已经开始威胁其地位了。
总结
回到LR与DT的问题(我更倾向是LR与RF的问题),做个简单的总结:两种方法都很快且可扩展。在正确率方面,RF比LR更优。但是LR可以在线更新且提供有用的概率信息。鉴于你在Square(不确定推断科学家是什么,应该不是有趣的化身),可能从事欺诈检测:如果你想快速的调整阈值来改变假阳性率与假阴性率,分类结果中包含概率信息将很有帮助。无论你选择什么算法,如果你的各类样本数量是不均衡的(在欺诈检测中经常发生),你需要重新采样各类数据或者调整你的误差度量方法来使各类更均衡。
但是
更好的数据往往比更好的算法更重要,提取好的特征也需要很大的功夫。如果你的数据集非常大,那么分类算法的选择可能对最后的分类性能影响并不大(所以可以根据运行速度或者易用性来选择)。