sklearn中各种分类器回归器都适用于什么样的数据呢?
链接:https://www.zhihu.com/question/52992079/answer/156294774
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
(sklearn官方指南:Choosing the right estimator)
0)选择合适的机器学习算法
All models are wrong, but some models are useful. — George Box (Box and Draper 1987)
根据No free lunch theorem,在机器学习中,不存在一个在各方面都最好的模型/算法,因为每一个模型都或多或少地对数据分布有先验的统计假设。取所有可能的数据分布的平均,每个模型的表现都一样好(或者一样糟糕)。因此,我们需要针对具体的问题,找到最好的机器学习算法。
1)数据分析(Exploratory Data Analysis)
在选择具体的算法之前,最好对数据中每一个特征的模式和产生原理有一定的了解:
- 特征是连续的(real-valued)还是离散的(discrete)?
- 如果特征是连续的,它的直方图(histogram)长什么样?它的mean和variance是如何分布的?
- 如果特征是离散的,不同的特征值之间是否存在某种顺序关系?例如,豆瓣上从1星到5星的打分,虽然是离散数据,但有一个从低到高的顺序。如果某个特征是“地址”,则不太可能存在一个明确的顺序。
- 特征数据是如何被采集的?
2)特征工程(Feature Engineering)
特征工程(根据现有的特征,制造出新的、有价值的特征)决定了机器学习能力的上限,各种算法不过是在逼近这个上限而已。不同的机器学习算法一般会有其对应的不同的特征工程。在实践中,特征工程、调整算法参数这两个步骤常常往复进行。
3)由简至繁:具体算法的选择
sklearn包括了众多机器学习算法。为了简化问题,在此只讨论几大类常见的分类器、回归器。至于算法的原理,sklearn的文档中往往有每个算法的参考文献,机器学习的课本也都有所涉及。
3.1)General Linear Models
最开始建立模型时,我个人一般会选择high bias, low variance的线性模型。线性模型的优点包括计算量小、速度快、不太占内存、不容易过拟合。
常用线性回归器的有Ridge(含有L2正则化的线性回归)和Lasso(含有L1正则化的线性回归,自带特征选择,可以获得sparse coefficients)。同时,如果对于超参数没有什么特别细致的要求,那么可以使用sklearn提供的RidgeCV和LassoCV,自动通过高效的交叉验证来确定超参数的值。
假如针对同一个数据集X(m samples * n features),需要预测的y值不止一个(m samples * n targets),则可以使用multitask的模型。
线性分类器中,最好用的是LogisticRegression和相应的LogisticRegressionCV。
SGDClassifier和SGDRegressor可以用于极大的数据集。然而,如果数据集过大的话,最好从数据中取样,然后和小数据一样分析建模,未必一开始就要在整个数据集上跑算法。
3.2)Ensemble Methods
ensemble能够极大提升各种算法,尤其是决策树的表现。在实际应用中,单独决策树几乎不会被使用。Bagging(如RandomForest)通过在数据的不同部分训练一群high variance算法来降低算法们整体的variance;boosting通过依次建立high bias算法来提升整体的variance。
最常用的ensemble算法是RandomForest和GradientBoosting。不过,在sklearn之外还有更优秀的gradient boosting算法库:XGBoost和LightGBM。
BaggingClassifier和VotingClassifier可以作为第二层的meta classifier/regressor,将第一层的算法(如xgboost)作为base estimator,进一步做成bagging或者stacking。
我个人比较倾向于使用这一类模型。
3.3)支持向量机(SVM)
SVM相关的知识可以参考Andrew Ng教授在Coursera上的CS229(有能力的可以去看youtube或者网易公开课上的原版CS229)。svm的API文档很完善,当一个调包侠也没有太大困难。不过在大多数的数据挖掘竞赛(如kaggle)中,SVM的表现往往不如xgboost。
3.4)神经网络(Neural Network)
相比业内顶尖的神经网络库(如TensorFlow和Theano),sklearn的神经网络显得比较简单。个人而言,如果要使用神经网络进行分类/回归,我一般会使用keras或者pytorch。
链接:https://www.zhihu.com/question/52992079/answer/132946166
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
平时也是sklearn党,方法也就是这些。建议你自己写一个函数,调用不同分类方法用默认参数去做cross-validation,然后print一下score输出或者画一下ROC曲线啥的。见识的数据集多了,经验丰富了,概率统计学的好点,水平也就上去了…我也是还在练级的过程中。
————————————————
以下是原答案:
谢邀。近期有两个比赛,比较忙,所以只大致讲一下,为题主更深入研究提供一点方向。
选择分类/回归器是基于数据特征的。
举个例子,比如,在预测某种商品是否被某位顾客购买时,预测的target是该顾客是否购买某种商品, 也就是true or false(也就可以用1和0表示),二分类。
然后,能够用来分析的训练集信息,除开targets之外,还有对应顾客的年龄、性别、是否有陪伴者、顾客的衣着样式、商品的价格、商品的种类、商品的品牌等等。
我们观察这些特征,年龄是一些整数,并且这些整数之间的间隔是有意义的——而对于顾客的衣着样式,如果它也是一些整数,像0,1,2,3,4…这样的。
不同整数表示不同的样式,那么这些整数之间的间隔,则缺乏一个实际意义的解释,因为,这些顺序不过是对于"衣着样式"中像"西式正装"、"休闲"这样的词的一个确定方式的排序。你想啊,对于两个样本,在其他特征一致的情况下,年龄值上存在一点小差异,我们推测这两个样本还是很可能有相同的表现(target);
但是,如果在衣着样式的值上有一点小差异,我感觉时髦的年轻人喜欢高裤脚,那如果高裤脚是30,而高裤腰带是31,你觉得这两者的target能一样吗?
而对于几个特征张成的欧式空间,有些算法倾向于将它切割成几块,每一块具有相似的性质,但是高裤腰带和高裤脚显然是相似不了的。
像SVM这样的,基于分割空间的方法,遇到上述“衣着样式”这种连续性非常不好的特征,它的误差就可能很大,因为有异常点(相互靠近的样本表现差异大)。
而像基于树模型的方法,决策时并不关心函数(从特征张成的空间到target取值的数集{0,1}的函数,为方便记为F)的连续性,而考虑的是如何在每个特征上做合适的划分,这样一来,就会有效地规避分割空间带来的误差(虽然实际上,它也分割了空间,但它的理论基础不是这个)。
同时,对于特征主次分明的情况,树模型也通常带来良好的效益。
如果非要用线性模型来分类,可以将导致F不连续的特征进行哑编码,哑编码可以将一些非线性的特征变得“更线性”,代价是带来了稀疏性,这在自然语言处理中很常见。
上面只是分析特征并进行分类器选择的部分过程。题主可以看一下,应该会有启发。
再扯一点人生的经验:
1.稀疏的大规模数据:SGD和逻辑回归。
2.归一化的实数数据:SVM
3.预处理做的不好的数据,弱分类器集成。
4.明显的概率分布问题:贝叶斯(用的少,但在有大语料库的文本处理问题中比较有效)。
5.神经网络relu, relu, relu←_←
sklearn中各种分类器回归器都适用于什么样的数据呢?的更多相关文章
- 决策树在sklearn中的实现
1 概述 1.1 决策树是如何工作的 1.2 构建决策树 1.2.1 ID3算法构建决策树 1.2.2 简单实例 1.2.3 ID3的局限性 1.3 C4.5算法 & CART算法 1.3.1 ...
- SKlearn中分类决策树的重要参数详解
学习机器学习童鞋们应该都知道决策树是一个非常好用的算法,因为它的运算速度快,准确性高,方便理解,可以处理连续或种类的字段,并且适合高维的数据而被人们喜爱,而Sklearn也是学习Python实现机器学 ...
- 使用struts2中默认的拦截器以及自定义拦截器
转自:http://blog.sina.com.cn/s/blog_82f01d350101echs.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Acti ...
- sklearn中调用PCA算法
sklearn中调用PCA算法 PCA算法是一种数据降维的方法,它可以对于数据进行维度降低,实现提高数据计算和训练的效率,而不丢失数据的重要信息,其sklearn中调用PCA算法的具体操作和代码如下所 ...
- Sklearn中的回归和分类算法
一.sklearn中自带的回归算法 1. 算法 来自:https://my.oschina.net/kilosnow/blog/1619605 另外,skilearn中自带保存模型的方法,可以把训练完 ...
- 第十三次作业——回归模型与房价预测&第十一次作业——sklearn中朴素贝叶斯模型及其应用&第七次作业——numpy统计分布显示
第十三次作业——回归模型与房价预测 1. 导入boston房价数据集 2. 一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示. 3. 多元线性回归模型,建立13个变量与房价之间的预测模 ...
- 『Kaggle』Sklearn中几种分类器的调用&词袋建立
几种分类器的基本调用方法 本节的目的是基本的使用这些工具,达到熟悉sklearn的流程而已,既不会设计超参数的选择原理(后面会进行介绍),也不会介绍数学原理(应该不会涉及了,打公式超麻烦,而且近期也没 ...
- (数据科学学习手札25)sklearn中的特征选择相关功能
一.简介 在现实的机器学习任务中,自变量往往数量众多,且类型可能由连续型(continuou)和离散型(discrete)混杂组成,因此出于节约计算成本.精简模型.增强模型的泛化性能等角度考虑,我们常 ...
- sklearn中模型评估和预测
一.模型验证方法如下: 通过交叉验证得分:model_sleection.cross_val_score(estimator,X) 对每个输入数据点产生交叉验证估计:model_selection.c ...
随机推荐
- python异步编程--回调模型(selectors模块)
目录 0. 参考地址 1. 前言 2. 核心类 3. SelectSelector核心函数代码分析 3.1 注册 3.2 注销 3.3 查询 4. 别名 5. 总结 6. 代码报错问题 1. 文件描述 ...
- Python 解析har 文件将域名分类导出
前言 作为程序员平时主要是使用 shadowsocks 作为代理工具的.shadowsocks 有个很明显的优点儿就是可以设置白名单和黑名单.白名单是会走shadowsocks的自动代理模式. 遇到的 ...
- 深入C#并行编程(1) -- 了解线程
一.操作系统用进程(Processe)分隔正在执行的程序,用线程(Thread)作为操作系统分配处理器时间的基本单元,进程上下文中可以运行多个线程,进程的所有线程共享其虚拟地址空间,所有线程均可执行程 ...
- linux centos7 root密码重置
转:http://blog.chinaunix.net/uid-21209618-id-4738916.html 分类: LINUX 三年左右没接触linux技术工作,忘记的有很多.不知该怎么去运用. ...
- Python装饰器举例分析
概述 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 我们要需要一个能测试函数运行时间的decorator,可以定义如 ...
- [转]Material使用08 MdDialogModule、MdAutocompleteModule
本文转自:https://www.cnblogs.com/NeverCtrl-C/p/8125346.html 1 MatDialog 1.1 简要描述 MdDialog是一个服务,可以利用它来打开一 ...
- [转]JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐
本文转自:https://www.cnblogs.com/landeanfen/p/5461849.html#_label3 阅读目录 一.时间组件 1.效果展示 2.源码说明 3.代码示例 二.自增 ...
- 移动端地区选择控件mobile-select-area
由于之前的[js开源组件开发]js手机联动选择地区仿ios 开源git 很受欢迎,于是我又对其进行了一些优化,包括可选的范围变大了,添加了默认空首地址的功能,也添加了更多api参数,首先我们先来看下这 ...
- [PHP]算法-归并排序的PHP实现
<?php //归并排序 function merge(&$A,$left,$mid,$right,$temp){ //7.左堆起始 $i=$left; //8.右堆起始 $j=$mid ...
- Ubuntu下redis允许外部链接
原文地址: https://blog.csdn.net/a150827/article/details/51352395 redis在ubuntu安装后默认是只有本地访问,需要别的ip访问我们需要修改 ...