作者:匿名用户
链接: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。

作者:NightyNight
链接:https://www.zhihu.com/question/52992079/answer/132946166
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

更新…题中问得是sklearn怎么用,我答案里的确没提到具体的sklearn…机器学习用什么语言用什么包不是关键。
平时也是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中各种分类器回归器都适用于什么样的数据呢?的更多相关文章

  1. 决策树在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 ...

  2. SKlearn中分类决策树的重要参数详解

    学习机器学习童鞋们应该都知道决策树是一个非常好用的算法,因为它的运算速度快,准确性高,方便理解,可以处理连续或种类的字段,并且适合高维的数据而被人们喜爱,而Sklearn也是学习Python实现机器学 ...

  3. 使用struts2中默认的拦截器以及自定义拦截器

    转自:http://blog.sina.com.cn/s/blog_82f01d350101echs.html 如何使用struts2拦截器,或者自定义拦截器.特别注意,在使用拦截器的时候,在Acti ...

  4. sklearn中调用PCA算法

    sklearn中调用PCA算法 PCA算法是一种数据降维的方法,它可以对于数据进行维度降低,实现提高数据计算和训练的效率,而不丢失数据的重要信息,其sklearn中调用PCA算法的具体操作和代码如下所 ...

  5. Sklearn中的回归和分类算法

    一.sklearn中自带的回归算法 1. 算法 来自:https://my.oschina.net/kilosnow/blog/1619605 另外,skilearn中自带保存模型的方法,可以把训练完 ...

  6. 第十三次作业——回归模型与房价预测&第十一次作业——sklearn中朴素贝叶斯模型及其应用&第七次作业——numpy统计分布显示

    第十三次作业——回归模型与房价预测 1. 导入boston房价数据集 2. 一元线性回归模型,建立一个变量与房价之间的预测模型,并图形化显示. 3. 多元线性回归模型,建立13个变量与房价之间的预测模 ...

  7. 『Kaggle』Sklearn中几种分类器的调用&词袋建立

    几种分类器的基本调用方法 本节的目的是基本的使用这些工具,达到熟悉sklearn的流程而已,既不会设计超参数的选择原理(后面会进行介绍),也不会介绍数学原理(应该不会涉及了,打公式超麻烦,而且近期也没 ...

  8. (数据科学学习手札25)sklearn中的特征选择相关功能

    一.简介 在现实的机器学习任务中,自变量往往数量众多,且类型可能由连续型(continuou)和离散型(discrete)混杂组成,因此出于节约计算成本.精简模型.增强模型的泛化性能等角度考虑,我们常 ...

  9. sklearn中模型评估和预测

    一.模型验证方法如下: 通过交叉验证得分:model_sleection.cross_val_score(estimator,X) 对每个输入数据点产生交叉验证估计:model_selection.c ...

随机推荐

  1. python异步编程--回调模型(selectors模块)

    目录 0. 参考地址 1. 前言 2. 核心类 3. SelectSelector核心函数代码分析 3.1 注册 3.2 注销 3.3 查询 4. 别名 5. 总结 6. 代码报错问题 1. 文件描述 ...

  2. Python 解析har 文件将域名分类导出

    前言 作为程序员平时主要是使用 shadowsocks 作为代理工具的.shadowsocks 有个很明显的优点儿就是可以设置白名单和黑名单.白名单是会走shadowsocks的自动代理模式. 遇到的 ...

  3. 深入C#并行编程(1) -- 了解线程

    一.操作系统用进程(Processe)分隔正在执行的程序,用线程(Thread)作为操作系统分配处理器时间的基本单元,进程上下文中可以运行多个线程,进程的所有线程共享其虚拟地址空间,所有线程均可执行程 ...

  4. linux centos7 root密码重置

    转:http://blog.chinaunix.net/uid-21209618-id-4738916.html 分类: LINUX 三年左右没接触linux技术工作,忘记的有很多.不知该怎么去运用. ...

  5. Python装饰器举例分析

    概述 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 我们要需要一个能测试函数运行时间的decorator,可以定义如 ...

  6. [转]Material使用08 MdDialogModule、MdAutocompleteModule

    本文转自:https://www.cnblogs.com/NeverCtrl-C/p/8125346.html 1 MatDialog 1.1 简要描述 MdDialog是一个服务,可以利用它来打开一 ...

  7. [转]JS组件系列——Bootstrap组件福利篇:几款好用的组件推荐

    本文转自:https://www.cnblogs.com/landeanfen/p/5461849.html#_label3 阅读目录 一.时间组件 1.效果展示 2.源码说明 3.代码示例 二.自增 ...

  8. 移动端地区选择控件mobile-select-area

    由于之前的[js开源组件开发]js手机联动选择地区仿ios 开源git 很受欢迎,于是我又对其进行了一些优化,包括可选的范围变大了,添加了默认空首地址的功能,也添加了更多api参数,首先我们先来看下这 ...

  9. [PHP]算法-归并排序的PHP实现

    <?php //归并排序 function merge(&$A,$left,$mid,$right,$temp){ //7.左堆起始 $i=$left; //8.右堆起始 $j=$mid ...

  10. Ubuntu下redis允许外部链接

    原文地址: https://blog.csdn.net/a150827/article/details/51352395 redis在ubuntu安装后默认是只有本地访问,需要别的ip访问我们需要修改 ...