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 ...
随机推荐
- pycharm 安装第三方库报错:AttributeError: 'module' object has no attribute 'main'
pip升级到 10.0.1 之后 老版的pycharm 使用pip安装第三方库的时候会报错,报错如上图所示: 其主要原因是 新版的 pip 更改了 部分api 将其中 pip.main() 改为 pi ...
- spring cloud(断路器——初学四)
在分布式架构中,当某个服务单元发生故障后,能通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待. Netflix Hystrix 在Spring Cloud中使用了Hystrix 来实 ...
- Android应用系列:双击返回键退出程序
前言 有一个很古老的应用技巧,一直被各种大大小小的app用得乐此不疲,那就是双击返回键退出程序.今天就写写它的实现代码,非常简单而且实用. 正文 双击返回键退出程序,一般有两种实现思路,一种是用一个布 ...
- div盒子水平垂直居中方法
文章转载自:div盒子水平垂直居中的方法 - 雪明瑶 这个问题比较老,方法比较多,各有优劣,着情使用. 一.盒子没有固定的宽和高 方案1.Transforms 变形 这是最简单的方法,不仅能实现绝对居 ...
- MongoDB 常用的几大GUI工具
MongoDB 常用的几大GUI工具 MongoDBCompass (官方的连接工具),免费的,界面简洁,不支持 sql 查询,支持性能监控.支持在三大平台 Windows .Mac .Linux 上 ...
- process_begin: CreateProcess(NULL,......) make (e=87): 参数错误。
在编译 trinity-android 的过程中,总是报 process_begin: CreateProcess(NULL,......) make (e=87): 参数错误 原因是.MK文件中包含 ...
- JAVA中ArrayList与LinkedList的区别以及对应List使用foreach与使用下标遍历的效率问题
近期在做一个对接京东的电商平台,所以对各个地方的效率考虑的比较多,今天深挖了一下ArrayList与LinkedList的区别以及对应List使用foreach与使用下标遍历的效率问题,首先说一下两种 ...
- 正则表达式,re模块
一,正则表达式 正则表达式是对字符串操作的一种逻辑公式,我们一般使用正则表达式对字符串进行匹配和过滤,使用正则的优缺点,我们可以去http://tool.chinaz.com/regex/进行测试. ...
- String,StringBuilder, StringBuffer
String:适用于少量的字符串操作的情况 StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况 StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
- NLog基础配置
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nl ...