各大常用算法应用场景及优缺点分析

关于模型评估

Error = Bias(偏差) + Variance(方差)。这里的Error可以理解为模型的预测错误率,是有两部分组成的,一部分是由于模型太简单而带来的估计不准确的部分(Bias),另一部分是由于模型太复杂而带来的更大的变化空间和不确定性(Variance)。
当模型复杂度上升的时候,偏差会逐渐变小,而方差会逐渐变大。

算法的选择

如果特征的数量和观测样本特别多,那么当资源和时间充足时(这个前提很重要),使用SVM不失为一种选择。

通常情况下:【XGBOOST>=GBDT>=SVM>=RF>=Adaboost>=Other…】
逻辑回归为基础,其他算法看提升效果。

Scikit-Learn可以检测到你尝试使用二元分类算法进行多类别分类任务,它会自动运行OvA (SVM除外,它会使用OvO)。
通过该方法的decision_function()方法,它会返回多个预测结果,每个类别1个。例如some_scores = sgd_clf.decision_function(X_train[0]) ,然后通过索引可知预测值location = np.argmax(some_scores); sgd_clf.classes; sgd_clf.classes[location]

如果想要强制执行Sciket-Learn使用一对一或者一对多策略,可以使用OneVsOneClassifier 或OneVsRestClassifier类。

from sklearn.multiclass import OneVsOneClassifier
ovo_clf = OneVsOneClassifier(SGDClassifier(random_state=42))
ovo_clf.fit(X_train, y_train)
ovo_clf.predict(X_test)

print(ovo_clf.estimators_)  #查看有几个分类器

算法优缺点分析

逻辑回归 Logistic Regression

需要做归一化处理。
优点:
实现简单,广泛的应用于工业问题上;
分类时计算量非常小,速度很快,存储资源低;
简单易于理解,直接看到各个特征的权重。
便利的观测样本概率分数,动态调整分类阀值;
对逻辑回归而言,多重共线性并不是问题,它可以结合L2正则化来解决该问题;

缺点:
当特征空间很大时,逻辑回归的性能不是很好;
容易欠拟合,一般准确度不太高
不能很好地处理大量多类特征或变量;
只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分;
对于非线性特征,需要进行转换;

XGBoost

优点:
高准确率高效率高并发
支持自定义损失函数
既可以用来分类又可以用来回归
可以像随机森林一样输出特征重要性,因为速度快,适合作为高维特征选择的一大利器
在目标函数中加入正则项,控制了模型的复杂程度,可以避免过拟合
支持列抽样,也就是随机选择特征,增强了模型的稳定性
对缺失值不敏感,可以学习到包含缺失值的特征的分裂方向

缺点:
不能处理类别型特征;
时间复杂度很高。xgBoosting采用预排序,在迭代之前,对结点的特征做预排序,遍历选择最优分割点,数据量大时,贪心法耗时,LightGBM方法采用histogram算法,占用的内存低,数据分割的复杂度更低;
xgBoosting采用level-wise生成决策树,同时分裂同一层的叶子,从而进行多线程优化,不容易过拟合,但很多叶子节点的分裂增益较低,没必要进行跟进一步的分裂,这就带来了不必要的开销;LightGBM采用深度优化,leaf-wise生长策略,每次从当前叶子中选择增益最大的结点进行分裂,循环迭代,但会生长出更深的决策树,产生过拟合,因此引入了一个阈值进行限制,防止过拟合.

LightGBM

优点:
极大的提升了计算效率;
模型精度高;
支持类别特征;
高效并行

缺点:
容易过拟合

随机森林

优点:
对于很多数据集表现良好,精确度较高;
不容易过拟合,模型的泛化能力较强;
模型可以处理不平衡数据,平衡误差;
对缺失值、异常值不敏感;
可以处理高维数据,不同进行特征选择(特征子集是随机选择)
可得到变量的重要性排序;
既能处理离散型数据,也能处理连续型数据;可以同时处理分类和数值特征。
不需要归一化;
能够很好的处理缺失数据;
易并行化,训练模型时速度快,成并行化方式,即树之间相互独立
随机森林非常稳定,即使数据集中出现了一个新的数据点,整个算法也不会受到过多影响。
可以用来进行分类和回归任务;
即使没有超参数调整,大多数情况下也会带来好的结果。
随机森林有袋外数据(OOB),因此不需要单独划分交叉验证集。
相对Bagging能够收敛于更小的泛化误差。
可以处理多分类问题。

缺点:
当数据噪声比较大时,会产生过拟合现象;
对有不同取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响;
比决策树算法更复杂,计算成本更高。

决策树

优点:
不需要任何领域知识或参数假设。
计算简单,易于理解,可解释性强;
适合高维数据。短时间内处理大量数据,得到可行且效果较好的结果。
比较适合处理有缺失属性的样本;
能够处理不相关的特征;
能够同时处理数据型和常规性属性。
在相对短的时间内能够对大型数据源做出可行且效果良好的结果。

缺点:
容易发生过拟合(随机森林可以很大程度上减少过拟合);
忽略了数据之间的相关性;
对于那些各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征(只要是使用了信息增益,都有这个缺点,如RF)。
不支持在线学习。

朴素贝叶斯 NB

优点:
朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率。
对小规模的数据表现很好,能个处理多分类任务,适合增量式训练;
所需估计的参数少,对缺失数据不太敏感,算法也比较简单,常用于文本分类。

缺点:
假设属性之间相互独立,这往往并不成立。
需要计算先验概率;
分类决策存在错误率;
对输入数据的表达形式很敏感。
不能学习特征间的相互作用。

SVM支持向量机

优点:
可以解决小样本下机器学习的问题。
可以解决高维问题,即大型特征空间;超高维文本分类仍受欢迎。
能够处理非线性特征的相互作用;
无需依赖整个数据;
可以提高泛化能力;
需要对数据提前归一化,很多人使用的时候忽略了这一点,毕竟是基于距离的模型,所以LR也需要归一化
避免神经网络结构选择和局部极小的问题。

缺点:
对缺失数据敏感;
当观测样本很多时,效率并不是很高;内存消耗大,难以解释。
运行和调差略烦人。
一个可行的解决办法是模仿随机森林,对数据分解,训练多个模型,然后求平均,时间复杂度降低p倍,分多少份,降多少倍
对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数;

对于核的选择也是有技巧的(libsvm中自带了四种核函数:线性核、多项式核、RBF以及sigmoid核):
第一,如果样本数量小于特征数,那么就没必要选择非线性核,简单的使用线性核就可以了;
第二,如果样本数量大于特征数目,这时可以使用非线性核,将样本映射到更高维度,一般可以得到更好的结果;
第三,如果样本数目和特征数目相等,该情况可以使用非线性核,原理和第二种一样。
对于第一种情况,也可以先对数据进行降维,然后使用非线性核,这也是一种方法。

KNN 最近邻算法

一般情况下,在分类时较大的K值能够减小噪声的影响。但会使类别之间的界限变得模糊。一个较好的K值可通过各种启发式技术来获取,比如交叉验证。另外噪声和非相关性特征向量的存在会使K近邻算法的准确性减小。

优点:
理论成熟,思想简单,既可以用来做分类也可以用来做回归;
可用于非线性分类;
训练时间复杂度为O(n);
对数据没有假设,准确度高,对outlier不敏感;
支持多标签分类

缺点:
计算量大;
样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
需要大量的内存;
输出的可解释性不强。

K-Means聚类

优点:
算法简单,容易实现 ;
对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k< 算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。

缺点:
对数据类型要求较高,适合数值型数据;
可能收敛到局部最小值,在大规模数据上收敛较慢
K值比较难以选取;
对初值的簇心值敏感,对于不同的初始值,可能会导致不同的聚类结果;
不适合于发现非凸面形状的簇,或者大小差别很大的簇。
对于**”噪声”和孤立点数据敏感**,少量的该类数据能够对平均值产生极大影响。

Adaboost

过分关注分错的样本,而对正确分类的样本减少关注度.

优点:
adaboost是一种有很高精度的分类器。
可以使用各种方法构建子分类器,Adaboost算法提供的是框架。
当使用简单分类器时,计算出的结果是可以理解的,并且弱分类器的构造极其简单。
简单,不用做特征筛选。
不容易发生overfitting。

缺点:
对outlier比较敏感

神经网络

优点:
分类的准确度高;
并行分布处理能力强,分布存储及学习能力强,
对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系;
具备联想记忆的功能。

缺点:
神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值;
不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度;
学习时间过长,甚至可能达不到学习的目的。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值