回归分析 订阅
在统计学中,回归分析(regression analysis)指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。回归分析按照涉及的变量的多少,分为一元回归和多元回归分析;按照因变量的多少,可分为简单回归分析和多重回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。 [1] 展开全文
在统计学中,回归分析(regression analysis)指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。回归分析按照涉及的变量的多少,分为一元回归和多元回归分析;按照因变量的多少,可分为简单回归分析和多重回归分析;按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。 [1]
信息
应用领域
统计学
外文名
regression analysis
中文名
回归分析
反向编译定义
在大数据分析中,回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。例如,司机的鲁莽驾驶与道路交通事故数量之间的关系,最好的研究方法就是回归。方法有各种各样的回归技术用于预测。这些技术主要有三个度量(自变量的个数,因变量的类型以及回归线的形状),如下图。1. Linear Regression线性回归它是最为人熟知的建模技术之一。线性回归通常是人们在学习预测模型时首选的技术之一。在这种技术中,因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的。线性回归使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(X)之间建立一种关系。多元线性回归可表示为Y=a+b1*X +b2*X2+ e,其中a表示截距,b表示直线的斜率,e是误差项。多元线性回归可以根据给定的预测变量(s)来预测目标变量的值。2.Logistic Regression逻辑回归逻辑回归是用来计算“事件=Success”和“事件=Failure”的概率。当因变量的类型属于二元(1 / 0,真/假,是/否)变量时,应该使用逻辑回归。这里,Y的值为0或1,它可以用下方程表示。odds= p/ (1-p) = probability of event occurrence / probability of not event occurrenceln(odds) = ln(p/(1-p))logit(p) = ln(p/(1-p)) =b0+b1X1+b2X2+b3X3....+bkXk上述式子中,p表述具有某个特征的概率。你应该会问这样一个问题:“为什么要在公式中使用对数log呢?”。因为在这里使用的是的二项分布(因变量),需要选择一个对于这个分布最佳的连结函数。它就是Logit函数。在上述方程中,通过观测样本的极大似然估计值来选择参数,而不是最小化平方和误差(如在普通回归使用的)。3. Polynomial Regression多项式回归对于一个回归方程,如果自变量的指数大于1,那么它就是多项式回归方程。如下方程所示:y=a+b*x^2在这种回归技术中,最佳拟合线不是直线。而是一个用于拟合数据点的曲线。4. Stepwise Regression逐步回归在处理多个自变量时,可以使用这种形式的回归。在这种技术中,自变量的选择是在一个自动的过程中完成的,其中包括非人为操作。这一壮举是通过观察统计的值,如R-square,t-stats和AIC指标,来识别重要的变量。逐步回归通过同时添加/删除基于指定标准的协变量来拟合模型。下面列出了一些最常用的逐步回归方法:标准逐步回归法做两件事情。即增加和删除每个步骤所需的预测。向前选择法从模型中最显著的预测开始,然后为每一步添加变量。向后剔除法与模型的所有预测同时开始,然后在每一步消除最小显著性的变量。这种建模技术的目的是使用最少的预测变量数来最大化预测能力。这也是处理高维数据集的方法之一。25. Ridge Regression岭回归当数据之间存在多重共线性(自变量高度相关)时,就需要使用岭回归分析。在存在多重共线性时,尽管最小二乘法(OLS)测得的估计值不存在偏差,它们的方差也会很大,从而使得观测值与真实值相差甚远。岭回归通过给回归估计值添加一个偏差值,来降低标准误差。在线性等式中,预测误差可以划分为 2 个分量,一个是偏差造成的,一个是方差造成的。预测误差可能会由这两者或两者中的任何一个造成。在这里,将讨论由方差所造成的误差。岭回归通过收缩参数λ(lambda)解决多重共线性问题。请看下面的等式:L2=argmin||y=xβ||+λ||β||在这个公式中,有两个组成部分。第一个是最小二乘项,另一个是β-平方的λ倍,其中β是相关系数向量,与收缩参数一起添加到最小二乘项中以得到一个非常低的方差。6. Lasso Regression套索回归它类似于岭回归,Lasso (Least Absolute Shrinkage and Selection Operator)也会就回归系数向量给出惩罚值项。此外,它能够减少变化程度并提高线性回归模型的精度。看看下面的公式:L1=agrmin||y-xβ||+λ||β||Lasso 回归与Ridge回归有一点不同,它使用的惩罚函数是L1范数,而不是L2范数。这导致惩罚(或等于约束估计的绝对值之和)值使一些参数估计结果等于零。使用惩罚值越大,进一步估计会使得缩小值越趋近于零。这将导致要从给定的n个变量中选择变量。如果预测的一组变量是高度相关的,Lasso 会选出其中一个变量并且将其它的收缩为零。7.ElasticNet回归ElasticNet是Lasso和Ridge回归技术的混合体。它使用L1来训练并且L2优先作为正则化矩阵。当有多个相关的特征时,ElasticNet是很有用的。Lasso 会随机挑选他们其中的一个,而ElasticNet则会选择两个。Lasso和Ridge之间的实际的优点是,它允许ElasticNet继承循环状态下Ridge的一些稳定性。数据探索是构建预测模型的必然组成部分。在选择合适的模型时,比如识别变量的关系和影响时,它应该是首选的一步。比较适合于不同模型的优点,可以分析不同的指标参数,如统计意义的参数,R-square,Adjusted R-square,AIC,BIC以及误差项,另一个是Mallows’ Cp准则。这个主要是通过将模型与所有可能的子模型进行对比(或谨慎选择他们),检查在你的模型中可能出现的偏差。交叉验证是评估预测模型最好的方法。在这里,将你的数据集分成两份(一份做训练和一份做验证)。使用观测值和预测值之间的一个简单均方差来衡量你的预测精度。如果你的数据集是多个混合变量,那么你就不应该选择自动模型选择方法,因为你应该不想在同一时间把所有变量放在同一个模型中。它也将取决于你的目的。可能会出现这样的情况,一个不太强大的模型与具有高度统计学意义的模型相比,更易于实现。回归正则化方法(Lasso,Ridge和ElasticNet)在高维和数据集变量之间多重共线性情况下运行良好。3假定条件与内容在数据分析中一般要对数据进行一些条件假定:方差齐性线性关系效应累加变量无测量误差变量服从多元正态分布观察独立模型完整(没有包含不该进入的变量、也没有漏掉应该进入的变量)误差项独立且服从(0,1)正态分布。现实数据常常不能完全符合上述假定。因此,统计学家研究出许多的回归模型来解决线性回归模型假定过程的约束。回归分析的主要内容为:①从一组数据出发,确定某些变量之间的定量关系式,即建立数学模型并估计其中的未知参数。估计参数的常用方法是最小二乘法。②对这些关系式的可信程度进行检验。③在许多自变量共同影响着一个因变量的关系中,判断哪个(或哪些)自变量的影响是显著的,哪些自变量的影响是不显著的,将影响显著的自变量加入模型中,而剔除影响不显著的变量,通常用逐步回归、向前回归和向后回归等方法。④利用所求的关系式对某一生产过程进行预测或控制。回归分析的应用是非常广泛的,统计软件包使各种回归方法计算十分方便。在回归分析中,把变量分为两类。一类是因变量,它们通常是实际问题中所关心的一类指标,通常用Y表示;而影响因变量取值的的另一类变量称为自变量,用X来表示。回归分析研究的主要问题是:(1)确定Y与X间的定量关系表达式,这种表达式称为回归方程;(2)对求得的回归方程的可信度进行检验;(3)判断自变量X对因变量Y有无影响;(4)利用所求得的回归方程进行预测和控制。4应用相关分析研究的是现象之间是否相关、相关的方向和密切程度,一般不区别自变量或因变量。而回归分析则要分析现象之间相关的具体形式,确定其因果关系,并用数学模型来表现其具体关系。比如说,从相关分析中可以得知“质量”和“用户满意度”变量密切相关,但是这两个变量之间到底是哪个变量受哪个变量的影响,影响程度如何,则需要通过回归分析方法来确定。1一般来说,回归分析是通过规定因变量和自变量来确定变量之间的因果关系,建立回归模型,并根据实测数据来求解模型的各个参数,然后评价回归模型是否能够很好的拟合实测数据;如果能够很好的拟合,则可以根据自变量作进一步预测。例如,如果要研究质量和用户满意度之间的因果关系,从实践意义上讲,产品质量会影响用户的满意情况,因此设用户满意度为因变量,记为Y;质量为自变量,记为X。通常可以建立下面的线性关系: Y=A+BX+§式中:A和B为待定参数,A为回归直线的截距;B为回归直线的斜率,表示X变化一个单位时,Y的平均变化情况;§为依赖于用户满意度的随机误差项。对于经验回归方程: y=0.857+0.836x回归直线在y轴上的截距为0.857、斜率0.836,即质量每提高一分,用户满意度平均上升0.836分;或者说质量每提高1分对用户满意度的贡献是0.836分。上面所示的例子是简单的一个自变量的线性回归问题,在数据分析的时候,也可以将此推广到多个自变量的多元回归,具体的回归过程和意义请参考相关的统计学书籍。此外,在SPSS的结果输出里,还可以汇报R2,F检验值和T检验值。R2又称为方程的确定性系数(coefficient of determination),表示方程中变量X对Y的解释程度。R2取值在0到1之间,越接近1,表明方程中X对Y的解释能力越强。通常将R2乘以100%来表示回归方程解释Y变化的百分比。F检验是通过方差分析表输出的,通过显著性水平(significance level)检验回归方程的线性关系是否显著。一般来说,显著性水平在0.05以上,均有意义。当F检验通过时,意味着方程中至少有一个回归系数是显著的,但是并不一定所有的回归系数都是显著的,这样就需要通过T检验来验证回归系数的显著性。同样地,T检验可以通过显著性水平或查表来确定。在上面所示的例子中,各参数的意义如下表所示。线性回归方程检验示例 SIM手机用户满意度与相关变量线性回归分析以SIM手机的用户满意度与相关变量的线性回归分析为例,来进一步说明线性回归的应用。从实践意义讲上,手机的用户满意度应该与产品的质量、价格和形象有关,因此以“用户满意度”为因变量,“质量”、“形象”和“价格”为自变量,作线性回归分析。利用SPSS软件的回归分析,得到回归方程如下:用户满意度=0.008×形象+0.645×质量+0.221×价格对于SIM手机来说,质量对其用户满意度的贡献比较大,质量每提高1分,用户满意度将提高0.645分;其次是价格,用户对价格的评价每提高1分,其满意度将提高0.221分;而形象对产品用户满意度的贡献相对较小,形象每提高1分,用户满意度仅提高0.008分。方程各检验指标及含义如下:从方程的检验指标来看,“形象”对整个回归方程的贡献不大,应予以删除。所以重新做“用户满意度”与“质量”、“价格”的回归方程如下:满意度=0.645×质量+0.221×价格用户对价格的评价每提高1分,其满意度将提高0.221分(在本示例中,因为“形象”对方程几乎没有贡献,所以得到的方程与前面的回归方程系数差不多)。方程各检验指标及含义如下:步骤确定变量明确预测的具体目标,也就确定了因变量。如预测具体目标是下一年度的销售量,那么销售量Y就是因变量。通过市场调查和查阅资料,寻找与预测目标的相关影响因素,即自变量,并从中选出主要的影响因素。建立预测模型依据自变量和因变量的历史统计资料进行计算,在此基础上建立回归分析方程,即回归分析预测模型。进行相关分析回归分析是对具有因果关系的影响因素(自变量)和预测对象(因变量)所进行的数理统计分析处理。只有当自变量与因变量确实存在某种关系时,建立的回归方程才有意义。因此,作为自变量的因素与作为因变量的预测对象是否有关,相关程度如何,以及判断这种相关程度的把握性多大,就成为进行回归分析必须要解决的问题。进行相关分析,一般要求出相关关系,以相关系数的大小来判断自变量和因变量的相关的程度。计算预测误差回归预测模型是否可用于实际预测,取决于对回归预测模型的检验和对预测误差的计算。回归方程只有通过各种检验,且预测误差较小,才能将回归方程作为预测模型进行预测。确定预测值利用回归预测模型计算预测值,并对预测值进行综合分析,确定最后的预测值。注意问题应用回归预测法时应首先确定变量之间是否存在相关关系。如果变量之间不存在相关关系,对这些变量应用回归预测法就会得出错误的结果。正确应用回归分析预测时应注意:①用定性分析判断现象之间的依存关系;②避免回归预测的任意外推;③应用合适的数据资料;
收起全文
精华内容
下载资源
问答
  • 回归分析
    千次阅读
    2021-07-03 11:51:50

    1、概述

    \quad \quad 回归分析(Regression)是确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法,它主要研究一个随机变量 Y 对另一个变量(X)或一组(X1,X2,…,Xk)变量的相依关系。

    2、分类

    • 按照涉及的变量的多少,分为一元回归和多元回归分析;

    • 按照因变量的多少,可分为简单回归分析和多重回归分析;

    • 按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。

    3、线性回归

    3.1 单变量线性回归

    3.2 多变量线性回归

    3.3 线性回归分析的步骤:

    • 确定自变量和因变量,并计算自变量和因变量之间的相关系数。

    • 绘制散点图,确定回归模型类型

    • 估计模型参数,建立回归模型:最小二乘法进行模型参数估计

    • 对回归模型进行检验

    • 利用回归模型进行预测

    4、评价回归算法的指标

    1.R值
    在统计学中R值是拟合优度指数,用来评价模型的拟合好坏等,取值范围是【-1,1】,越接近正负1越好。对应R平方来说越接近1越好。
    R值的大小

    2.P值
    在统计学中P值是指(F检验或者T或者其余检验量)大于所求值时的概率,一般要小于给定α就说明检验显著。P值是检验样置信度的一个指标,一般我们认为p<=0.05时(一般选择这个显著水平),模型的信号不存在偶然性,模型的结果可靠。

    5、Excel 实践

    1、目标:研究销售收入和利润之间的关系,以更好的预测未来的销售目标
    2、数据:数据如下
    在这里插入图片描述
    3、计算销售收入和利润两者的相关系数
    在这里插入图片描述

    相关系数为0.98,足以说明两者正强相关。
    4、绘制散点图
    在这里插入图片描述

    5、回归分析
    在这里插入图片描述
    输出结果如下:
    在这里插入图片描述

    1、 先看回归统计表,Multiple R即相关系数R的值,和我们之前做相关分析得到的值一样,大于0.8表示强正相关。

    2、 回归统计表中的R Square是R平方值,R平方即R的平方,又可以叫判定系数、拟合优度,取值范围是[0,1],R平方值越大,表示模型拟合的越好。一般大于70%就算拟合的不错,60%以下的就需要修正模型了。这个案例里R平方0.97,相当不错。

    3、 Adjusted R是调整后的R方,这个值是用来修正因自变量个数增加而导致模型拟合效果过高的情况,多用于衡量多重线性回归。

    4、 第二张表,方差分析表,df是自由度,SS是平方和,MS是均方,F是F统计量,Significance F是回归方程总体的显著性检验,其中我们主要关注F检验的结果,即Significance F值,F检验主要是检验因变量与自变量之间的线性关系是否显著,用线性模型来描述他们之间的关系是否恰当,越小越显著。这个案例里F值很小,说明因变量与自变量之间显著。

    5、 残差是实际值与预测值之间的差,残差图用于回归诊断,回归模型在理想条件下的残差图是服从正态分布的。

    6、 第三张表我们重点关注P-value,也就是P值,用来检验回归方程系数的显著性,又叫T检验,T检验看P值,是在显著性水平α(常用取值0.01或0.05)下F的临界值,一般以此来衡量检验结果是否具有显著性,如果P值>0.05,则结果不具有显著的统计学意义,如果0.01<P值<0.05,则结果具有显著的统计学意义,如果P<=0.01,则结果具有极其显著的统计学意义。

    T检验是看某一个自变量对于因变量的线性显著性,如果该自变量不显著,则可以从模型中剔除。 p值越小,越好。

    7、 从第三张表的第一列我们可以得到这个回归模型的方程:
    y=0.13x-2.46,此后对于每一个输入的自变量x,都可以根据这个回归方程来预测出因变量Y。

    更多相关内容
  • 多元回归分析(Multiple Regression Analysis)是指在相关变量中将一个变量视为因变量,其他一个或多个变量视为自变量,建立多个变量之间线性或非线性数学模型数量关系式并利用样本数据进行分析的统计分析方法。...
  • 回归分析(修订版) 谢宇 (作者)
  • 何晓群版应用回归分析第四版课后答案完整版!!!!!!
  • 回归分析_谢宇

    2016-08-19 14:16:54
    回归分析 谢宇
  • 例解回归分析(英文第5版), 例子比较多,且讲了很多具体的方法。
  • 线性回归分析步骤总结

    千次阅读 2022-04-02 16:16:23
    线性回归分析研究影响关系情况,回归分析实质上就是研究X(自变量)对Y(因变量,定量数据)的影响关系情况。当自变量为1个时,是一元线性回归,又称作简单线性回归;自变量为2个及以上时,称为多元线性回归。线性回归广泛...

    一、前期准备

    1.研究目的

    线性回归分析研究影响关系情况,回归分析实质上就是研究X(自变量)对Y(因变量,定量数据)的影响关系情况。当自变量为1个时,是一元线性回归,又称作简单线性回归;自变量为2个及以上时,称为多元线性回归。线性回归广泛的应用于自然科学、社会科学等各个领域中。例如:研究吸烟、肥胖、运动等因素是否影响高血压发病率;土壤、水分、光照是否影响植物生长等。

    2.数据类型

    线性回归要求因变量Y(被解释变量)一定是定量数据。如果因变量Y为定类数据,可以用“进阶方法”中的“logit回归”。

    3.分析要求

    (1)一般对于分析项的自变量个数没有要求,但是一般建议不要一次性放入太多,过多容易引起多重共线性,如果需要对哑变量进行处理,需要在SPSSAU“数据处理”中的“生成变量”,

    (2)正态性检验

    SPSSAU提供多种正态性检验的方法,例如:“通用方法”中的“正态性检验”(SPSSAU正态性检验);“可视化”中的“直方图”; “可视化”中的“P-P/Q-Q图"。

    理论上要求线性回归中的因变量要满足“正态性”,但是若数据为问卷数据,建议可跳过正态性检验这一步。原因在于问卷数据属于等级数据,很难保证正态性,且数据本身变化幅度就不大,即使对数处理效果也不明显。

    (3)线性趋势

    线性回归模型要求自变量和因变量是呈线性关系的,可以通过SPSSAU中“可视化”中的“散点图”进行查看。如果不成线线性可以使用SPSSAU中的曲线回归

    补充说明:相关分析和回归分析

    一般来说,回归分析之前需要做相关分析,原因在于相关分析可以先了解是否有关系,回归分析是研究有没有影响关系,有相关关系但并不一定有回归影响关系。

    二、SPSSAU上传数据

    1.上传数据

    登录账号后进入SPSSAU页面,点击右上角“上传数据”,将处理好的数据进行“点击上传文件”上传即可。

    2.拖拽分析项

    在“通用方法”模块中选择“线性回归”方法,将Y定量数据放于上方分析框内,X自变量放于下方分析框内,点击“开始分析”即可。

    补充说明:如果想一次拖拽多个分析项,则可以使用ctrl键不连续多选,shift键连续多选;左右拖拽。

    3.选择参数

    勾选后可以将残差和预测值保存起来,可用于进—步分析使用。

    三、SPSSAU分析

    背景:分析员工当前工资影响因素(数据已满足线性回归分析要求参考来源:SPSS统计分析第5版)。

    1.线性回归分析结果

    从上表可以看出,模型公式为:当前工资=-338.130 + 1.750*起始工资 + 710.927*受教育程度(年)-10.009*过去经验(月)-77.206*年龄,模型R方值为0.803,意味着起始工资,受教育程度(年),过去经验(月),年龄可以解释当前工资的80.3%变化原因。

    对模型进行F检验时发现模型通过F检验(F=476.677,p=0.000<0.05),也即说明起始工资,受教育程度(年),过去经验(月),年龄中至少一项会对当前工资产生影响关系,另外,针对模型的多重共线性进行检验发现,模型中VIF值全部均小于5,意味着不存在着共线性问题;并且D-W值在数字2附近,因而说明模型不存在自相关性,样本数据之间并没有关联关系,模型较好。

    具体分析:

    (1)起始工资的回归系数值为1.750(t=29.259,p=0.000<0.01),意味着起始工资会对当前工资产生显著的正向影响关系。

    (2)受教育程度(年)的回归系数值为710.927(t=4.190,p=0.000<0.01),意味着受教育程度(年)会对当前工资产生显著的正向影响关系。

    (3)过去经验(月)的回归系数值为-10.009(t=-1.762,p=0.079>0.05),意味着过去经验(月)并不会对当前工资产生影响关系。

    (4)年龄的回归系数值为-77.206(t=-1.535,p=0.126>0.05),意味着年龄并不会对当前工资产生影响关系。

    补充说明如下:

    (1)如果出现多重共线性问题,一般可有3种解决办法,一是使用逐步回归分析;二是使用岭回归分析,三是进行相关分析,手工移出相关性非常高的分析项,然后再做线性回归分析。

    (2)D-W值常用于检验序列一阶自相关,一般不用考虑。

    2.模型预测

    SPSSAU提供模型预测,输入自变量X后就会得到相应的因变量Y,例如:假设某员工“起始工资”为3000,“受教育程度”10年,过去经验为12个月,年龄为25,则通过模型预测出当前工资约为9971元(数据结果仅供案例分析)。

    3.模型结果图

    可以直观的看到自变量与因变量的之间的关系(基于回归系数基础上)。

    4.模型汇总

    分析结果来源于SPSSAU

    从上表可知,将起始工资,受教育程度(年),过去经验(月),年龄作为自变量,而将当前工资作为因变量进行线性回归分析,从上表可以看出,模型R方值为0.803,意味着起始工资,受教育程度(年),过去经验(月),年龄可以解释当前工资的80.3%变化原因。

    5.ANOVA表格分析

    对模型进行F检验时发现模型通过F检验(F=476.677,p=0.000<0.05),也即说明起始工资,受教育程度(年),过去经验(月),年龄中至少一项会对当前工资产生影响关系。

    6.回归系数分析

    总结分析可知:起始工资, 受教育程度(年)会对当前工资产生显著的正向影响关系。但是过去经验(月), 年龄并不会对当前工资产生影响关系。

    PS:此外SPSSAU还提供了coefPlot

    coefPlot展示具体的回归系数值和对应的置信区间,可直观查看数据的显著性情况,如果说置信区间包括数字0则说明该项不显著,如果置信区间不包括数字0则说明该项呈现出显著性。

    四、常见问题说明

    1.多个问卷量表题如何表示一个维度?

    比如有两个题“我愿意向朋友推荐SPSSAU”,“我有需要会再来使用SPSSAU”,此两个题是“忠诚度”的体现。但现在需要“忠诚度”这个整体,而不是具体两个标题,

    具体操作如下图:

    2.多重共线性问题?

    VIF值用于检测共线性问题,一般VIF值小于10即说明没有共线性(严格的标准是5),有时候会以容差值作为标准,容差值=1/VIF,所以容差值大于0.1则说明没有共线性(严格是大于0.2),VIF和容差值有逻辑对应关系,因此二选一即可,一般描述VIF值。

    如果出现多重共线性问题,一般可有3种解决办法,一是使用逐步回归分析;二是使用岭回归分析,三是进行相关分析,手工移出相关性非常高的分析项,然后再做线性回归分析。

    3.控制变量如何放置?

    控制变量指可能干扰模型的项,比如年龄,学历等基础信息。从软件角度来看,并没有“控制变量”这样的名词。“控制变量”就是自变量,所以直接放入“自变量X”框中即可。

    4.线性回归有效样本量不足,需要多少样本量?

    有效样本不足是指分析时,可以进行分析的样本量低于方法需要的样本量。解决方法是加大样本量。一般来说,至少要求样本量起码是变量数的5-10倍,结果更具备参考意义。

    5.回归结果看标准化还是非标准化?

    标准化回归系数是消除了量纲影响后的回归系数,可以用来比较各个自变量的“重要性大小”。如果目的在于预测模型,一般使用非标准化回归系数。

    五、总结

    线性回归分析步骤总结如下:

    第一步:首先对模型情况进行分析包括模型拟合情况(比如R ²为0.3,则说明所有X可以解释Y 30%的变化原因),模型共线性问题(VIF值小于5则说明无多重共线性),是否通过F 检验(F 检验用于判定是否X中至少有一个对Y产生影响,如果呈现出显著性,则说明所有X中至少一个会对Y产生影响关系)。

    第二步:分析X的显著性如果显著(p 值判断),则说明具有影响关系,反之无影响关系。

    第三步:判断X对Y的影响关系方向回归系数B值大于0说明正向影响,反之负向影响。

    第四步:其它比如对比影响程度大小(回归系数B值大小对比X对Y的影响程度大小)。


    以上就是本次分享的内容,登录SPSSAU官网了解更多。

    展开全文
  • 必看 logit回归分析步骤汇总

    千次阅读 2022-04-02 16:21:28
    Logit回归分析用于研究X对Y的影响,并且对X的数据类型没有要求,X可以为定类数据(可以做虚拟变量设置),也可以为定量数据,但要求Y必须为定类数据,并且根据Y的选项数,使用相应的数据分析方法。logit回归分析一般...

    Logit回归分析用于研究X对Y的影响,并且对X的数据类型没有要求,X可以为定类数据(可以做虚拟变量设置),也可以为定量数据,但要求Y必须为定类数据,并且根据Y的选项数,使用相应的数据分析方法。logit回归分析一般可分为三类,分别是二元logit回归、多分类logit回归、有序logit回归,三类logit回归区别如下:

    一、二元logit分析

    1.基本说明

    二元Logit回归分析用于研究X对于Y的影响关系,其中X通常为定量数据(如果X为定类数据,一般需要做虚拟(哑)变量设置

    Y为二分类定类数据,(Y的数字一定只能为0和1)例如愿意和不愿意、是和否等。

    2.数据处理

    (1)如果X是定类数据,比如性别或学历等。那么就需要首先对它们做虚拟哑变量处理,使用SPSSAU“数据处理”-“生成变量”功能。操作如下图:

    (2)因变量Y只能包括数字0和1,如果因变量的原始数据不是这样,那么就需要数据编码,设置成0和1,使用SPSSAU“数据处理”-“数据编码”功能,操作如下图:

    3.SPSSAU上传数据

    (1)登录账号后进入SPSSAU页面,点击右上角“上传数据”,将处理好的数据进行“点击上传文件”上传即可。

    (2)拖拽分析项

    在“进阶方法”模块中选择“二元Logit”方法,将Y定类变量放于上方分析框内,X定类/定量变量放于下方分析框内,点击“开始分析”即可。

    可以勾选“保存残差和预测值” 将残差和预测值保存起来,可用于进—步分析使用。

    4.分析前提示

    (1)如果X为定类数据,此时可以考虑使用交叉卡方分析去研究X和Y的关系。 (2)如果X非常多(比如超过10个),此时可以先对定类的X与Y进行卡方分析,对定量的X与Y进行方差分析(或t检验),先看有没有差异关系,将最终有差异关系的X放入二元Logit回归模型中,这样X会较少,并且X与Y均有差异关系,也更可能有影响关系,此时二元Logit回归模型的预测准确率会更高。 如果例子里面自变量X较少,模型本身并不复杂,可忽略此步骤即可,直接进行二元logistic回归分析。

    5.SPSSAU分析

    背景:研究影响用户购买某品牌笔记本电脑的因素,其中0代表否,1代表是(仅供案例分析)。

    (1)二元Logit回归分析基本汇总

    将价格, 品牌偏好度, 性能作为自变量,而将是否购买某品牌笔记本电脑作为因变量进行二元Logit回归分析,从上表可以看出,总共有265个样本参加分析,并且没有缺失数据。

    (2)二元Logit回归模型似然比检验结果

    分析结果来源于SPSSA

    首先对模型整体有效性进行分析,从上表可知:此处模型检验的原定假设为:是否放入自变量(价格, 品牌偏好度, 性能)两种情况时模型质量均一样;这里p值小于0.05,因而说明拒绝原定假设,即说明本次构建模型时,放入的自变量具有有效性,本次模型构建有意义。

    (3)二元Logit回归分析结果汇总

    从上表可知,将价格, 品牌偏好度, 性能共3项为自变量,而将是否购买某品牌笔记本电脑作为因变量进行二元Logit回归分析,模型公式为:ln(p/1-p)=-9.900 + 3.663*价格-2.156*品牌偏好度 + 4.090*性能(其中p代表是否购买某品牌笔记本电脑为1 的概率,1-p代表是否购买某品牌笔记本电脑为0的概率)。最终具体分析可知:

    价格的回归系数值为3.663,并且呈现出0.05水平的显著性(z=2.419,p=0.016<0.05),意味着价格会对是否购买某品牌笔记本电脑产生显著的正向影响关系。以及优势比(OR值)为38.964,意味着价格增加一个单位时,是否购买某品牌笔记本电脑的变化(增加)幅度为38.964倍。


    品牌偏好度的回归系数值为-2.156,但是并没有呈现出显著性(z=-1.583,p=0.113>0.05),意味着品牌偏好度并不会对是否购买某品牌笔记本电脑产生影响关系。


    性能的回归系数值为4.090,并且呈现出0.05水平的显著性(z=3.346,p=0.001<0.05),意味着性能会对是否购买某品牌笔记本电脑产生显著的正向影响关系。以及优势比(OR值)为59.750,意味着性能增加一个单位时,是否购买某品牌笔记本电脑的变化(增加)幅度为59.750倍。


    总结分析可知:价格, 性能共2项会对是否购买某品牌笔记本电脑产生显著的正向影响关系。但是品牌偏好度并不会对是否购买某品牌笔记本电脑产生影响关系。

    此外Logit回归时会提供三个R 方值(分别是McFadden R 方、Cox & Snell R 方和Nagelkerke R 方),此3个R 方均为伪R 方值,其值越大越好,但其无法非常有效的表达模型的拟合程度,意义相对交小,而且多数情况此3个指标值均会特别小,研究人员不用过分关注于此3个指标值。一般报告其中任意一个R方值指标即可。

    (4)二元Logit回归预测准确率汇总

    通过模型预测准确率去判断模型拟合质量,从上表可知:研究模型的整体预测准确率为96.23%,模型拟合情况良好。当真实值为0时,预测准确率为96.30%;另外当真实值为1时,预测准确率为96.15%。

    (5)Hosmer-Lemeshow拟合度检验

    Hosmer-Lemeshow拟合度检验用于分析模型拟合优度情况,从上表可知:此处模型检验的原定假设为:模型拟合值和观测值的吻合程度一致;这里p值大于0.05(卡方值为3.109,p=0.927>0.05),因而说明接受原定假设,即说明本次模型通过HL检验,模型拟合优度较好。

    (6)模型预测

    将价格、品牌偏好度以及性能输入该模型就能够预测消费者是否购买某品牌笔记本电脑。

    (7)模型结果图

    可以更直观的看见自变量与因变量的关系。

    (8)coefPlot

    分析结果来源于SPSSAU

    coefPlot展示具体的回归系数值和对应的置信区间,可直观查看数据的显著性情况,如果说置信区间包括数字0则说明该项不显著,如果置信区间不包括数字0则说明该项呈现出显著性。

    6.其它说明

    (1)二元logit回归提示数据质量异常?

    如果出现此提示,建议按以下步骤进行检验。

    第一:将所有分析项(X和Y全部一起)做相关分析,查看是否有相关系数非常低或 者非常高的项;如果非常低(比如小于0.1)说明完全没有关联关系,非常高(比如 大于0.8)说明共线性问题严重,将此类自变量移除出去,再次分析就好;

    第二:检查因变量Y的分布情况,因变量Y仅仅两个数字0和1,如果分布严重不均匀(比如100个样本中仅5个样本为0,95个为1),有可能出现模型无法收敛最后无法输出结果;

    第三:自变量中放入虚拟变量,比如学历有5项,虚拟变量出来为5项,5项全部都放入了模型,这一定会出错;

    第四:分析样本量过小,比如分析项有10个,但分析样本量仅20个。

    (2)Y值只能为0或1?

    二元logistic回归研究X对Y的影响,Y为两个类别,比如是否愿意,是否喜欢,是否购买等,数字一定有且仅为2个,分别是0和1。如果不是这样就会出现此类提示,可使用SPSSAU频数分析进行检查,并且使用数据处理-数据编码功能进行处理成0和1。

    (3)crude OR和adjusted OR值?

    在SPSSAU中进行二元Logit回归,如果放入一个X,得到的OR值即为crude OR,如果放入该X的时候还放入其余的控制项,并且得到对应该X的OR值,就称为adjusted OR值。

    二、多分类logit分析

    1.基本说明

    只要是logit回归,都是研究X对于Y的影响,区别在于因变量Y上,如果Y有多个选项,并且各个选项之间不具有对比意义,例如,1代表“黑龙江省”,2代表“云南省”,3代表“四川省”,4代表“陕西省”,数值仅代表不同类别,数值大小不具有对比意义,那么应该使用多分类Logit回归分析。

    2.数据要求与处理

    如果说因变量Y的类别个数很多,比如为10个,此时建议时对类别进行组合下,尽量少的减少类别数量,便于后续进行分析。此步骤可通过SPSSAU数据处理模块的数据编码功能完成。

    如果说自变量X是定类数据,那么可对X进行虚拟哑变量处理,使用SPSSAU数据处理模块的生成变量功能。关于虚拟(哑)变量问题,请查看:(SPSSAU虚拟(哑)变量帮助手册)。其实定类数据在做影响关系研究时,通常都会做虚拟哑变量处理。

    3.SPSSAU上传数据

    (1)登录账号后进入SPSSAU页面,点击右上角“上传数据”,将处理好的数据进行“点击上传文件”上传即可。

    (2)拖拽分析项

    在“进阶方法”模块中选择“多分类Logit”方法,将Y定类变量放于上方分析框内,X定类/定量变量放于下方分析框内,点击“开始分析”即可。

    可以勾选“保存预测类别” 将预测值保存起来,可用于进—步分析使用。

    4.SPSSAU分析

    背景:研究影响手机偏好的因素(仅供案例分析)。

    (1)多分类Logistic回归分析基本汇总

    将年龄, 学历, 性别作为自变量,而将手机品牌偏好作为因变量进行多分类Logit回归分析,从上表可以看出,总共有1847个样本参加分析。

    (2)多分类Logistic回归模型似然比检验

    分析结果来源于SPSSAU

    分析建议来源于SPSSAU

    此处模型检验的原定假设为:是否放入自变量(年龄, 学历, 性别)两种情况时模型质量均一样;这里p值小于0.05,因而说明拒绝原定假设,即说明本次构建模型时,放入的自变量具有有效性,本次模型构建有意义。

    (3)多分类Logistic回归分析结果汇总

    上表格中可以看出年龄和性别的p值<0.05均呈现显著性,以下具体说明:

    女性的回归系数值为0.309,并且呈现出0.05水平的显著性(z=2.127,p=0.033<0.05),这说明女性更加偏好于小米手机。原因:在多分类logit回归中,SPSSAU将因变量Y的第1项(此处为华为手机)作为参照项。那么性别女呈现出正向影响,就说明相对于华为手机来讲,女性明显更加偏好于小米手机。

    相对华为手机来讲,年龄的回归系数值为-0.437,并且呈现出0.01水平的显著性(z=-6.076,p=0.000<0.01),负向影响,即说明年龄越大用户越偏好于华为手机。

    金立手机分析结果可以看出女性相对于更喜欢华为手机,年龄越大用户越偏好于金立手机。

    此外Logit回归时会提供三个R 方值(分别是McFadden R 方、Cox & Snell R 方和Nagelkerke R 方),此3个R 方均为伪R 方值,其值越大越好,但其无法非常有效的表达模型的拟合程度,意义相对交小,而且多数情况此3个指标值均会特别小,研究人员不用过分关注于此3个指标值。一般报告其中任意一个R方值指标即可。

    (4)预测准确率汇总

    通过模型预测准确率去判断模型拟合质量,从上表可知:研究模型的整体预测准确率为49.49 %,模型拟合情况一般。

    5.其它说明

    (1)提示“Y的选项过少或过多”?

    如果出现此提示,意味着因变量Y的选项不符合多分类logit回归分析要求,通常情况下因变量Y的分类个数应该介于3~8个之间。

    1)研究者可使用SPSSAU频数分析功能进行查看因变量Y的选项个数情况;

    2)如果选项个数过多需要进行合并处理等,可使用SPSSAU【数据处理->数据编码】功能操作。

    (2)参照项或参考项设置问题?

    进行多分类Logit时, SPSSAU默认以第一项【即数字最小的那项】作为参考项。如果需要进行改变,可使用【数据处理->数据编码】功能进行设置,将参考项的数字设为最小即可,如下图所示(原本以1作为参考项,现在改为3作为参考项,将3设置为数字最小0即可,当然设置其它更小值比如-1也可以):

    三、有序logit分析

    1.基本说明

    只要是logit回归,都是研究X对于Y的影响,区别在于因变量Y上,如果Y有多个选项,并且各个选项之间具有对比意义,例如:1代表不满意,2代表一般,3代表满意就可以使用有序logit回归分析。

    2.SPSSAU上传数据

    (1)登录账号后进入SPSSAU页面,点击右上角“上传数据”,将处理好的数据进行“点击上传文件”上传即可。

    (2)拖拽分析项

    在“进阶方法”模块中选择“有序Logit”方法,将Y定类变量放于上方分析框内,X定类/定量变量放于下方分析框内,点击“开始分析”即可。

    3.参数选择

    (1)接连函数选择

    (2)平行性检验选择

    用于检验各回归方程相互平行。如果不满足平行性检验(或出现异常),建议使用多分类Logit回归即可。

    4.SPSSAU分析

    背景:究民众幸福度影响因素,包括性别,年龄,学历和年收入水平共4个潜在的影响因素对于幸福水平的影响情况。

    (1)有序Logistic回归分析因变量频数分布

    本次有序Logit回归模型将性别(女性作为参照项), 年龄, 学历, 年收入水平作为自变量,将幸福水平作为因变量进行有序logistic回归分析,从上表可知:幸福水平共分为三个类别,分布较为均匀,其中比较幸福这一类别的占比较低为20.70%。

    (2)有序Logistic回归模型平行性检验

    首先对模型进行平行性检验,从上表可知:平行性检验的原假设是各回归方程互相平行,分析显示接受原假设(χ²=1.858,p =0.762> 0.05),因而说明本次模型通过平行性检验,模型分析结论可信,可继续进一步的分析。

    如果没有通过平行性检验则有以下建议:

    1)改用多分类logit回归;换个方法,因为一般可使用有序logit回归的数据也可以使用多分类logit回归分析;

    2)改用线性回归;可考虑换成线性回归分析尝试;

    3)改变连接函数;选择更适合的连接函数;

    4)将因变量的类别选项进行一些合并处理等,使用SPSSAU数据处理->数据编码功能。

    一般来说,有序logit回归有一定的稳健性,即平行性检验对应的p值接近于0.05时,可考虑直接接受有序logit回归分析的结果。

    (3)有序Logistic回归模型似然比检验

    首先对模型整体有效性进行分析(模型似然比检验),从上表可知:此处模型检验的原定假设为:是否放入自变量(年龄, 年收入水平, 文化程度, 性别男)两种情况时模型质量均一样;分析显示拒绝原假设(chi=62.510,p=0.000<0.05),即说明本次构建模型时,放入的自变量具有有效性,本次模型构建有意义。

    补充说明:SPSSAU还提供AIC和BIC这两个指标值,如果模型有多个,而且希望进行模型之间的优劣比较,可使用此两个指标,此两个指标是越小越好。具体可直接查看SPSSAU的智能分析和分析建议即可。

    (4)有序Logistic回归模型分析结果汇总

    (5)有序Logistic回归模型预测准确率

    通过模型预测准确率去判断模型拟合质量,从上表可知:研究模型的整体预测准确率为55.65%,模型拟合情况较差。建议剔除掉无关的自变量,或者对自变量进行数据编码组合重新处理后再次进行分析,得到更佳的分析结果,同时可考虑使用多分类logit回归进行分析。

    (6)模型结果图

    可以更直观的看见自变量与因变量的关系(基于回归系数的基础上)。

    (7)coefPlot

    coefPlot展示具体的回归系数值和对应的置信区间,可直观查看数据的显著性情况,如果说置信区间包括数字0则说明该项不显著,如果置信区间不包括数字0则说明该项呈现出显著性。可以看到年龄、年收入水平、文化程度以及性别男的or值以及95%CI。

    5.其它说明

    (1)OR值的意义

    OR值=exp(b)值,即回归系数的指数次方,该值在医学研究里面使用较多,实际意义是X增加1个单位时,Y的增加幅度。如果仅仅是研究影响关系,该值意义较小。

    (2)z 值的意义是什么?

    z 值=回归系数/标准误,该值为中间过程值无意义,只需要看p 值即可。有的软件会提供wald值(但不提供z 值,该值也无实际意义),wald值= z 值的平方。

    四、总结

    本篇文章包括二元logit回归步骤分析、多分类logit回归步骤分析、有序logit回归步骤分析,其中二元Logit回归分析时,首先可以分析p 值,如果此值小于0.05,说明具有影响关系,接着再具体研究影响关系情况即可,比如是正向影响还是负向影响关系等;除此之外,还可以写出二元Logit回归分析的模型构建公式,以及模型的预测准确率情况等。

    对于多分类Logit回归分析模型的具体情况进行分析,首先分析p 值,如果此值小于0.05,说明X对于Y有影响关系,接着再具体研究影响关系情况即可,比如是正向影响还是负向影响关系等;除此之外,还可以写出回归模型构建公式,以及模型的预测准确率情况等。

    有序Logit回归分析时,首先进行模型平行性检验,如果p 值大于0.05,说明满足平行性检验,如果p 值小于0.05,说明不满足平行性检验,此时SPSSAU建议使用多分类Logit回归分析;满足平行性检验后,接着再具体研究影响关系情况即可,比如是正向影响还是负向影响关系等;除此之外,还可以写出有序Logit回归分析的模型构建公式,以及模型的预测准确率情况等。


    以上就是本次分享的内容,登录SPSSAU官网了解更多。

    展开全文
  • 回归分析pdf回归分析pdf回归分析pdf回归分析pdf回归分析pdf回归分析pdf回归分析pdf回归分析pdf
  • 本文介绍回归模型的原理知识,包括线性回归、多项式回归和逻辑回归,并详细介绍Python Sklearn机器学习库的LinearRegression和LogisticRegression算法及回归分析实例。进入基础文章,希望对您有所帮助。

    欢迎大家来到“Python从零到壹”,在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界。所有文章都将结合案例、代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望对您有所帮助,文章中不足之处也请海涵。Python系列整体框架包括基础语法10篇、网络爬虫30篇、可视化分析10篇、机器学习20篇、大数据分析20篇、图像识别30篇、人工智能40篇、Python安全20篇、其他技巧10篇。您的关注、点赞和转发就是对秀璋最大的支持,知识无价人有情,希望我们都能在人生路上开心快乐、共同成长。

    前一篇文章讲述了数据分析部分,主要普及网络数据分析的基本概念,讲述数据分析流程和相关技术,同时详细讲解Python提供的若干第三方数据分析库,包括Numpy、Pandas、Matplotlib、Sklearn等。本文介绍回归模型的原理知识,包括线性回归、多项式回归和逻辑回归,并详细介绍Python Sklearn机器学习库的LinearRegression和LogisticRegression算法及回归分析实例。进入基础文章,希望对您有所帮助。

    下载地址:

    前文赏析:

    第一部分 基础语法

    第二部分 网络爬虫

    第三部分 数据分析和机器学习

    作者新开的“娜璋AI安全之家”将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。虽然作者是一名技术小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在Python和安全路上与大家一起进步。


    监督学习(Supervised Learning)包括分类算法(Classification)和回归算法(Regression)两种,它们是根据类别标签分布的类型来定义的。回归算法用于连续型的数据预测,分类算法用于离散型的分布预测。回归算法作为统计学中最重要的工具之一,它通过建立一个回归方程用来预测目标值,并求解这个回归方程的回归系数。

    一.回归

    1.什么是回归

    回归(Regression)最早是英国生物统计学家高尔顿和他的学生皮尔逊在研究父母和子女的身高遗传特性时提出的。1855年,他们在《遗传的身高向平均数方向的回归》中这样描述“子女的身高趋向于高于父母的身高的平均值,但一般不会超过父母的身高”,首次提出来回归的概念。现在的回归分析已经和这种趋势效应没有任何瓜葛了,它只是指源于高尔顿工作,用一个或多个自变量来预测因变量的数学方法。

    在这里插入图片描述

    图1是一个简单的回归模型,X坐标是质量,Y坐标是用户满意度,从图中可知,产品的质量越高其用户评价越好,这可以拟合一条直线来预测新产品的用户满意度。

    在回归模型中,我们需要预测的变量叫做因变量,比如产品质量;选取用来解释因变量变化的变量叫做自变量,比如用户满意度。回归的目的就是建立一个回归方程来预测目标值,整个回归的求解过程就是求这个回归方程的回归系数。

    简言之,回归最简单的定义就是:

    • 给出一个点集,构造一个函数来拟合这个点集,并且尽可能的让该点集与拟合函数间的误差最小,如果这个函数曲线是一条直线,那就被称为线性回归,如果曲线是一条三次曲线,就被称为三次多项回归。

    2.线性回归

    首先,作者引用类似于斯坦福大学机器学习公开课线性回归的例子,给大家讲解线性回归的基础知识和应用,方便大家的理解。同时,作者强烈推荐大家学习原版Andrew Ng教授的斯坦福机器学习公开课,会让您非常受益。

    在这里插入图片描述

    假设存在表1的数据集,它是某企业的成本和利润数据集。数据集中2002年到2016年的数据集称为训练集,整个训练集共15个样本数据。重点是成本和利润两个变量,成本是输入变量或一个特征,利润是输出变量或目标变量,整个回归模型如图2所示。

    在这里插入图片描述

    现建立模型,x表示企业成本,y表示企业利润,h(Hypothesis)表示将输入变量映射到输出变量y的函数,对应一个因变量的线性回归(单变量线性回归)公式如下:

    在这里插入图片描述

    那么,现在要解决的问题是如何求解的两个参数和。我们的构想是选取的参数和使得函数尽可能接近y值,这里提出了求训练集(x,y)的平方误差函数(Squared Error Function)或最小二乘法。

    在回归方程里,最小化误差平方和方法是求特征对应回归系数的最佳方法。误差是指预测y值和真实y值之间的差值,使用误差的简单累加将使得正差值和负差值相互抵消,所采用的平方误差(最小二乘法)如下:

    在这里插入图片描述

    在数学上,求解过程就转化为求一组值使上式取到最小值,最常见的求解方法是梯度下降法(Gradient Descent)。根据平方误差,定义该线性回归模型的损耗函数(Cost Function)为,公式如下:
    在这里插入图片描述

    选择适当的参数让其最小化min,即可实现拟合求解过程。通过上面的这个示例,我们就可以对线性回归模型进行如下定义:根据样本x和y的坐标,去预估函数h,寻求变量之间近似的函数关系。公式如下:

    在这里插入图片描述

    其中,n表示特征数目,表示每个训练样本的第i个特种值,当只有一个因变量x时,称为一元线性回归,类似于;而当多个因变量时,成为多元线性回归。我们的目的是使最小化,从而最好的将样本数据集进行拟合,更好地预测新的数据。

    多项式回归或逻辑回归相关知识将在后面介绍。


    二.线性回归分析

    线性回归是数据挖掘中基础的算法之一,其核心思想是求解一组因变量和自变量之间的方程,得到回归函数,同时误差项通常使用最小二乘法进行计算。在本书常用的Sklaern机器学习包中将调用Linear_model子类的LinearRegression类进行线性回归模型计算。

    1.LinearRegression

    LinearRegression回归模型在Sklearn.linear_model子类下,主要是调用fit(x,y)函数来训练模型,其中x为数据的属性,y为所属类型。sklearn中引用回归模型的代码如下:

    from sklearn import linear_model          #导入线性模型  
    regr = linear_model.LinearRegression()    #使用线性回归  
    print(regr)
    

    输出函数的构造方法如下:

    LinearRegression(copy_X=True,   
    		fit_intercept=True,   
            n_jobs=1,   
            normalize=False) 
    

    其中参数说明如下:

    • copy_X:布尔型,默认为True。是否对X复制,如果选择False,则直接对原始数据进行覆盖,即经过中心化、标准化后,把新数据覆盖到原数据上。
    • fit_intercept:布尔型,默认为True。是否对训练数据进行中心化,如果是True表示对输入的训练数据进行中心化处理,如果是False则输入数据已经中心化处理,后面的过程不再进行中心化处理。
    • n_jobs:整型,默认为1。计算时设置的任务个数,如果设置为-1表示使用所有的CPU。该参数对于目标个数大于1且规模足够大的问题有加速作用。
    • normalize:布尔型,默认为False。是否对数据进行标准化处理。

    LinearRegression类主要包括如下方法:

    在这里插入图片描述

    • fit(X,y[,n_jobs])
      对训练集X,y进行训练,分析模型参数,填充数据集。其中X为特征,y为标记或类属性。
    • predict(X)
      使用训练得到的估计器或模型对输入的X数据集进行预测,返回结果为预测值。数据集X通常划分为训练集和测试集。
    • decision_function(X)
      使用训练得到的估计器或模型对数据集X进行预测。它与predict(X)区别在于该方法包含了对输入数据的类型检查和当前对象是否存在coef_属性的检查,更安全。
    • score(X, y[,]samples_weight)
      返回对于以X为samples、y为target的预测效果评分。
    • get_params([deep])
      获取该估计器(Estimator)的参数。
    • **set_params(params)
      设置该估计器(Estimator)的参数。
    • coef_
      存放LinearRegression模型的回归系数。
    • intercept_
      存放LinearRegression模型的回归截距。

    现在对前面的企业成本和利润数据集进行线性回归实验。完整代码如下:

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    from sklearn import linear_model     #导入线性模型
    import matplotlib.pyplot as plt       
    import numpy as np
    
    #X表示企业成本 Y表示企业利润
    X = [[400], [450], [486], [500], [510], [525], [540], [549], [558], [590], [610], [640], [680], [750], [900]]
    Y = [[80], [89], [92], [102], [121], [160], [180], [189], [199], [203], [247], [250], [259], [289], [356]]
    print('数据集X: ', X)
    print('数据集Y: ', Y)
    
    #回归训练
    clf = linear_model.LinearRegression() 
    clf.fit(X, Y)
    
    #预测结果
    X2 = [[400], [750], [950]]
    Y2 = clf.predict(X2)
    print(Y2)
    res = clf.predict(np.array([1200]).reshape(-1, 1))[0]   
    print('预测成本1200元的利润:$%.1f' % res) 
    
    #绘制线性回归图形
    plt.plot(X, Y, 'ks')                 #绘制训练数据集散点图
    plt.plot(X2, Y2, 'g-')               #绘制预测数据集直线
    plt.show()
    

    调用sklearn包中的LinearRegression()回归函数,fit(X,Y)载入数据集进行训练,然后通过predict(X2)预测数据集X2的利润,并将预测结果绘制成直线,(X,Y)数据集绘制成散点图,如图3所示。

    在这里插入图片描述

    同时调用代码预测2017年企业成本为1200元的利润为575.1元。注意,线性模型的回归系数会保存在coef_变量中,截距保存在intercept_变量中。clf.score(X, Y) 是一个评分函数,返回一个小于1的得分。评分过程的代码如下:

    print('系数', clf.coef_)
    print('截距', clf.intercept_)
    print('评分函数', clf.score(X, Y))
    
    '''
    系数 [[ 0.62402912]]
    截距 [-173.70433885]
    评分函数 0.911831188777
    '''
    

    在这里插入图片描述

    该直线对应的回归函数为:y = 0.62402912 * x - 173.70433885,则X2[1]=400这个点预测的利润值为75.9,而X1中成本为400元对应的真实利润是80元,预测是基本准确的。


    2.线性回归预测糖尿病

    (1).糖尿病数据集
    Sklearn机器学习包提供了糖尿病数据集(Diabetes Dataset),该数据集主要包括442行数据,10个特征值,分别是:年龄(Age)、性别(Sex)、体质指数(Body mass index)、平均血压(Average Blood Pressure)、S1~S6一年后疾病级数指标。预测指标为Target,它表示一年后患疾病的定量指标。原网址的描述如图4所示:

    在这里插入图片描述

    下面代码进行简单的调用及数据规模的测试。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    from sklearn import datasets
    diabetes = datasets.load_diabetes()                           #载入数据  
    print(diabetes.data)                                          #数据  
    print(diabetes.target)                                        #类标  
    print('总行数: ', len(diabetes.data), len(diabetes.target))         
    print('特征数: ', len(diabetes.data[0]))                      #每行数据集维数  
    print('数据类型: ', diabetes.data.shape)                     
    print(type(diabetes.data), type(diabetes.target))     
    

    调用load_diabetes()函数载入糖尿病数据集,然后输出其数据data和类标target。输出总行数442行,特征数共10个,类型为(442L, 10L)。其输出如下所示:

    [[ 0.03807591  0.05068012  0.06169621 ..., -0.00259226  0.01990842 
      -0.01764613] 
     [-0.00188202 -0.04464164 -0.05147406 ..., -0.03949338 -0.06832974 
      -0.09220405] 
      ... 
     [-0.04547248 -0.04464164 -0.0730303  ..., -0.03949338 -0.00421986 
       0.00306441]] 
    [ 151.   75.  141.  206.  135.   97.  138.   63.  110.  310.  101. 
      ... 
    64.   48.  178.  104.  132.  220.   57.] 
    总行数:  442 442 
    特征数:  10 
    数据类型:  (442L, 10L) 
    <type 'numpy.ndarray'> <type 'numpy.ndarray'>         
    

    (2).代码实现
    现在我们将糖尿病数据集划分为训练集和测试集,整个数据集共442行,我们取前422行数据用来线性回归模型训练,后20行数据用来预测。其中取预测数据的代码为diabetes_x_temp[-20:],表示从后20行开始取值,直到数组结束,共取值20个数。

    整个数据集共10个特征值,为了方便可视化画图我们只获取其中一个特征进行实验,这也可以绘制图形,而真实分析中,通常经过降维处理再绘制图形。这里获取第3个特征,对应代码为:diabetes_x_temp = diabetes.data[:, np.newaxis, 2]。完整代码如下:

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    from sklearn import datasets  
    import matplotlib.pyplot as plt  
    from sklearn import linear_model
    import numpy as np  
    
    #数据集划分
    diabetes = datasets.load_diabetes()                #载入数据  
    diabetes_x_temp = diabetes.data[:, np.newaxis, 2]  #获取其中一个特征  
    diabetes_x_train = diabetes_x_temp[:-20]           #训练样本  
    diabetes_x_test = diabetes_x_temp[-20:]            #测试样本 后20行  
    diabetes_y_train = diabetes.target[:-20]           #训练标记  
    diabetes_y_test = diabetes.target[-20:]            #预测对比标记
    
    #回归训练及预测  
    clf = linear_model.LinearRegression()  
    clf.fit(diabetes_x_train, diabetes_y_train)        #训练数据集  
    pre = clf.predict(diabetes_x_test)
    
    #绘图  
    plt.title(u'LinearRegression Diabetes')            #标题  
    plt.xlabel(u'Attributes')                          #x轴坐标  
    plt.ylabel(u'Measure of disease')                  #y轴坐标    
    plt.scatter(diabetes_x_test, diabetes_y_test, color = 'black')  #散点图   
    plt.plot(diabetes_x_test, pre, color='blue', linewidth = 2)     #预测直线
    plt.show()          
    

    输出结果如图5所示,每个点表示真实的值,而直线表示预测的结果。

    在这里插入图片描述


    (3).代码优化
    下面代码增加了几个优化措施,包括增加了斜率、 截距的计算,可视化绘图增加了散点到线性方程的距离线,增加了保存图片设置像素代码等。这些优化都更好地帮助我们分析真实的数据集。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    from sklearn import datasets
    import numpy as np
    from sklearn import linear_model
    import matplotlib.pyplot as plt
    
    #第一步 数据集划分
    d = datasets.load_diabetes()  #数据 10*442
    x = d.data
    x_one = x[:,np.newaxis, 2]    #获取一个特征 第3列数据
    y = d.target                  #获取的正确结果
    x_train = x_one[:-42]         #训练集X [  0:400]
    x_test = x_one[-42:]          #预测集X [401:442]
    y_train = y[:-42]             #训练集Y [  0:400]
    y_test = y[-42:]              #预测集Y [401:442]
    
    #第二步 线性回归实现
    clf = linear_model.LinearRegression()
    print(clf)
    clf.fit(x_train, y_train)
    pre = clf.predict(x_test)
    print('预测结果', pre)
    print('真实结果', y_test)
       
    #第三步 评价结果
    cost = np.mean(y_test-pre)**2   #2次方
    print('平方和计算:', cost)
    print('系数', clf.coef_) 
    print('截距', clf.intercept_)  
    print('方差', clf.score(x_test, y_test))
    
    #第四步 绘图
    plt.plot(x_test, y_test, 'k.')      #散点图
    plt.plot(x_test, pre, 'g-')        #预测回归直线
    #绘制点到直线距离
    for idx, m in enumerate(x_test):
        plt.plot([m, m],[y_test[idx], pre[idx]], 'r-')
    
    plt.savefig('blog12-01.png', dpi=300) #保存图片
    plt.show()      
    

    绘制的图形如图6所示。

    在这里插入图片描述

    输出结果如下:

    LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
    预测结果 [ 196.51241167  109.98667708  121.31742804  245.95568858  204.75295782
      270.67732703   75.99442421  241.8354155   104.83633574  141.91879342
      126.46776938  208.8732309   234.62493762  152.21947611  159.42995399
      161.49009053  229.47459628  221.23405012  129.55797419  100.71606266
      118.22722323  168.70056841  227.41445974  115.13701842  163.55022706
      114.10695016  120.28735977  158.39988572  237.71514243  121.31742804
       98.65592612  123.37756458  205.78302609   95.56572131  154.27961264
      130.58804246   82.17483382  171.79077322  137.79852034  137.79852034
      190.33200206   83.20490209]
    真实结果 [ 175.   93.  168.  275.  293.  281.   72.  140.  189.  181.  209.  136.
      261.  113.  131.  174.  257.   55.   84.   42.  146.  212.  233.   91.
      111.  152.  120.   67.  310.   94.  183.   66.  173.   72.   49.   64.
       48.  178.  104.  132.  220.   57.]
    
    平方和计算: 83.192340827
    系数 [ 955.70303385]
    截距 153.000183957
    方差 0.427204267067
    

    其中cost = np.mean(y_test-pre)**2表示计算预测结果和真实结果之间的平方和,为83.192340827,根据系数和截距得出其方程为:y = 955.70303385 * x + 153.000183957。


    三.多项式回归分析

    1.基础概念

    线性回归研究的是一个目标变量和一个自变量之间的回归问题,但有时候在很多实际问题中,影响目标变量的自变量往往不止一个,而是多个,比如绵羊的产毛量这一变量同时受到绵羊体重、胸围、体长等多个变量的影响,因此需要设计一个目标变量与多个自变量间的回归分析,即多元回归分析。由于线性回归并不适用于所有的数据,我们需要建立曲线来适应我们的数据,现实世界中的曲线关系很多都是增加多项式实现的,比如一个二次函数模型:

    在这里插入图片描述

    再或者一个三次函数模型:

    在这里插入图片描述

    这两个模型我们绘制的图形如下所示:

    在这里插入图片描述

    多项式回归(Polynomial Regression)是研究一个因变量与一个或多个自变量间多项式的回归分析方法。如果自变量只有一个时,称为一元多项式回归;如果自变量有多个时,称为多元多项式回归。在一元回归分析中,如果依变量y与自变量x的关系为非线性的,但是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。17.3小节主要讲解一元多次的多项式回归分析,一元m次多项式方程如下:

    在这里插入图片描述

    其方程的求解过程希望读者下来自行学习,接下来作者主要讲解Python如何代码实现多项式回归分析的。


    2.PolynomialFeatures

    Python的多项式回归需要导入sklearn.preprocessing子类中PolynomialFeatures类实现。PolynomialFeatures对应的函数原型如下:

    class sklearn.preprocessing.PolynomialFeatures(degree=2, 
    		interaction_only=False, 
    		include_bias=True)
    

    PolynomialFeatures类在Sklearn官网给出的解释是:专门产生多项式的模型或类,并且多项式包含的是相互影响的特征集。共有三个参数,degree表示多项式阶数,一般默认值是2;interaction_only如果值是true(默认是False),则会产生相互影响的特征集;include_bias表示是否包含偏差列。

    PolynomialFeatures类通过实例化一个多项式,建立等差数列矩阵,然后进行训练和预测,最后绘制相关图形,接下来与前面的一元线性回归分析进行对比试验。


    3.多项式回归预测成本和利润

    本小节主要讲解多项式回归分析实例,分析的数据集是表17.1提供的企业成本和利润数据集。下面直接给出线性回归和多项式回归分析对比的完整代码和详细注释。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    from sklearn.linear_model import LinearRegression     
    from sklearn.preprocessing import PolynomialFeatures
    import matplotlib.pyplot as plt       
    import numpy as np
    
    #X表示企业成本 Y表示企业利润
    X = [[400], [450], [486], [500], [510], [525], [540], [549], [558], [590], [610], [640], [680], [750], [900]]
    Y = [[80], [89], [92], [102], [121], [160], [180], [189], [199], [203], [247], [250], [259], [289], [356]]
    print('数据集X: ', X)
    print('数据集Y: ', Y)
    
    #第一步 线性回归分析
    clf = LinearRegression() 
    clf.fit(X, Y)                     
    X2 = [[400], [750], [950]]
    Y2 = clf.predict(X2)
    print(Y2)
    res = clf.predict(np.array([1200]).reshape(-1, 1))[0]   
    print('预测成本1200元的利润:$%.1f' % res) 
    plt.plot(X, Y, 'ks')    #绘制训练数据集散点图
    plt.plot(X2, Y2, 'g-')  #绘制预测数据集直线
    
    #第二步 多项式回归分析
    xx = np.linspace(350,950,100) #350到950等差数列
    quadratic_featurizer = PolynomialFeatures(degree = 2) #实例化一个二次多项式
    x_train_quadratic = quadratic_featurizer.fit_transform(X) #用二次多项式x做变换
    X_test_quadratic = quadratic_featurizer.transform(X2)
    regressor_quadratic = LinearRegression()
    regressor_quadratic.fit(x_train_quadratic, Y)
    
    #把训练好X值的多项式特征实例应用到一系列点上,形成矩阵
    xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))
    plt.plot(xx, regressor_quadratic.predict(xx_quadratic), "r--",
             label="$y = ax^2 + bx + c$",linewidth=2)
    plt.legend()
    plt.show()    
    

    输出图形如下图所示,其中黑色散点图表示真实的企业成本和利润的关系,绿色直线为一元线性回归方程,红色虚曲线为二次多项式方程。它更接近真实的散点图。

    在这里插入图片描述

    这里我们使用R方(R-Squared)来评估多项式回归预测的效果,R方也叫确定系数(Coefficient of Determination),它表示模型对现实数据拟合的程度。计算R方的方法有几种,一元线性回归中R方等于皮尔逊积矩相关系数(Pearson Product Moment Correlation Coefficient)的平方,该方法计算的R方是一定介于0~1之间的正数。另一种是Sklearn库提供的方法来计算R方。R方计算代码如下:

    print('1 r-squared', clf.score(X, Y))
    print('2 r-squared', regressor_quadratic.score(x_train_quadratic, Y))
    

    输出如下所示:

    ('1 r-squared', 0.9118311887769025)
    ('2 r-squared', 0.94073599498559335)
    

    在这里插入图片描述

    一元线性回归的R方值为0.9118,多项式回归的R方值为0.9407,说明数据集中超过94%的价格都可以通过模型解释。最后补充5次项的拟合过程,下面只给出核心代码。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    from sklearn.linear_model import LinearRegression     
    from sklearn.preprocessing import PolynomialFeatures
    import matplotlib.pyplot as plt       
    import numpy as np
    
    #X表示企业成本 Y表示企业利润
    X = [[400], [450], [486], [500], [510], [525], [540], [549], [558], [590], [610], [640], [680], [750], [900]]
    Y = [[80], [89], [92], [102], [121], [160], [180], [189], [199], [203], [247], [250], [259], [289], [356]]
    print('数据集X: ', X)
    print('数据集Y: ', Y)
    
    #第一步 线性回归分析
    clf = LinearRegression() 
    clf.fit(X, Y)                     
    X2 = [[400], [750], [950]]
    Y2 = clf.predict(X2)
    print(Y2)
    res = clf.predict(np.array([1200]).reshape(-1, 1))[0]   
    print('预测成本1200元的利润:$%.1f' % res) 
    plt.plot(X, Y, 'ks')    #绘制训练数据集散点图
    plt.plot(X2, Y2, 'g-')  #绘制预测数据集直线
    
    #第二步 多项式回归分析
    xx = np.linspace(350,950,100) 
    quadratic_featurizer = PolynomialFeatures(degree = 5) 
    x_train_quadratic = quadratic_featurizer.fit_transform(X) 
    X_test_quadratic = quadratic_featurizer.transform(X2)
    regressor_quadratic = LinearRegression()
    regressor_quadratic.fit(x_train_quadratic, Y)
    #把训练好X值的多项式特征实例应用到一系列点上,形成矩阵
    xx_quadratic = quadratic_featurizer.transform(xx.reshape(xx.shape[0], 1))
    plt.plot(xx, regressor_quadratic.predict(xx_quadratic), "r--",
             label="$y = ax^2 + bx + c$",linewidth=2)
    plt.legend()
    plt.show()
    print('1 r-squared', clf.score(X, Y))
    print('5 r-squared', regressor_quadratic.score(x_train_quadratic, Y))
    
    # ('1 r-squared', 0.9118311887769025)
    # ('5 r-squared', 0.98087802460869788)
    

    输出如下所示,其中红色虚线为五次多项式曲线,它更加接近真实数据集的分布情况,而绿色直线为一元线性回归方程,显然相较于五次多项式曲线,线性方程拟合的结果更差。同时,五次多项式曲线的R方值为98.08%,非常准确的预测了数据趋势。

    在这里插入图片描述

    最后补充一点,建议多项式回归的阶数不要太高,否则会出现过拟合现象。


    四.逻辑回归

    1.基础原理

    在前面讲述的回归模型中,处理的因变量都是数值型区间变量,建立的模型描述是因变量的期望与自变量之间的线性关系或多项式曲线关系。比如常见的线性回归模型:

    在这里插入图片描述

    而在采用回归模型分析实际问题中,所研究的变量往往不全是区间变量而是顺序变量或属性变量,比如二项分布问题。通过分析年龄、性别、体质指数、平均血压、疾病指数等指标,判断一个人是否换糖尿病,Y=0表示未患病,Y=1表示患病,这里的响应变量是一个两点(0或1)分布变量,它就不能用h函数连续的值来预测因变量Y(Y只能取0或1)。

    总之,线性回归或多项式回归模型通常是处理因变量为连续变量的问题,如果因变量是定性变量,线性回归模型就不再适用了,此时需采用逻辑回归模型解决。

    逻辑回归(Logistic Regression)是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法。

    在这里插入图片描述

    二分类问题的概率与自变量之间的关系图形往往是一个S型曲线,如图17.10所示,采用的Sigmoid函数实现。这里我们将该函数定义如下:

    在这里插入图片描述

    函数的定义域为全体实数,值域在[0,1]之间,x轴在0点对应的结果为0.5。当x取值足够大的时候,可以看成0或1两类问题,大于0.5可以认为是1类问题,反之是0类问题,而刚好是0.5,则可以划分至0类或1类。对于0-1型变量,y=1的概率分布公式定义如下:

    在这里插入图片描述

    y=0的概率分布公式定义如下:

    在这里插入图片描述

    其离散型随机变量期望值公式如下:

    在这里插入图片描述

    采用线性模型进行分析,其公式变换如下:

    在这里插入图片描述

    而实际应用中,概率p与因变量往往是非线性的,为了解决该类问题,我们引入了logit变换,使得logit§与自变量之间存在线性相关的关系,逻辑回归模型定义如下:

    在这里插入图片描述

    通过推导,概率p变换如下,这与Sigmoid函数相符,也体现了概率p与因变量之间的非线性关系。以0.5为界限,预测p大于0.5时,我们判断此时y更可能为1,否则y为0。

    在这里插入图片描述

    得到所需的Sigmoid函数后,接下来只需要和前面的线性回归一样,拟合出该式中n个参数θ即可。下列为绘制Sigmoid曲线,输出如图10所示。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    import matplotlib.pyplot as plt
    import numpy as np
    
    def Sigmoid(x):
        return 1.0 / (1.0 + np.exp(-x))
    
    x= np.arange(-10, 10, 0.1)
    h = Sigmoid(x)                #Sigmoid函数
    plt.plot(x, h)
    plt.axvline(0.0, color='k')   #坐标轴上加一条竖直的线(0位置)
    plt.axhspan(0.0, 1.0, facecolor='1.0', alpha=1.0, ls='dotted')  
    plt.axhline(y=0.5, ls='dotted', color='k') 
    plt.yticks([0.0, 0.5, 1.0])  #y轴标度
    plt.ylim(-0.1, 1.1)          #y轴范围
    plt.show()
    

    由于篇幅有限,逻辑回归构造损失函数J函数,求解最小J函数及回归参数θ的方法就不在叙述,原理和前面介绍的一样,请读者下去深入研究。

    在这里插入图片描述


    2.LogisticRegression

    LogisticRegression回归模型在Sklearn.linear_model子类下,调用sklearn逻辑回归算法步骤比较简单,即:

    • 导入模型。调用逻辑回归LogisticRegression()函数。
    • fit()训练。调用fit(x,y)的方法来训练模型,其中x为数据的属性,y为所属类型。
    • predict()预测。利用训练得到的模型对数据集进行预测,返回预测结果。

    代码如下:

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    from sklearn.linear_model import LogisticRegression  #导入逻辑回归模型 
    clf = LogisticRegression()
    print(clf)
    clf.fit(train_feature,label)
    predict['label'] = clf.predict(predict_feature)
    

    输出函数的构造方法如下:

    LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
              intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
              penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
              verbose=0, warm_start=False)
    

    这里仅介绍两个参数:参数penalty表示惩罚项,包括两个可选值L1和L2。L1表示向量中各元素绝对值的和,常用于特征选择;L2表示向量中各个元素平方之和再开根号,当需要选择较多的特征时,使用L2参数,使他们都趋近于0。C值的目标函数约束条件为:s.t.||w||1<C,默认值是0,C值越小,则正则化强度越大。


    3.鸢尾花数据集回归分析实例

    下面将结合Scikit-learn官网的逻辑回归模型分析鸢尾花数据集。由于该数据分类标签划分为3类(0类、1类、2类),属于三分类问题,所以能利用逻辑回归模型对其进行分析。

    (1).鸢尾花数据集
    在Sklearn机器学习包中,集成了各种各样的数据集,包括前面的糖尿病数据集,这里引入的是鸢尾花卉(Iris)数据集,它也是一个很常用的数据集。该数据集一共包含4个特征变量,1个类别变量,共有150个样本。其中四个特征分别是萼片的长度和宽度、花瓣的长度和宽度,一个类别变量是标记鸢尾花所属的分类情况,该值包含三种情况,即山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。鸢尾花数据集详细介绍如表2所示:

    在这里插入图片描述

    Class 类别变量。0表示山鸢尾,1表示变色鸢尾,2表示维吉尼亚鸢尾。 int
    iris里有两个属性iris.data,iris.target。data是一个矩阵,每一列代表了萼片或花瓣的长宽,一共4列,每一行代表一个被测量的鸢尾植物,一共采样了150条记录,即150朵鸢尾花样本。

    from sklearn.datasets import load_iris   #导入数据集iris
    iris = load_iris()  #载入数据集
    print(iris.data)
    

    输出如下所示:

    [[ 5.1  3.5  1.4  0.2]
     [ 4.9  3.   1.4  0.2]
     [ 4.7  3.2  1.3  0.2]
     [ 4.6  3.1  1.5  0.2]
     ....
     [ 6.7  3.   5.2  2.3]
     [ 6.3  2.5  5.   1.9]
     [ 6.5  3.   5.2  2. ]
     [ 6.2  3.4  5.4  2.3]
     [ 5.9  3.   5.1  1.8]]
    

    target是一个数组,存储了每行数据对应的样本属于哪一类鸢尾植物,要么是山鸢尾(值为0),要么是变色鸢尾(值为1),要么是维吉尼亚鸢尾(值为2),数组的长度是150。

    print(iris.target)           #输出真实标签
    print(len(iris.target))      #150个样本 每个样本4个特征
    print(iris.data.shape)  
    
    [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
     1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
     2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
     2 2]
    150
    (150L, 4L)
    

    从输出结果可以看到,类标共分为三类,前面50个类标位0,中间50个类标位1,后面为2。下面给详细介绍使用逻辑回归对这个数据集进行分析的代码。


    (2).散点图绘制
    在载入了鸢尾花数据集(数据data和标签target)之后,我们需要获取其中两列数据或两个特征,再调用scatter()函数绘制散点图。其中获取一个特征的核心代码为:X = [x[0] for x in DD],将获取的值赋值给X变量。完整代码如下:

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn.datasets import load_iris    #导入数据集iris
      
    #载入数据集  
    iris = load_iris()  
    print(iris.data)           #输出数据集  
    print(iris.target)         #输出真实标签
    
    #获取花卉两列数据集  
    DD = iris.data  
    X = [x[0] for x in DD]  
    print(X)  
    Y = [x[1] for x in DD]  
    print(Y)  
      
    #plt.scatter(X, Y, c=iris.target, marker='x')
    plt.scatter(X[:50], Y[:50], color='red', marker='o', label='setosa') #前50个样本
    plt.scatter(X[50:100], Y[50:100], color='blue', marker='x', label='versicolor') #中间50个
    plt.scatter(X[100:], Y[100:],color='green', marker='+', label='Virginica') #后50个样本
    plt.legend(loc=2) #左上角
    plt.show()
    

    输出如图11所示:

    在这里插入图片描述


    (3).线性回归分析
    下述代码先获取鸢尾花数据集的前两列数据,再调用Sklearn库中线性回归模型进行分析,完整代码如文件所示。

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    
    #第一步 导入数据集
    from sklearn.datasets import load_iris
    hua = load_iris()
    
    #获取花瓣的长和宽
    x = [n[0] for n in hua.data]
    y = [n[1] for n in hua.data]
    import numpy as np #转换成数组
    x = np.array(x).reshape(len(x),1)
    y = np.array(y).reshape(len(y),1)
    
    #第二步 线性回归分析
    from sklearn.linear_model import LinearRegression
    clf = LinearRegression()
    clf.fit(x,y)
    pre = clf.predict(x)
    print(pre)
    
    #第三步 画图
    import matplotlib.pyplot as plt
    plt.scatter(x,y,s=100)
    plt.plot(x,pre,"r-",linewidth=4)
    for idx, m in enumerate(x):
        plt.plot([m,m],[y[idx],pre[idx]], 'g-')
    plt.show()
    

    输出图形如图12所示,并且可以看到所有散点到拟合的一元一次方程的距离。

    在这里插入图片描述


    (4).逻辑回归分析鸢尾花
    讲解完线性回归分析之后,那如果用逻辑回归分析的结果究竟如何呢?下面开始讲述。从散点图(图11)中可以看出,数据集是线性可分的,划分为3类,分别对应三种类型的鸢尾花,下面采用逻辑回归对其进行分析预测。

    前面使用X=[x[0] for x in DD]获取第一列数据,Y=[x[1] for x in DD]获取第二列数据,这里采用另一种方法,iris.data[:, :2]获取其中两列数据或两个特征,完整代码如下:

    # -*- coding: utf-8 -*-
    # By:Eastmount CSDN 2021-07-03
    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn.datasets import load_iris   
    from sklearn.linear_model import LogisticRegression 
    
    #载入数据集
    iris = load_iris()         
    X = X = iris.data[:, :2]   #获取花卉两列数据集
    Y = iris.target           
    
    #逻辑回归模型
    lr = LogisticRegression(C=1e5)  
    lr.fit(X,Y)
    
    #meshgrid函数生成两个网格矩阵
    h = .02
    x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
    y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
    
    #pcolormesh函数将xx,yy两个网格矩阵和对应的预测结果Z绘制在图片上
    Z = lr.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)
    plt.figure(1, figsize=(8,6))
    plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)
    
    #绘制散点图
    plt.scatter(X[:50,0], X[:50,1], color='red',marker='o', label='setosa')
    plt.scatter(X[50:100,0], X[50:100,1], color='blue', marker='x', label='versicolor')
    plt.scatter(X[100:,0], X[100:,1], color='green', marker='s', label='Virginica') 
    
    plt.xlabel('Sepal length')
    plt.ylabel('Sepal width')
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())
    plt.xticks(())
    plt.yticks(())
    plt.legend(loc=2) 
    plt.show()
    

    输出如图13所示。经过逻辑回归后划分为三个区域,左上角部分为红色的圆点,对应setosa鸢尾花;右上角部分为绿色方块,对应virginica鸢尾花;中间下部分为蓝色星形,对应versicolor鸢尾花。散点图为各数据点真实的花类型,划分的三个区域为数据点预测的花类型,预测的分类结果与训练数据的真实结果结果基本一致,部分鸢尾花出现交叉。

    在这里插入图片描述

    下面作者对导入数据集后的代码进行详细讲解。

    • lr = LogisticRegression(C=1e5)
      初始化逻辑回归模型,C=1e5表示目标函数。
    • lr.fit(X,Y)
      调用逻辑回归模型进行训练,参数X为数据特征,参数Y为数据类标。
    • x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
    • y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
    • xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
      获取鸢尾花数据集的两列数据,对应为花萼长度和花萼宽度,每个点的坐标就是(x,y)。 先取X二维数组的第一列(长度)的最小值、最大值和步长h(设置为0.02)生成数组,再取X二维数组的第二列(宽度)的最小值、最大值和步长h生成数组, 最后用meshgrid函数生成两个网格矩阵xx和yy,如下所示:
    [[ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
     [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
     ..., 
     [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
     [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]]
    [[ 1.5   1.5   1.5  ...,  1.5   1.5   1.5 ]
     [ 1.52  1.52  1.52 ...,  1.52  1.52  1.52]
     ..., 
     [ 4.88  4.88  4.88 ...,  4.88  4.88  4.88]
     [ 4.9   4.9   4.9  ...,  4.9   4.9   4.9 ]]
    
    • Z = lr.predict(np.c_[xx.ravel(), yy.ravel()])
      调用ravel()函数将xx和yy的两个矩阵转变成一维数组,由于两个矩阵大小相等,因此两个一维数组大小也相等。np.c_[xx.ravel(), yy.ravel()]是获取并合并成矩阵,即:
    xx.ravel() 
    [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
    yy.ravel() 
    [ 1.5  1.5  1.5 ...,  4.9  4.9  4.9]
    np.c_[xx.ravel(), yy.ravel()]
    [[ 3.8   1.5 ]
     [ 3.82  1.5 ]
     [ 3.84  1.5 ]
     ..., 
     [ 8.36  4.9 ]
     [ 8.38  4.9 ]
     [ 8.4   4.9 ]]
    

    总之,上述操作是把第一列花萼长度数据按h取等分作为行,并复制多行得到xx网格矩阵;再把第二列花萼宽度数据按h取等分作为列,并复制多列得到yy网格矩阵;最后将xx和yy矩阵都变成两个一维数组,再调用np.c_[]函数将其组合成一个二维数组进行预测。

    • Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()])
      调用predict()函数进行预测,预测结果赋值给Z。即:
    Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()])
    [1 1 1 ..., 2 2 2]
    size: 39501
    
    • Z = Z.reshape(xx.shape)
      调用reshape()函数修改形状,将Z变量转换为两个特征(长度和宽度),则39501个数据转换为171*231的矩阵。Z = Z.reshape(xx.shape)输出如下:
    [[1 1 1 ..., 2 2 2]
     [1 1 1 ..., 2 2 2]
     [0 1 1 ..., 2 2 2]
     ..., 
     [0 0 0 ..., 2 2 2]
     [0 0 0 ..., 2 2 2]
     [0 0 0 ..., 2 2 2]]
    
    • plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)
      调用pcolormesh()函数将xx、yy两个网格矩阵和对应的预测结果Z绘制在图片上,可以发现输出为三个颜色区块,分布表示分类的三类区域。cmap=plt.cm.Paired表示绘图样式选择Paired主题,输出区域如下图所示:

    在这里插入图片描述

    • plt.scatter(X[:50,0], X[:50,1], color=‘red’,marker=‘o’, label=‘setosa’)
      调用scatter()绘制散点图,第一个参数为第一列数据(长度),第二个参数为第二列数据(宽度),第三、四个参数为设置点的颜色为红色,款式为圆圈,最后标记为setosa。

    五.本章小结

    回归分析是通过建立一个回归方程用来预测目标值,并求解这个回归方程的回归系数的方法。它是统计学中最重要的工具之一,包括线性回归、多项式回归、逻辑回归、非线性回归等。常用来确定变量之间是否存在相关关系,并找出数学表达式,也可以通过控制几个变量的值来预测另一个变量的值,比如房价预测、增长趋势、是否患病等问题。

    在Python中,我们通过调用Sklearn机器学习库的LinearRegression模型实现线性回归分析,调用PolynomialFeatures模型实现多项式回归分析,调用LogisticRegression模型实现逻辑回归分析。希望读者实现本章节中的每一部分代码,从而更好的用于自己的研究领域、解决自己遇到的问题。

    该系列所有代码下载地址:

    感谢在求学路上的同行者,不负遇见,勿忘初心。这周的留言感慨~

    在这里插入图片描述

    (By:娜璋之家 Eastmount 2021-07-03 夜于武汉 https://blog.csdn.net/Eastmount )


    参考文献:

    • [1] 杨秀璋. 专栏:知识图谱、web数据挖掘及NLP - CSDN博客[EB/OL]. (2016-09-19)[2017-11-07]. http://blog.csdn.net/column/details/eastmount-kgdmnlp.html.
    • [2] 张良均,王路,谭立云,苏剑林. Python数据分析与挖掘实战[M]. 北京:机械工业出版社,2016.
    • [3] (美)Wes McKinney著. 唐学韬等译. 利用Python进行数据分析[M]. 北京:机械工业出版社,2013.
    • [4] Jiawei Han,Micheline Kamber著. 范明,孟小峰译. 数据挖掘概念与技术. 北京:机械工业出版社,2007.
    • [5] 杨秀璋. [Python数据挖掘课] 五.线性回归知识及预测糖尿病实例[EB/OL].(2016-10-28)[2017-11-07]. http://blog.csdn.net/eastmount/article/details/52929765.
    • [6] 杨秀璋. [Python数据挖掘课程] 九.回归模型LinearRegression简单分析氧化物数据[EB/OL]. (2017-03-05)[2017-11-07].http://blog.csdn.net/eastmount/article/
      details/60468818.
    • [7] scikit-learn. sklearn.linear_model.LogisticRegression[EB/OL]. (2017)[2017-11-17]. http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html.
    • [8] scikit-learn. Logistic Regression 3-class Classifier[EB/OL]. (2017)[2017-11-17]. http://scikit-learn.org/stable/auto_examples/linear_model/plot_iris_logistic.html#sphx-glr-auto-examples-linear-model-plot-iris-logistic-py.
    • [9] 吴恩达. Coursera公开课: 斯坦福大学机器学习"[EB/OL]. (2011-2017)[2017-11-15]. http://open.163.com/special/opencourse/machinelearning.html.
    • [10] scikit-learn. Sklearn Datasets[EB/OL]. (2017)[2017-11-15]. http://scikit-learn.org/
      stable/datasets/.
    • [11] lsldd. 用Python开始机器学习(7:逻辑回归分类)[EB/OL]. (2014-11-27)[2017-11-15]. http://blog.csdn.net/lsldd/article/details/41551797.
    • [12] 杨秀璋. [python数据挖掘课程] 十六.逻辑回归LogisticRegression分析鸢尾花数据[EB/OL]. (2017-09-10)[2017-11-15]. http://blog.csdn.net/eastmount/article/details/77920470.
    • [13] 杨秀璋. [python数据挖掘课程] 十八.线性回归及多项式回归分析四个案例分享[EB/OL]. (2017-11-26)[2017-11-26]. http://blog.csdn.net/eastmount/article/details/78635096.
    展开全文
  • 回归分析是什么?回归是一种数据分析方法,研究两个或多个变量之间的关系。不同于上一篇所讲的相关分析,回归分析能确定Y与X间的定量关系表达式(回归方程),因此,它可以揭示各个X对Y的影响程度大小 帮助建立预测...
  • 多元线性回归分析

    千次阅读 2021-10-21 09:24:41
    回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。...
  • 回归分析课后题答案

    千次阅读 2022-01-14 19:47:00
    回归分析课后题 第一章 1.1变量间统计关系和函数关系的区别是什么? 变量间的统计关系或相关关系:变量间具有密切关联而又不能由某一个或某一些变量 唯一确定另外一个变量的关系, 这种统计关系规律性的研究是统计学...
  • 上期学习了怎样汇总单因素 Cox 回归的结果,这期学习单因素;回归分的汇总,由于使用的是 coxph和 glm 两个函数结果的展示有所不同,因此整理过程略有不同,但是提取的信息是一致的。
  • excel回归分析结果解读

    千次阅读 2021-01-17 14:44:26
    回归”一词的由来我们不必在“回归”一词上费太多脑筋。英国著名统计学家弗朗西斯·高尔顿(Francis Galton,1822—1911)是最先应用统计方法研究两个变量之间关系问题的人。“回归”一词就是由他引入的。他对父母...
  • 该方法使用的是Excel自带加载项的回归分析工具。之所以利用Excel只是因为它的操作比较简单,自带的VBA很方便。不用涉及其他的代码操作。 回归分析通过对一组观察值使用“最小二乘法”直线拟合来执行线性回归分析。 ...
  • 回归分析预测技术介绍

    千次阅读 2021-08-18 22:49:34
    目录 一、线性回归 二、Spark MLlib 的 SGD 线性回归算法 三、Spark MLlib 的 SGD 线性回归算法实例 ...1)依据相关关系中自变量的个数不同进行分类,回归方法可分为一元回归分析法和多元回归...
  • 第13章Stata Logistic回归分析

    千次阅读 2021-07-17 10:16:13
    根据因变量得离散特征:常用得Logistic回归分析方法有3终,包括二元Logistic回归分析、多元Logistic回归分析以及有序Logistic回归分析等。 13.1二元Logistic回归分析 我们经常会遇到因变量只有两种取值的情况,...
  • 回归分析——简单线性回归实例讲解(SPSS)

    万次阅读 多人点赞 2020-09-06 22:07:58
    什么是回归分析回归分析是研究自变量与因变量之间数量变化关系的一种分析方法,它主要是通过因变量Y与影响它的自变量Xi(i1,2,3…)之间的回归模型,衡量自变量Xi对因变量Y的影响能力的,进而可以用来预测因变量Y...
  • 多元线性回归分析(Stata)

    万次阅读 多人点赞 2022-01-14 10:12:47
    回归分析的介绍与分类 回归分析的任务是:通过研究自变量X和因变量Y的关系,尝试去解释Y的形成机制,进而达到通过X去预测Y的目的 三个关键字:相关性、因变量Y、自变量X 常见的回归分析有五类(划分的依据是因...
  • 参考我的个人博客: 分类器设计之logistic回归分析 http://blog.csdn.net/ranchlai/article/details/10022637
  • 如何用python进行回归分析

    千次阅读 2020-11-30 02:00:26
    广告关闭腾讯云11.11云上盛惠 ,... 本文讲述如何用python进行基本的数据拟合,以及如何对拟合结果的误差进行分析。 本例中使用一个2次函数加上随机的扰动来生成500个点,然后尝试用1、2、100次方的多项式对该数据...
  • 数学建模:SPSS线性回归分析——逐步回归分析

    万次阅读 多人点赞 2021-08-01 19:42:48
    针对变量关系研究方法,包括了相关关系研究以及影响关系研究,大致将常用分析方法归纳为:相关分析,线性回归分析,Logistic回归分析,SEM结构方程 1.相关性检验 为何要进行相关性检验 1.目的主要是观察各自...
  • 七种常见的回归分析

    万次阅读 多人点赞 2020-09-26 10:09:32
    什么是回归分析回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。例如,司机的鲁莽驾驶与道路交通...
  • 数学建模—多元回归分析

    千次阅读 2020-07-08 13:42:45
    title: 数学建模—多元回归分析 tags: 建模 EverydayOneCat 木星全貌???? 知识点 1.笔记 在了接受域中,接受X为0的假设,X对外没有比较显著的线性关系。 2.知识点补充 多元回归模型:含两个以上解释变量的回归...
  • 数学建模之回归分析加例题详解(MATLAB实现)

    万次阅读 多人点赞 2020-08-03 16:06:14
    一元线性回归 变量之间的关系大致可分为两大类: 确定性的关系:可以用精确的函数关系来表达。例如矩形面积S与边长a,b的关系。 非确定性的关系:变量之间既互相联系但又不是完全确定的关系...只有两个变量的回归分析, 称
  • 【统计学笔记】方差分析表和回归分析表的解读

    万次阅读 多人点赞 2020-12-30 12:03:48
    1. 方差分析表 1.1 单因素方差分析表 误差来源 平方和SSSSSS 自由度dfdfdf 均方MSMSMS FFF值 PPP值 FFF临界值Significance  FSignificance \; FSignificanceF 组间(因素影响)factor  Afactor \; \bold...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 249,576
精华内容 99,830
关键字:

回归分析