机器学习常用的分类器比较

传统的机器学习的监督学习分类分类和回归,分类是争对离散的数据,而回归是争对连续的数据,在数据预处理好的基础上要对数据进行预测,通常采用CV交叉验证来进行模型评价和选择。这篇文章通过连续的数据结合sklearn库对各种回归器做一比较:

1.linear regression

缺点:顾名思义,linear regression是假设数据服从线性分布的,这一假设前提也限制了该模型的准确率,因为现实中由于噪声等的存在很少有数据是严格服从线性的。

优点:基于这种假设,linear regression可以通过normal equation求闭合解的方式求得y_predict

2.logistic regression

缺点:从线性回归衍生而来,将线性的值域通过sigmoid函数压缩在(0,1)范围内,缺点同linear regression,且也是要求数据是无缺失的

优点:有两种方式求解,精确的解析解和SGD算法估计,在要求准确性时使用解析解,在要求时间效率时使用SGD 迭代

3.SVM(支持向量机 )

缺点:计算代价比较大,SVM是将低维无序杂乱的数据通过核函数(RBF,poly,linear,sigmoid)映射到高维空间,通过超平面将其分开

优点:SVM是通过支撑面做分类的,也就是说不需要计算所有的样本,高维数据中只需去少量的样本,节省了内存

在sklearn默认配置中三种核函数的准确率大概是:RBF>poly>linear

4.Naive Bayes

缺点:这一模型适合用在文本样本上,采用了朴素贝叶斯原理假设样本间是相互独立的,因此在关联比较强的样本上效果很差

优点:也是基于其独立的假设,概率计算大大简化,节省内存和时间

5.K近邻

缺点:k需要人为设定,且该算法的复杂度很高

优点:“近朱者赤,近墨者黑”KNN是无参数训练的模型

6.决策树(DT)

缺点:在训练数据上比较耗时

优点:对数据要求度最低的模型,数据可以缺失,可以是非线性的,可以是不同的类型,,最接近人类逻辑思维的模型,可解释性好

7.集成模型(众志成城模型)

random forest:随机抽取样本形成多个分类器,通过vote,少数服从多数的方式决定最终属于多数的分类器结果,分类器之间是相互去之间关联的

gradient boost:弱弱变强,最典型的代表是adaboost(三个臭皮匠,顶个诸葛亮),弱分类器按照一定的计算方式组合形成强的分类器,分类器之间存在关联,最终分类是多个分类器组合的结果

一般地,GB>RF>DT

但是集成模型缺点在于受概率的影响,具有不确定性


以上是常用的回归分类器的比较,在知道各种分类器的优缺点之后就可以使用正确的分类器完成自己的数据处理,如下表是通过计算各类分类器的残差来对比同一任务不同分类器之间的好坏,可以看出来在sklearn默认参数的前提下,准确率排序是:集成模型>DT>SVM>KNN>Linear

分类回归器导入python库命令导入函数命令残差(%)
linear regressionfrom sklearn.linear_model import LinearRegressorlr = LinearRegressor()5.223
SGD regression penalty L2from sklearn.linear_model import SGDRegressorSGDR = SGDRegressor("penalty = l2")5.780
SGD regression penalty L1SGDR = SGDRegressor("penalty = l1")5.765
SVR(rbf kernel)from sklearn .svm import SVR
(Penalty parameter :C,Kernel coefficient :gamma)
SVR = SVR(kernel="rbf")0.627
SVR(sigmoid kernel)SVR = SVR(kernel="sigmoid ")82.507
SVR(poly kernel)SVR = SVR(kernel="poly")20.862
SVR(linear kernel)SVR = SVR(kernel="linear")6.451
KNN(n=5,weights=uniform)from sklearn.neighbors import KNeighborsRegressorknn = KNeighborsRegressor(n=5,weights="uniform")0.731
KNN(n=5,weights=distance)knn = KNeighborsRegressor(n=5,weights="distance")1.087
DTfrom sklearn.tree import DecisionTreeRegressorDT = DecisionTreeRegressor()0.447
Random forestfrom sklearn.ensemble import RandomForestRegressorRF = RandomForestRegressor()0.270
Extra Treesfrom sklearn.ensemble import ExtraTreesRegressorET = ExtraTreesRegressor()0.246
Gradient Boostingfrom sklearn.ensemble import GradientBoostingRegressorGB = GradientBoostingRegressor()0.284

原文地址 :https://blog.csdn.net/july_sun/article/details/53088673

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值