精华内容
下载资源
问答
  • 例如用ML最大似然法时,能够通过model中最佳模型选择,那MP的选择模型的方法是什么((the max-mini branch-and-bound search, min-mini heuristic search, Subtree-Pruning-Regrafting (SPR), and Tree-Bisection-...
  • 关注【DCM笔记】,查看更多关于离散选择模型的文章:在【DCM笔记】系列文章的第5篇中,我们用SAS软件去拟合Logit模型(更多介绍请参照:Logit模型拟合实战案例(SAS)——离散选择模型之五);本篇将介绍如何利用Python...

    0 前言

    本文详细介绍如何在Python中拟合Logit模型,包括数据准备、哑变量的处理、参数拟合结果解读等内容。

    关注【DCM笔记】,查看更多关于离散选择模型的文章:a97e7384ab1e26bef4a001ee001bf714.png


    在【DCM笔记】系列文章的第5篇中,我们用SAS软件去拟合Logit模型(更多介绍请参照:Logit模型拟合实战案例(SAS)——离散选择模型之五);本篇将介绍如何利用Python去拟合同样的模型,并对结果进行解读。

    7bdd88ea4e412f657180374caa3b899d.png

    案例介绍

    这里仍然使用和上一篇中相同的数据。我们要研究的问题是:在申请的研究生的时候,什么样的学生更容易被录取。

    原始数据保存在名为“Application.csv”的文件中(文件格式为csv格式),每一行代表一条申请者的记录:

    c309285c43fa28010d76fc28928ac998.png

    原始数据中包含3个自变量:

    • 申请者的GRE成绩,用变量 gre 表示;
    • 申请者的平均绩点,用变量 gpa 表示;
    • 申请者所在的本科院校的排名,用变量 rank 表示。

    变量gregpa都是连续变量。rank为离散变量,只能取1、2、3、4中的某一个值;rank=1对应的学校排名最高,而rank=4对应的排名最低。

    申请的结果只有两种情形:“录取”或者“拒绝”。我们用变量admit表示申请结果,显然,admit是一个二分类的变量——admit=1表示“申请者被录取”,admit=0表示“申请者被拒绝”。

    软件准备

    本例需要调用下面这几个包:

    • numpy:Python中用于数值计算的包,可以方便地进行数组和矩阵的相关计算;
    • pandas:利用pandas可以高效地对数据进行操作和管理;
    • statsmodels:Python中用于统计建模和计量经济学的包,可以进行描述性统计、统计模型估计和推断等操作;
    • matplotlib:本例中用于绘图。

    运行Python代码之前,请确保已经正确安装相应的软件包。

    建模准备

    正式建模之前,可以先做一些描述性分析(Descriptive analysis)——看一看样本中各变量的均值、方差等等,以加强对数据的理解。具体实现步骤如下。

    在Python中导入相应的包:68976adcc3be532fe081aae30deb921a.png

    用pandas的read_csv函数读取原始数据文件,并展示前5行:e2738da6ca14c33fb1ec5d38fddb9c7e.png

    由于pandas的DataFrame数据结构也有一个方法的名称为rank,这容易与原始数据表中的列名rank产生混淆。将原始数据表中的列名rank更改为sch_rank7c72b3417d0223b9a7ba80a2b04228f7.png

    用DataFrame的describe()函数对样本中的各变量做描述性分析,结果如下面所示。我们可以得到每一个变量的出现的频数(count)、均值(mean)、标准差(std)、最大/小值(min/max)、百分位数(25%,50%,75%)等信息。这一步相当于SAS中的Proc Means和Proc Freq:f6bdef837d59b9625229a119a445b0d2.png

    当然,还可以做一下交叉频数分析,粗略地观察(离散的)自变量和因变量之间关系。例如,根据下图我们就可以看出:在样本中,当申请者所在的学校排名越高时(’sch_rank=1’),申请者被录取的比例也就越大:b314286e510626496c0b00334acd2886.png

    还可以利用直方图来可视化数据:eb171c7126dbe84ebe8a29d0d570a929.png

    数据准备

    在Python中拟合Logit模型的过程非常简单,直接调用statsmodels库中的Logit() 函数即可。调用Logit() 函数的基本格式为:

    Logit() 函数有两个输入参数:

    • endog代表和因变量(Y)对应的数据,通常为一维的数组;本例中就是原始数据中和变量admit相对应的那一列数据:9fb13068b21bb0174e555f7c3c2da6f7.png

    • exog代表和自变量(X)对应的数据;本例中就是变量gregparank(后更名为sch_rank)相对应的那一部分数据:081041f94a017075bc8dddd2ad6cc053.png

    问题在于——

    • (1) 变量sch_rank是一个分类变量,需要对其进行哑变量处理。在SAS中,分类变量的哑变量化是通过 class 语句实现的(如下图),而在Python中这一步需要手动实现。65b2592e147e1a30be54fe7c6f77b20c.png

    • (2) Logit()函数不会自动添加常数项[1],因此我们在准备数据的时候,需要手动添加常数项。e62d1f810d289e4e6d3d80e02654be3a.png

    可见,知道了Python中利用Logit() 函数就可以拟合Logit模型后,剩余工作的难点在于数据的准备

    利用pandas中的get_dummies()函数对分类变量sch_rank 进行哑变量化操作,其结果是得到sch_rank_1sch_rank_2sch_rank_3sch_rank_4 四个0-1变量:58bbba9a40b05eae3605f3fc57b2d8d8.png

    由于sch_rank_1+ sch_rank_2 + sch_rank_3 + sch_rank_4 =1, 所以不能直接把这四个变量同时放到模型(否则会有共线性的问题),我们选取sch_rank_4 作为基变量/参照类(和上一篇的SAS案例保持一致),把sch_rank_1sch_rank_2sch_rank_3和其它两个自变量gregpa的数据拼到一起:e20066a383b3fb2751bcde55df41ec80.png

    然后手动添加常数项:e4684b5472e23baa313de07149979bc9.png

    至此,数据准备工作已经完成!

    模型拟合

    在拟合Logit模型的时候,只要从上面的data中提取出因变量、自变量(含常数项)相对应的列,然后放到Logit()函数中即可。

    提取和自变量、常数项相对应的列名:245d76c08c0222293afcefc335ad5874.png

    拟合Logit模型。拟合的结果存储于result对象中:b3ffe30afee2558a88b0e4b735fb62d4.png

    输出result对象中的拟合结果:5b07f8fd02c6754d4a41a65286435fe8.png

    上表中输出了Logit模型的相关拟合结果。结果包含两部分:上半部分给出了和模型整体相关的信息,包括因变量的名称(Dep. Variable: admit)、模型名称(Model: Logit)、拟合方法(Method: MLE 最大似然估计)等信息;下半部分则给出了和每一个系数相关的信息,包括系数的估计值(coef)、标准误(std err)、z统计量的值、显著水平(P>|z|)和95%置信区间。

    根据上表可以得到本例中Logit模型的具体形式:

     _ _

    由于哑变量sch_rank_3 的值并不显著(0.591),因此sch_rank_3没有包含在上面的模型中。

    前文中说过(参见【DCM笔记】:Logit究竟是个啥?--离散选择模型之三),在Logit模型中,变量的系数是指:自变量每变化一个单位,胜率(Odds)的对数的变化值。在本例中,以变量gre的系数为例,其解读方式为:

    • 当其它变量保持不变时,申请者的GRE成绩每增加一分,其被录取的胜率的对数 增加0.0023。取对数后,可以得到胜率  变成原来的=1.002倍(这一步的计算代码参见下图)。

    求各系数的指数值(即相应的Odds):759d7c8fb908b41d280f59b402a722d1.png

    也可输出和Odds相对应的95%置信区间:fc7194a836932455720c901c8dea932c.png

    我们可以将Python中输出的结果和SAS中的结果(见下图)进行对比——二者的系数估计结果基本一致(一个细小的区别是:在检验单个变量是否显著时,statsmodels用的是z统计量,SAS用的是Wald Chi-Square 统计量)。

    f310d3c5fb60a312c6cc26777afc917f.png
    03ac2e4536c42e4d1d20d0ef874881d9.png

    喜欢的朋友不要忘了点赞、留言、关注哦,谢谢支持!

    a97e7384ab1e26bef4a001ee001bf714.png
    展开全文
  • 模型选择

    2019-03-05 20:29:29
    感觉应该是属于模型选择的过程,我他们给我的感觉性能都不怎么好。这种情况改怎么办。 模型选择和参数调整的步骤 问:如果某个阶段,我的分类器达到了一定的数值,但是非常低,我应该怎么知道他是什么愿意造成的...

    2019/03/05
    实际在进行机器学习的实践中,面对多个模型的准确率的时候,我不知道下一步应该干什么。感觉应该是属于模型选择的过程,我他们给我的感觉性能都不怎么好。这种情况改怎么办。


    1. 模型选择和参数调整的步骤

    问:如果某个阶段,我的分类器达到了一定的数值,但是非常低,我应该怎么知道他是什么愿意造成的。
    就比如说,昨天我看到的那个训练误差和测试误差都很低,那这种情况怎么办,是不是就说明这个东西没什么继续的价值了。

    [1]13: Bias/Variance and Model Selection

    展开全文
  • 在ZBrush中制作雕刻比较庞大细节又很丰富模型的时候,有时你可能只想显示模型的某些部分,有些部分挡住了视线想要暂时隐藏。ZBrush®软件中有一个选项功能使这项操作变得相当简单,像其他功能一样,使用选区工具需要...

      在ZBrush中制作雕刻比较庞大细节又很丰富模型的时候,有时你可能只想显示模型的某些部分,有些部分挡住了视线想要暂时隐藏。ZBrush®软件中有一个选项功能使这项操作变得相当简单,像其他功能一样,使用选区工具需要记住一些复杂的快捷组合方式,通过一些练习,你就可以随意的显示和隐藏模型了。

      1、打开LightBox>Tool中的SuperAverageMan工程文件,现在如果只想显示模型的头部,让其他部分先暂时消失,将模型向下移动以便更好地看到头部,如图所示。

    10151953_ee4O.png

      2、通过按住Ctrl+Shift键可以将头部选定,如下图(左)所示,当按下这两个键以后,左侧工具架上的Stroke和笔刷图标都会发生改 变, 现在已经处于选区模式了。在头部周围点击并拖动出一个方框,模型身体会消失,只留下头部。按F键集中观察可视部分,如图所示。(模型身躯仍然存在,只是暂 时看不见而已)。

    10151954_VBNx.png

      3、现在可以对可视部分进行一些调整了,可以按住Ctrl+Shift点击一下模型反转选区,使隐藏的部分显示出来,可视的部分隐藏。

    10151954_ceOG.png

      4、如果按住Ctrl+Shift键然后单击画布,所有部分又都全部显示了出来。更多关于选择和隐藏模型的教程,请参阅ZBrush中如何扩大选区。

      想要了解更多关于ZBrush图形绘制软件的详细信息,大家可前往ZBrush中文网站了解相关信息。


    转载于:https://my.oschina.net/zbrushsoft/blog/634464

    展开全文
  • 那么我们怎么选择模型呢,是对训练样本的拟合度越好就可以吗?显然不是,因为这样做的话只会让我们最终选择出最复杂,最高阶的模型。而这个模型的问题是过拟合的,即对样本真实分布的预测误差是很高的。那么该如何...

     

      模型选择的标准是尽可能地贴近样本真实的分布。但是在有限的样本下,如果我们有多个可选模型,比如从简单到复杂,从低阶到高阶,参数由少到多。那么我们怎么选择模型呢,是对训练样本的拟合度越好就可以吗?显然不是,因为这样做的话只会让我们最终选择出最复杂,最高阶的模型。而这个模型的问题是过拟合的,即对样本真实分布的预测误差是很高的。那么该如何选择模型,使得泛化误差尽量小呢,有下面这些常用的方法:

    保留交叉验证

    把样本分成训练样本和测试样本,一般可以7比3的比例。7成的样本训练出的模型,用3成的样本做检验。取测试准确率最高的模型

    K折交叉验证

    取K为10为例,把所有样本平均分成10分,然后用9份训练,剩下的1份做测试。这样可以做十次测试,取十次测试的准确率的平均值最高的模型做为选取的模型。

    留1交叉验证

    当样本数目很少并且很难取得的时候,K折交叉验证的极限就是让K等于样本数目N,这样N-1个样本作为训练样本,1个作为测试样本。经过N次测试,取平局准确率最高的模型作为我们选择的模型。

    在交叉验证做完选取理想模型之后,可以把所有样本再放到模型中训练一次,作为最后的输出模型。

     

    下面介绍特征选择

     

      对于特征选择来说,我们可能面临的问题是特征太多,有很多特征是属于冗余信息或者无关信息,这些会增加我们训练的时间,尤其是当特征特别多的时候,比如说朴素贝叶斯做垃圾邮件过滤,以单词作为特征,这样的特征集大小可能高达数十万。如何做特征选择呢,常用方法一般分成下面的类别:

    包裹式特征选择

    包裹式的意思是把模型训练封装,我们对特征子集进行启发式搜索,找到一个较好的子集。比如前向搜索,是从一个空集开始,选择一个特征作为特征子集,找到测试结果最好的那个特征,此时特征子集的大小变为1,完成第一次迭代。下一次迭代,从剩余的特征中选取一个加入当前子集,找到能使得测试结果最好的那个子集最为这次迭代的特征子集。一次迭代直到达到我们预设的子集大小或者测试结果几乎没有改善为止。类似地,后向搜索的初始特征子集是所有特征,然后每次迭代从里面减少一个特征。很显然,这两种方法都是贪心算法,并不保证全局最优。

     

    过滤式特征选择

    过滤式特征选择不是通过模型训练的方式来选择特征子集。它是通过统计的方法找出对于样本标记最重要的特征。

    比如说计算相对熵的KL距离是其中一种方式。我们要计算的是每个特征对于标记来说MI(mutual information),即特征对于标记来说的信息相关度。对于第i个特征,有:

    $$MI(x_{i},y) = \sum_{x_{i}\subseteq X_{i}}\sum_{y\subseteq Y_{i}}p(x_{i},y)log\frac{p(x_{i},y)}{p(x_{i})*p(y)}$$

    其中$X_{i}$ $Y_{i}$分别为$x_{i}$和y所有可能的取值的集合。

    上式就是KL距离,可表示为$KL(p(x_{i},y) || p(x_{i}) p(y))$,直观地理解,当$x_{i}$和y是独立不相关时,理论计算出的KL距离为0。

     

    转载于:https://www.cnblogs.com/learninglife/p/9340636.html

    展开全文
  • 我的baseline及赛事简介 1.2 垃圾邮件分类 机器学习项目-垃圾邮件分类 KNN-SVM-DT-RF-GBDT-Bayes 1.3 金融反欺诈二分类 机器学习项目-金融反欺诈模型 1. XGBOOST 2. GBDT 3. LR 1.4 音乐推荐系统 机器学习项目-音乐...
  • 3D模型怎么剪切可以用Proboolean(超级布尔运算)实现1.选中物体1(球体),点复合对象-Proboolean2.确保是差集运算,点击拾取对象,选物体2(长方体)3.裁切后的效果3dmax怎么把一个物体剪切成两个分开的物体方法很多 说...
  • 模型选择与特征选择

    千次阅读 2017-04-24 23:36:42
    1 问题 ... 还有一类参数选择问题:如果我们想使用带权值的回归模型,那么怎么选择权重w公式里的参数? 形式化定义:假设可选的模型集合是,比如我们想分类,那么SVM、logistic回归、神经网络
  • 对于解决同一个问题,如怎么选择模型去拟合线性回归中只有一个特征时房价预测问题,如可能有不同的模型去解决,如: 1、d = 1,h(θ) = θ0+θ1x 2、d = 2,h(θ) = θ0+θ1x+θ2x^2 3、d = 3,h(θ) = θ0...
  • 这里的答案我是看到知乎上一个大牛回答的:   regression本质上是一种model fitting的方法,而linear,curve,logistic则是model,使用什么model取决于你的问题,先搞清楚你要解决的问题,再搞清楚这些model都是...
  • 拿到数据后怎么了解数据(可视化) 选择最贴切的机器学习算法 定位模型状态(过/欠拟合)以及解决方法 大量极的数据的特征分析与可视化 各种损失函数(loss function)的优缺点及如何选择 多说一句,这里写的这个小...
  • 模型评估与选择

    2017-04-22 17:57:00
     前面写了几篇线性回归与逻辑回归的文章,是说模型训练的但是模型的性能怎样该怎么选择使用最小二乘法还是梯度下降法呢,我们总得要比较模型的性能再做选择吧;所以就有了这里所说的模型评估与选择; 既然是读书...
  • 第一步:导入模型 将下载或制作好的模型放在Assets目录下。 第二步:创建Animator 在Project菜单板右键Creat-Animator Controller 点击Animator Controller,弹出编辑栏 拖入动画文件,Entry处右键选择make ...
  • 选择模型:通过一个fd_set集合管理套接字,在满足套接字需求后,通知套接字。让套接字进行工作。 选择模型的核心是FD_SET集合和select函数。通过该函数,我们可以们判断套接字上是否存在数据,或者能否向一个套接字...
  • 点击上方“AI遇见机器学习”,选择“星标”公众号重磅干货,第一时间送转自:专知【导读】模型不work其实是很正常的事情,模型work才是不正常的事情[手动狗头]。不过,对...
  • 特征选择可以分为3种:目录:Filter:过滤法Wrapper:递归特征消除Embedded:嵌入法(一)Filter:过滤法按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。1、移除低方差的特征2、...
  • 系统学习机器学习之模型选择

    千次阅读 2016-01-19 09:57:07
    1 问题 ... 还有一类参数选择问题:如果我们想使用带权值的回归模型,那么怎么选择权重w公式里的参数? 形式化定义:假设可选的模型集合是,比如我们想分类,那么SVM、logistic回归、神经网络等模

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,611
精华内容 644
关键字:

怎么选择模型