python分类算法评估模型_Python机器学习(sklearn)——分类模型评估与调参总结(下)...-程序员宅基地

技术标签: python分类算法评估模型  

21.集成方法有随机森林(random forest)和梯度提升树(gradient boosted decision tree)GBDT

随机森林中树的随机化方法有两种:

(1)通过选择用于构造树的数据点

构造随机森林需要确定用于构造的树的个数

为了确保树与树之间的区别,对每棵树的数据进行自助采样

从样本数据中有放回的多次抽取(一个样本可能被抽取多次),抽取创建的新数据集要和原数据集大小相等(数据数量相同)

(2)通过选择每次划分测试集的特征

在每个节点处,算法随机选择特征的一个子集,并对其中一个特征寻找最佳测试,而不是对每个节点都寻找最佳测试。

使用参数max_features, 如果max_features= n_features,则每次考虑所有特征,即第二种随机性没用上

当max_features较大,随机森林中每棵树都会很相似(因为采用的特征基本相同)

如果max_features较小,树的差异较大,为了很好的拟合数据,每棵树的深度都应该较大。

RandomForestClassifier(n_estimators = 5,random_state = 2)#五棵树的随机森林

随机森林比单独一棵树的过拟合都要小,实际应用中,我们会用很多树(通常几百上千),从而达到决策边界更平滑的效果

一般,随机森林给出的特征重要性比单科决策树给出的可靠。

多核CPU可以设置参数n_jobs = -1来使用计算机的所有内核计算

设置不同的随机状态(或者不设置random_state参数)可以彻底改变构建的模型

如果希望结果重现,固定random_state

对于高维稀疏数据(例如文本数据)随机森林常常表现不佳,使用线性模型更为合适

随机森林需要调节的重要参数有n_estimators和max_features,还包括预剪枝选项(如max_depth)

n_estimators总是越大越好(时间内存允许的话)

max_features决定每棵树的随机性大小,较小可以降低过拟合,一般使用默认值

分类时默认值为sqrt(n_features)

对于回归默认值是n_features

22.梯度提升回归树(梯度提升机)

梯度提升采用连续的方式构造树,每棵树都试图纠正前一棵树的错误。

梯度提升树背后的主要思想是合并许多简单的模型(在这个语境中叫做弱学习器),比如深度较小的树

每棵树只能对部分数据作出好的预测,所以添加更多的树可以不断迭代提高性能

除了预剪枝和随机森林里的树的数量之外,梯度提升树的另一个重要参数是学习率(learning_rate)

用于控制每棵树纠正前一棵树错误的强度,通过增大learning_rate或n_estimators都会增加模型的复杂度

降低树的最大深度和学习率都能降低过拟合

GradientBoostingClassifier(random_state=0, max_depth=1, learning_rate=0.01)

随机森林的n_estimators越大越好

梯度提升树的n_estimators提高,模型复杂,会导致过拟合

梯度提升树的max_depth通常设置的很小,一般不超过5

由于梯度提升和随机森林两种方法在类似的数据上表现的都很好

因此一种常用的方法是先尝试随机森林,它的鲁棒性很好,如果随机森林效果很好,但是预测时间太长,选择梯度提升

梯度提升树的需要仔细调参,训练时间也长,也不适合高维稀疏数据

23.对于SVM,将数据映射到更高维空间中有两种常用方法:

(1)多项式核;在一定阶数内计算原始特征所有可能的多项式(例如features12, features25)

(2)径向基函数(RBF) 核,也叫高斯核。它考虑所有阶数的所有可能的多项式,但阶数越高,特征的重要性越小。

24.SVM调参

gamma参数,控制高斯核的宽度,它决定了点与点之间“靠近”是指多大的距离。C参数是正则化参数,与线性模型类似

它限制每个点的重要性

从小增大gamma(0.1-10),它认为点与点之间的距离不断增大,从决策边界平滑往不平滑过渡,模型越加复杂

这两个参数强烈相关,可以同时调节

C从小到大,决策边界越来越不平滑

默认情况下:C=1,gamma=1/n_features

SVM数据需要预处理(常用的是缩放到0~1之间)

常用的是(x-xmin)/(xmax-xmin)

SVM的缺点:需要预处理和小心调参,SVM模型很难检验,也难以解释

25.神经网络的非线性函数常用校正非线性(relu)或正切双曲线(tanh)

relu截断小于0的值

tanh在输入值小时接近-1,较大时接近1

有了这两种非线性函数,神经网络可以学习比线性模型复杂得多的函数

多层感知机(MLP ),也称为普通前馈神经网络,默认时,每层使用100个隐节点

默认的是relu

MLPClassifier(solver=’lbfgs’,random_state=0,hidden_layer_sizes=[10])

10层

如果是10层且每层10个隐节点

则hidden_layer_sizes=[10,10]

MLPClassifier中调节L2惩罚的参数是alpha(与线性回归模型相同),默认值很小(弱正则化)

控制神经网络的复杂度的方法有很多种,隐层的个数、每个隐层中的单元个数与正则化(alpha)

神经网络要求输入特征的变化范围相似,最理想的情况是均值为0,方差为1

我们必须对数据进行缩放达到这一要求

StandardScaler可以达到数据处理要求

迭代次数参数MLPClassifier(max_iter = 1000,random_state=0)

功能强大的神经网络经常需要很长的训练时间

神经网络的调参常用方法是,首先创建一个大到足以过拟合的网络,确保这个网络可以对任务进行学习

然后通过缩小网络或者增大alpha来增强正则化,从而提高泛化性能

如何学习模型或用来学习参数的算法,由solver参数设定

默认为’adam’,在大多数情况下效果很好,但是对数据的缩放相当敏感(需要将数据缩放为均值为0,方差为1)

‘lbfgs’的鲁棒性很好,大型数据集和大型模型上时间较长

更高级的’sgd’

初学者建议使用前两种

sklearn中有两个函数可用于获取分类器的不确定性估计:decision_function和predict_proba

大多数分类器都至少有其中一个函数,很多分类器这两个都有

predict_proba的结果是:

每行的第一个元素是第一个类别的估计概率,第二个元素是第二个类别的估计概率

predict_proba输出的是概率,在0~1之间,两个类别的元素之和始终为1

decision_function每一列对应每个类别的确定度分数,分数越高类别的可能性越大

26.如何选择合适的模型:

KNN

适用于小型数据集,容易解释

线性模型

非常可靠的首选算法,适用于非常大的数据集,也适合高维数据

朴素贝叶斯

只适用于分类问题,比线性模型速度还快,适用于非常大的数据集或者高维数据

精度通常要低于线性模型

决策树

速度很快,不需要数据放缩,可以可视化,容易解释

随机森林

几乎总是比单棵决策树表现好,鲁棒性好,不需要数据放缩,不适用于高维数据

梯度提升决策树

精度通常比随机森林略高,但是训练速度比随机森林慢,预测速度比随机森林快,需要的内存少,比随机森林需要调的参数多

SVM

对于特征含义相似的中等大小的数据集很强大,需要数据缩放,对参数敏感

神经网络

可以构建非常复杂的模型,特别是大型数据集,对数据缩放敏感,对参数选取敏感,大型网络需要很长的训练时间

面对数据集,先从简单的模型开始,比如线性回归、朴素贝叶斯、KNN,看看能得到的结果

对数据理解加深后,可以考虑更复杂的模型

如随机森林、梯度提升决策树、SVM、神经网络

原文发布时间为:2018-07-22

本文作者: 王大伟

本文来自云栖社区合作伙伴“ Python爱好者社区”,了解相关信息可以关注“ Python爱好者社区”

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39935388/article/details/110767071

智能推荐

【JZOJ5262】【GDOI2018模拟8.12】树(DP,性质题)_gdoi2018省选模拟树-程序员宅基地

文章浏览阅读460次。DescriptionSolution首先我们可以知道两个性质:1、路径u-v和路径v-w可以合并为路径u-w;2、路径u1-v1加路径u2-v2和路径u1-v2加路径u2-v1是等价的(就是起始点和终点可以互换) 那么知道这些性质之后就很好做了。我们只用知道每个点多少次做起点和多少次做终点。 我们设f[i]表示满足i子树的需求i上的值要是多少。 那么枚举i的所有儿子,判断a[i]-f[i],_gdoi2018省选模拟树

[PTA]7-65 字符串替换 (15 分)含思路_字符串替换pta-程序员宅基地

文章浏览阅读2.8k次,点赞4次,收藏28次。我们进行简单的运算即可实现倒序。_字符串替换pta

linux网络设置_linux如何开启网络连接-程序员宅基地

文章浏览阅读4k次,点赞5次,收藏22次。traceroute 180.101.50.188————————测试到180.101.50.188有多少个网关。vim /etc/sysconfig/static-routes——————————修改。netstat -antp | grep 22———————查看端口号22的相关信息。systemctl restart network————————————重启。systemctl restart network————————重新启动。_linux如何开启网络连接

pr中,视频导入后,视频画面大小显示不完整应该如何解决?_avi视频到pr里会放大-程序员宅基地

文章浏览阅读4w次,点赞23次,收藏6次。本人pr小白,今天编辑视频时候遇到了问题,也解决了,所以分享记录一下。问题一视频下面原来有字幕的,可是导入的视频变大了,现在看不到了怎么办?还有就是,频导入之后画质好像变糊了又是为什么?解决:将箭头放到要编辑的视频那里,右击,然后点击设为帧大小这样完整的视频就出来了。问题二如果视频模糊,就是序列设置的不对 要先新建序列一般的都是1920×1080本人博客:https://blog.csdn.net/weixin_46654114本人b站求关注:https://space.bi_avi视频到pr里会放大

apollo中配置map,list_apollo list-程序员宅基地

文章浏览阅读1.8k次。注:key可以不用引号,value使用单引号,但key中存在_或-等一些特殊字符时,需要加上引号,避免出错。注:key可以不用引号,value也不用引号,但key中存在_或-等一些特殊字符时,需要加上引号,避免出错。注:使用@Value注解获取,apollo中未配置时默认为null。注:使用@Value注解获取,apollo中未配置时默认为null。2.apollo中的Map配置。1.apollo中的Map配置。注:使用逗号分隔,不用引号。..._apollo list

比最快的超级计算机快一百万亿倍!中国科学家实现“量子计算优越性”里程碑_中国科学院比马普所强-程序员宅基地

文章浏览阅读4.4k次,点赞22次,收藏12次。本文来自:中国科学技术大学公众号北京时间12月4日国际顶尖杂志《Science》刊发了中国科学技术大学潘建伟、陆朝阳等组成的研究团队的一项重磅研究成果让我们一起来看看吧!中国科学家实现“量子计算优越性”里程碑中国科学技术大学潘建伟、陆朝阳等组成的研究团队与中科院上海微系统所、国家并行计算机工程技术研究中心合作,构建了76个光子100个模式的量子计算原型机“九章”,实现了具有实用前景的“高斯玻色取样”任务的快速求解。根据现有理论该量子计算系统处理高斯玻色取样的速度比目前最快的超级计算机快一百万._中国科学院比马普所强

随便推点

C++ 数据结构——堆排序_数据结构堆排序c++-程序员宅基地

文章浏览阅读93次。/* 堆排序 */#include <iostream>using namespace std;int *data;void Sift(int k,int last){ int i,j,temp; i=k;j=2*i+1; while (j<=last) { if(j<last&&data[j]<data[j+1]) j++; if(data[i]>data[j]) _数据结构堆排序c++

debian 11 还不能进入命令行界面,按照网上的改也不行。_debian 无法打开命令行窗口-程序员宅基地

文章浏览阅读952次。再查查资料,有没有DEBIAN问题解答中心呢?_debian 无法打开命令行窗口

2345王牌输入法的卸载_89e1d5c2-a068-44b6-b820-f8406c8a4706-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏10次。2345王牌输入法的卸载输入法卸载了也还有2345这个流氓输入法,研究3个小时找到了2345输入法在语言栏的根源所在,希望能帮到你windows键加R键打开运行,输入regedit 然后ctrl+F键 搜索下面路径,打开后就会看见语言栏里的输入法了,直接删除加粗这个文件夹,就删除了HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\CTF\TIP{0055AAB0-EACB-46DB-9BB4-1B97FC046D02}\LanguageProfile\0x00000804\ _89e1d5c2-a068-44b6-b820-f8406c8a4706

Android R setenforce 实现_android setenforce-程序员宅基地

文章浏览阅读2.2k次。1、开机启动system/core/init/main.cppint main(int argc, char** argv) {#if __has_feature(address_sanitizer) __asan_set_error_report_callback(AsanReportCallback);#endif if (!strcmp(basename(argv[0]), "ueventd")) { return ueventd_main(argc,._android setenforce

app_process: zygote启动(3)_app_process zygote-程序员宅基地

文章浏览阅读485次。涉及源码android-8.0.0_r1\system\core\rootdir\init.rcandroid-8.0.0_r1\system\core\rootdir\init.*.rcandroid-8.0.0_r1\frameworks\base\core\java\com\android\internal\os\Zygote.javaandroid-8.0.0_r1\frameworks\base\core\java\com\android\internal\os\ZygoteInit.ja_app_process zygote

网络策略控制集群内部通信-networkpolicy_networkpolicy用法-程序员宅基地

文章浏览阅读8.7k次。默认情况下,Kubernetes集群网络没任何网络限制,Pod可以与任何其他pod通信,在某些场景下就需要进行网络控制,减少网络攻击面,提高安全性,这就会用到网络策略。需求:test命名空间下所有pod可以互相访问,也可以访问其他命名空间pod,但其他命名空间pod不能访问test命名空间pod。允许prod命名空间中的pod访问,及其他命名空间中的pod标签为app=client1的pod访问。需求:允许其他命名空间test命名空间指定pod,pod标签app=web。测试外部pod访问(拒绝访问)_networkpolicy用法