机器学习常见模型适用场景整理
如何确定业务适合的算法模型
训练集大小:大,小
大:不适合SVM,KNN,耗费内存
同时:适合低方差/高偏差模型(SVM),不适合高方差低偏差模型
特征空间维度:高维,低维
高维:适合SVM(文本分类),不适合KNN(适合低维度数据)
特征是否相互独立:独立,不独立
独立:朴素贝叶斯(前提:特征间相互独立)
是否为线性特征:线性,非线性
线性:逻辑回归(简单,可解释性强,线性可分数据下表现良好)
对拟合程度的要求:??
其他要求(性能,时间,空间):计算复杂,简单
复杂:不适合SVM,KNN
缺失值比例:多,少
svm,KNN涉及到距离计算的模型缺失值对模型效果影响较大
训练集大小
当训练集较小时,选择高偏差/低方差的分类器,如朴素贝叶斯,比低偏差/高方差的分类器(如K近邻或Logistic回归)更有优势。
我的理解
因为训练集小,样本信息可能不全面,应该选择受到样本扰动影响较小的方法。但是随着训练集的增大,样本信息比较全面,此时应该选择算法本身性能较高的模型,即低偏差,高方差模型。
不同模型特点
线性模型
- 普通最小二乘法模型
- Lasso回归:普通+L1正则化项
- 岭回归:普通+L2正则化项
logistic回归
核心:通过sigmoid函数将线性模型拟合值转换为标签概率,并通过最小化交叉熵代价函数来获得最优系数
优点:
模型简单
输出值具有概率意义
缺点:
对于非线性决策边界的分类数据,效果一般;
为提高模型效果常需要对特征进行进一步非线性处理(连续变量离散化等)
受所有数据点影响,如果数据不平衡,要先进行平衡数据处理;
适用场景:
需要容易解释(系数代表特征对结果影响程度),
问题针对构造的特征线性可分,
构造的特征基本线性相关
常见于信贷风控,点击率(ctr)预估等
支持向量机SVM
核心:在约束条件下(无正则化,正则化),最大化支持向量所决定的超平面宽度
优点:
在许多数据集表现优秀
核函数解决线性不可分问题
可有效解决高维度特征的数据集
从支持向量角度:
(1)不受一类数据点影响,只受支持向量的影响
(2)决策超平面只受支持向量决定,计算复杂度取决于支持向量个数,不取决于维数,避免“维数爆炸”
缺点:
要求较高的内存需求和繁琐的调参,不适用于大数据量数据集
核函数难以确定,一般靠经验
数据处理要求
适用场景:
在许多数据集均有较好表现,‘无脑硬刚算法’,
尤其是针对样本点聚集在决策边界附近的数据集,
常用于文本分类,人脸识别
小样本,非线性,高维数据集
决策树
核心:if-else型,根据不同特征划分数据集
优点:
对数据分布无要求,无任何假设,无论数据集是否线性可分
”if-else”规则便于解读与理解
缺点:
结果不稳健,改变少量特征,或数值型数据微小变化就可以改变算法输出标签
容易过拟合
适用场景:需要可解释性强,非数值型数据,但是很少单用决策树
最近邻KNN
核心:根据距离最近的样本决定预测样本类型
优点:简单,对异常值不敏感
缺点:
样本不平衡问题影响较大,
要求的存储空间大,计算复杂度高
适用场景:需要可解释性强(比如推荐算法),少量数据和大量低维数据
随机森林 / 极端随机树
核心:多棵“好而不同”的决策树投票,降低模型方差角度提高模型效能
优点:
对数据分布没有任何假设,无论数据集是否线性可分(连续/不连续等,不需要规范化)
不需要太多调参就可以获得较好的准确度,克服了决策树易受攻击的缺点
缺点:容易过拟合
适用场景:
数据维度相对较低(几十维),同时对准确性有较高要求时,
基本上不知道什么方法时都可以尝试,‘无脑硬刚算法’,
常见于搜索排序和相关性
GBM / XGBoost
核心:下一个学习器针对上一个学习器预测结果(预测残差)进行残差预测,[adaboost:下一个学习器针对上一个学习器分类错误样本加大权重,并预测],从减小模型偏差角度提高模型效果(有针对改进”偏科“现象)
适用场景:
在大多数数据集表现良好,‘无脑硬刚算法’,
常见于搜索排序和相关性
朴素贝叶斯
核心:条件概率公式+特征相互独立,根据样本先验概率,及似然函数,计算样本后验概率
优点:算法简单
缺点:
要求特征间相关性小
需要各类先验概率
适用场景:
需要可解释性强,
输入的特征重要性相等,特征间相关性较小
常见垃圾邮件过滤