精华内容
下载资源
问答
  • spss logistic回归分析结果如何分析

    千次阅读 2016-12-17 16:24:00
    logistic回归分析结果如何分析 如何用spss17.0进行二元和多元logistic回归分析 一、二元logistic回归分析 二元logistic回归分析的前提为因变量是可以转化为0、1的二分变量,如:死亡或者生存,男性或者女性,有或...

    spss logistic回归分析结果如何分析

    如何用spss17.0进行二元和多元logistic回归分析

    一、二元logistic回归分析

    二元logistic回归分析的前提为因变量是可以转化为0、1的二分变量,如:死亡或者生存,男性或者女性,有或无,Yes或No,是或否的情况。

    下面以医学中不同类型脑梗塞与年龄和性别之间的相互关系来进行二元logistic回归分析。

    (一)数据准备和SPSS选项设置

    第一步,原始数据的转化:如图1-1所示,其中脑梗塞可以分为ICAS、ECAS和NCAS三种,但现在我们仅考虑性别和年龄与ICAS的关系,因此将分组数据ICAS、ECAS和NCAS转化为1、0分类,是ICAS赋值为1,否赋值为0。年龄为数值变量,可直接输入到spss中,而性别需要转化为(1、0)分类变量输入到spss当中,假设男性为1,女性为0,但在后续分析中系统会将1,0置换(下面还会介绍),因此为方便期间我们这里先将男女赋值置换,即男性为“0”,女性为“1”。 图 1-1

    第二步:打开“二值Logistic 回归分析”对话框:

    沿着主菜单的“分析(Analyze)→回归(Regression)→二元logistic(Binary Logistic)”的路径(图1-2)打开二值Logistic 回归分析选项框(图1-3)。

    如图1-3左侧对话框中有许多变量,但在单因素方差分析中与ICAS显著相关的为性别、年龄、有无高血压,有无糖尿病等(P<0.05),因此我们这里选择以性别和年龄为例进行分析。

    在图1-3中,因为我们要分析性别和年龄与ICAS的相关程度,因此将ICAS选入因变量(Dependent)中,而将性别和年龄选入协变量(Covariates)框中,在协变量下方的“方法(Method)”一栏中,共有七个选项。采用第一种方法,即系统默认的强迫回归方法(进入“Enter”)。 接下来我们将对分类(Categorical),保存(Save),选项(Options)按照如图1-4、1-5、1-6中所示进行设置。在“分类”对话框中,因为性别为二分类变量,因此将其选入分类协变量中,参考类别为在分析中是以最小数值“0(第一个)”作为参考,还是将最大数值“1(最后一个)”作为参考,这里我们选择第一个“0”作为参考。在“存放”选项框中是指将不将数据输出到编辑显示区中。在“选项”对话框中要勾选如图几项,其中“exp(B)的CI(X)”一定要勾选,这个就是输出的OR和CI值,后面的95%为系统默认,不需要更改。


    另外在“选项”对话框中,“输出”一栏中,系统默认为“在每个步骤中”,这里更改为“在最后一个步骤中”,即:输出结果将仅仅给出最终结果,而省略每一步的计算过程。由于我们采用强迫回归,逐步回归概率选项可以不管

    此外还有一个选项需要说明。一是分类临界值(Classification cutoff),默认值为0.5,即按四舍五入的原则将概率预测值化为0 或者1

    。如果

    将数值改为0.6,则大于等于0.6 的概率值才表示为1,否则为0。其情况余依此类推。二是最大迭代值(Maximum Iterations),规定系统运算的迭代次数,默认值为20 次,为安全起见,我们将迭代次数增加到50。原因是,有时迭代次数太少,计算结果不能真正收敛。三是模型中包括常数项(Include constant in model),即模型中保留截距。除了迭代次数之外,其余两个选项均采用系统默认值。

    完成后,点击各项中“继续(Continue)”按钮。返回图1-3,单击“确定”按钮。

    (二)结果解读

    其他结果参照文章《利用SPSS进行Logistic回归分析》中解读,这里重点将两点: 第一,分类变量编码(图1-7),由于这里包括性别分类变量,而我们对性别赋值为1和0,但在spss中系统会默认把我们的数值进行置换,即1→参数编码0,0→参数编码1,而最终输出结果是以1来计算的,而0为参考数据。所以这也就是为什么我么之前要对研究组男性的赋值进行置换了。如果男性为1那么spss中最终输出的将是女性的分析结果。

    图1-7

    第二,最终输出数据(图1-8)在该结果中,Exp(B)即为文献中提及的OR值,而EXP(B)的95%C.I.即为文献中提及的CI值。其中Exp(B)表示某因素(自变量)内该类别是其相应参考类别具有某种倾向性的倍数。而有的文献中提到的Crode OR和Adjust OR则分别为单因素优势率(Crode odds ratio)和多因素优势率(Adjust odds ratio),即仅对性

    别单个变量的单因素分析或者对性别和年龄等多个变量进行多因素分析后所得到的不同结果。CI则为可信区间(Confidence interval)。Sig.即我们常说的P值,P<0.05为显著(无效假说不成立,具有统计学意义),P>0.05为不显著(无效假说成立,不具有统计学意义)。 二、多项(多元、多分类、Multinomial)logistic回归分析

    前面讲的二元logistic回归分析仅适合因变量Y只有两种取值(二分类)的情况,当Y具有两种以上的取值时,就要用多项logistic回归(Mutinomial Logistic Regression)分析了。这种分析不仅可以用于医疗领域,也可以用于社会学、经济学、农业研究等多个领域。如不同阶段(初

    一、初二、初三)学生视力下降程度,不同龋齿情况(轻度、中度、重度)下与刷牙、饮食、年龄的关系等。

    下面我们以图1-2中,对apoba1(ApoB/AI)项中数值做四分位数后,将病人的ApoB/AI的比值划分为低、较低、中、高四个分位后利用多项logistic回归分析其与ICAS之间的相互关系。

    首先来做四分位数,很多人在做四分位数的时候都是自己算出来的,其实在SPSS里面给出了做四分位数的程度即分析(Aanlyze)→描述统计(Descriptive Statistics)→频率(Frequencies)。打如图2-1开频率对话框。将我们要分析的数值变量Apoba1选入到变量对话框中。 选择统计量,按照图2-2中勾选四分位数选项,其他选项按照自己需要勾选,然后点击图2-1中的确定按钮,开始运算。在图2-3中可以读取我们的四分位数

    值。图中百分数表示的是对该变量做的四分位数的百分比,25表示前25%的,50表示前50%的,75表示前75%的。每一项对应的后面数值即为相应的四分位数,如0.5904,即为前25%的个体与后75%个体的分位数。

    按照如上方法得出ApoB/AI的比率后我们可以把该比值划分为四个区间,即当ApoB/AI的比率<0.5904为低、当0.5904≤ApoB/AI的比率≤0.88时为较低、当0.89≤ApoB/AI的比率≤1.0886时为中,当ApoB/AI的比率>1.0886时为高。然后将这一划分如图1-1中“四分位数”一项用分类数值表示即1代表低,2代表较低,3代表中,4代表高。这里还要强调的是我们要研究其与ICAS之间的相互关系,那么我们需要将其设为二分类变量,即是ICAS的情况为1,否则为0,但多项logistic回归分析也会将1,0置换,所以我们需要在这里将我们需要研究的情况置换为0,然后将其他置换为1。下面就可以进行多项logistic回归分析了。如图

    2-4打开多项logistic回归分析对话框(图2-5)。

    如图2-5所示,在”因变量”中选入刚才我们输入的四分位数分类变量,在因子中输入分类变量ICAS(这里一定是分类变量,可以是一个也可以是多个),在“协变量”中输入数值变量如年龄(这里一定是数值变量,

    可以是一个也可以是多个),但因本次没有对年龄进行分析,仅对ICAS进行了单因素分析,所以我们把年龄移出协变量选项。

    在SPSS中对因变量的定义是,如果因变量Y有J个值(即Y有J类),以其中一个类别作为参考类别,其他类别都同他相比较生成J-1个冗余的Logit变换模型,而作为参考类别的其模型中所有系数均为0。在SPSS中可以对所选因变量的参考类别进行设置,如图2-5在因变量对话框下有一“参考类别”选项。点击后会弹出图2-6对话框。在该对话框中我们选中设定,输入数值1,这代表我们以分类数值1所代表的类别作为参考类别,即最低数值作为参考类别。 单击继续。当然也可以选择“第一类别”和“最后类别”,入选中分别表示以最低数值或最高数值作为参考类别。其他设置与二元Logistic分析相似,将我们要输出的项勾选即可,点击图2-5中确定,输出数据。 输出数据基本与二元Logistic分析相似,我们重点讲下最后一项“参考估计”,如图2-7所示,其中参考类别为ICAS=1的分类情况,而其中的ICAS=0分为2、3、4三种,分别给出了ICAS=0时的数值。而其中Exp(B)(即OR值)表示某因素(自变量)内该类别是其相应参考类别具有某种倾向性的倍数。如Exp(B)=2.235时,即表示在较轻这一类别下ICAS患者数为其他类别(ECAS和NCAS)的2.235倍。这里面的显著水平即为P值。数据分析培训

    这里要强调的是,一些文献中在输出数据的时候经常会给出“Referent(参考)”项,这里的Referent,即为我们这里所选的参考类别1,因为

    1作为参考类别,所以其所有数值为0

    ,即无数据输出。因此在文中需标注其为Referent。

    转载于:https://www.cnblogs.com/amengduo/p/9587237.html

    展开全文
  • 空间统计(五)诊断回归分析结果

    万次阅读 2015-03-31 14:52:33
    为了理解、解释、预测某个问题,我们会进行回归分析。上一篇中提到了回归模型中的因变量和解释变量的概念,用一组解释变量来建模解释因变量,但事实上,选择一组优质的解释变量并不是那么容易。通常我们会根据一些...

    为了理解、解释、预测某个问题,我们会进行回归分析。上一篇中提到了回归模型中的因变量和解释变量的概念,用一组解释变量来建模解释因变量,但事实上,选择一组优质的解释变量并不是那么容易。通常我们会根据一些常识、理论基础、某些研究、专家的意见、参考文献等等选择一组解释变量,来进行解释变量的筛选。在ArcGIS Desktop中,当我们使用 普通最小二乘法(OLS)执行回归分析的时候,工具会进行诊断测试,提供一个汇总报告,帮助我们诊断回归分析的质量。这篇文章咱们就围绕这个话题展开——回归分析的结果诊断。



    六项检查


    帮助文档中也有相关的内容,但是觉得相对还是比较晦涩,我就结合Esri Global UC的视频介绍一下。内容不尽相同,但是对学习回归分析是有帮助的。





    Check #1 解释变量与因变量具有预期的关系否?

    这里写图片描述

    每个解释变量都会有一个系数,系数具有+/-号,来表示解释变量与因变量的关系。从工具的得到的报告中,我们看到的系数的正负,每个解释变量应该是我们期望的关系。如果有非常不符合逻辑的系数,我们就应该考虑剔除它了。

    当然,有时也可能得到与常识不同的结论。举个例子,假如我们在研究森林火灾,我们通常认为降雨充沛的区域火灾的发生率会相对较低,也就是所谓的负相关,但是,这片森林火灾频发的原因可能是闪电雷击,这样降雨量这个解释变量可能就不是常识中的负相关的关系了。

    因此,我们除了验证解释变量的系数与先验知识是否相符外,还有继续结合其他项检查继续诊断,从而得出更可靠的结论。




    Check #2 解释变量对模型有帮助否?

    解释变量对模型有无帮助说的就是解释变量是否有显著性,同样我们可以从 OLS 工具的汇总报表中得出些结论。

    这里写图片描述

    那如何了解这些解释变量是否有显著性呢?

    OLS 工具除了对模型中的每个解释变量计算一个系数外,还执行统计检验以确定这些解释变量是否对模型有所帮助。

    如果解释变量的系数为零(或非常接近零),我们认为这个解释变量对模型没有帮助,统计检验就用来计算系数为零的概率。如果统计检验返回一个小概率值(p 值),则表示系数为零的概率很小。如果概率小于 0.05,OLS 汇总报告上 概率(Probability) 旁边的一个 星号(*) 表示相关解释变量对模型非常重要。换句话说,其系数在 95% 置信度上具有统计显著性。

    利用空间数据在研究区域内建模的关系存在差异是非常常见的,这些关系的特征就是不稳定。我们就需要通过 稳健概率(robust probability) 了解一个解释变量是否具有统计显著性。 OLS 汇总报告中所包括的另一项统计检验是用于不稳定性的 Koenker(Koenker 的标准化 Breusch-Pagan)统计量。

    你也可以忽略上面说的,傻瓜方法就是:确保解释变量的概率、稳健概率列中带星号




    Check #3 残差是否有空间聚类?

    残差在空间上应该是随机分布的,而不应该出现聚类。这项检查我们可以使用 空间自相关工具(Spatial Autocorrelation Tool)工具进行检查。

    这里写图片描述




    Check #4 模型是否出现了倾向性?

    我们以前听过政治老师说过,不要戴着“有色眼镜”看人!也可能是历史老师?这不重要。。同样,回归分析模型中,也不要带有“成见”,不能具有倾向性,否则,这不是个客观合理的模型。

    我们都知道正态分布是个极好的分布模式,如果我们正确的构建了回归分析模型,那么模型的残差会符合完美的正态分布,其图形为钟形曲线。

    当模型出现偏差时,可能我们看到的图形也是诡异的,这样我们就无法完全信任所预测的结果。

    这里写图片描述


    如何检验呢?

    在 OLS 汇总报告中,有一个具有统计显著性的 Jarque-Bera 诊断表示模型是否出现偏差。如下图中是没有偏差的模型,如果有偏差,在篮框中会出现星号。

    这里写图片描述

    因此,判断自己的模型没有偏差的最直观的方法就是:Jarque-Bera 诊断中没有星号


    解决偏差!

    为了解决模型偏差,最好为所有模型变量创建一个散点图矩阵。因变量和一个解释变量之间存在非线性关系,这是出现模型偏差的常见原因。这些在散点图矩阵中看起来像一条曲线。

    这里写图片描述

    OLS 是一种线性回归方法,假设您正在建模的关系是线性关系。如果不是,可尝试变换您的变量,以查看这样做是否可创建出线性更明显的关系。常见变换包括对数变换和指数变换。

    这里写图片描述

    另外,散点矩阵图还可以显示出数据异常值。要了解一个异常值是否正在影响您的模型,请尝试在含有和不含有异常值的情况下分别运行 OLS,从而了解异常值对模型性能的更改程度,以及移除异常值是否会校正模型偏差。

    这里写图片描述




    Check #5 解释变量中存在冗余吗?

    在我们建模的过程中,应尽量去选择表示各个不同方面的解释变量,也就是尽量避免传达相同或相似信息的解释变量。要清楚,引入了冗余变量的模型是不足以信任的。

    那么问题来了,如何判断是否存在冗余解释变量?

    OLS工具会为每个变量计算膨胀因子(Variance Inflation Factor,VIF),VIF 值是对变量冗余度的一种度量,可辅助决定在不削弱模型解释能力的情况下可从中移除哪些变量。根据经验,VIF 值超过 7.5 就有问题。如果有两个或更多解释变量的 VIF 值超过了 7.5,应该一次移除其中一个变量并重新运行 OLS,直到冗余消失。记住,不要全部移除掉哦!

    这里写图片描述




    Check #6 评估模型的性能

    最后需要做的是,评估模型的性能。 矫正R2 是评估解释变量对因变量建模的重要度量。

    这里写图片描述

    这项检查应该放到最后。一旦我们通过了前面的所有检验,接下来就可以进行评估矫正R2值。

    R2值的范围介于 0 和 1 之间,以百分比形式表示。假设正在为犯罪率建模,并找到一个通过之前所有五项检查的模型,其校正 R2 值为 0.65。这样就可以了解到模型中的解释变量说明犯罪率是 65%(更技术一些来说就是,模型解释了犯罪率因变量中 65% 的变化量)。在有些科学领域,能够解释复杂现象的 23% 就会让人兴奋不已。在其他领域,一个R2值可能需要更靠近 80% 或 90% 才能引起别人的注意。不管采用哪一种方式,校正 R2 值都会帮我们判断自己模型的性能。

    另一项辅助评估模型性能的重要诊断是修正的 Akaike 信息准则 /Akaike’s information criterion (AICc)。AICc 值是用于比较多个模型的一项有用度量。例如,可能希望尝试用几组不同的解释变量为学生的分数建模。在一个模型中仅使用人口统计变量,而在另一个模型选择有关学校和教室的变量,如每位学生的支出和师生比。只要所有进行比较的模型的因变量(在本示例中为学生测试分数)相同,我们就可以使用来自每个模型的 AICc 值确定哪一个的表现更好。模型的 AICc 值越小,越适合观测的数据。




    有关回归分析结果诊断就说这么多了,希望看起来不是那么枯燥无味……

    展开全文
  • Excel回归分析结果的详细阐释

    千次阅读 2019-11-27 10:51:18
    Excel回归分析结果的详细阐释https://wenku.baidu.com/view/0996a441866fb84ae55c8d3c.html
    展开全文
  • 本文介绍回归模型的原理知识,包括线性回归、多项式回归和逻辑回归,并详细介绍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.
    展开全文
  • STATA regress回归结果分析

    千次阅读 多人点赞 2020-07-30 22:37:11
    对于STATA回归结果以前一直不清不楚,每次都需要baidu一波,因此今天将结果相关分析记录下: 如上图 上面左侧的表是用来计算下面数据的,分析过程中基本不会用到 右侧从上往下 1.Number of obs 是样本容量 2.F是...
  • 相关分析是回归分析的基础和前提,回归分析是相关分析的深入和继续。回归分析就是对拟合问题作的统计分析
  • 回归分析

    千次阅读 2018-01-22 22:31:16
    回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技 术通常用于预测分析以及发现变量之间的因果关系。 使用回归分析的好处良多。具体如下: 1. 它表明自变量和因...
  • SPSS多元线性回归结果分析

    万次阅读 多人点赞 2018-04-11 17:42:00
    对总回归方程进行F检验。显著性是sig。 结果的统计学意义,是结果真实程度(能够代表总体)的一种估计方法。专业上,p 值为结果可信程度的一个递减指标,p 值越大,我们越不能认为样本中变量的关联是 总体中各变量...
  • SPSS篇—回归分析

    万次阅读 多人点赞 2019-08-20 09:29:06
    今天给大家分享一下如何用SPSS Statistics来进行回归分析,我们通过一个实例来具体了解一下整个分析的过程以及结果的解读。 上图中就是本次需要进行回归分析的数据,之前有跟大家说过,SPSS Statistics的界面跟...
  • logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。 logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易...
  • 多元线性回归分析理论详解及SPSS结果分析

    万次阅读 多人点赞 2017-05-17 16:23:23
    当影响因变量的因素是多个时候,这种一个变量同时与多个变量的回归问题就是多元回归,分为:多元线性回归和多元非线性回归。这里直说多元线性回归。对比一元线性回归: 1.1多元回归模型: y=β0+β1x1+β2x2+…+β...
  • 回归分析算法

    万次阅读 2016-05-07 13:39:20
    回归分析 1.回归分析基本原理 所谓回归分析法,就是在掌握大量观察数据基础上,利用数理统计方法建立因变量与自变量之间的回归关系函数表达式(简称为回归方程式)。回归分析是一种预测性的建模技术,它研究的是因...
  • 用Excel做回归分析

    万次阅读 多人点赞 2019-02-27 22:17:37
    Excel数据分析工具库是个很强大的工具,可以满足基本的统计分析,这里介绍用Excel数据分析工具库中的回归做回归分析。本文仅作为学习笔记之用,欢迎各位交流指正。 本节知识点: Excel数据分析工具库—回归 ...
  • 7.6 方差分析与回归分析的SPSS实现 7.6.1 SPSS软件概述 1 SPSS版本与安装 2 SPSS界面 3 SPSS特点 4 SPSS数据 7.6.2 SPSS与方差分析 1 单因素方差分析 2 双因素方差分析 7.6.3 SPSS与回归分析 SPSS回归分析...
  • 多元相关分析与多元回归分析

    万次阅读 多人点赞 2018-10-27 17:13:02
    什么是回归分析 分析步骤 回归分析与相关分析的主要区别 一元线性相关分析 一元线性回归分析 建模 方差分析检验  t检验 多元回归分析模型建立 线性回归模型基本假设 多元回归分析用途 多元线性相关分析 ...
  • SPSS—回归—多元线性回归结果分析(二)

    万次阅读 多人点赞 2014-03-19 17:57:28
    SPSS—回归—多元线性回归结果分析(二) ,最近一直很忙,公司的潮起潮落,就好比人生的跌岩起伏,眼着一步步走向衰弱,却无能为力,也许要学习“步步惊心”里面“四阿哥”的座右铭:“行到水穷处”,”坐...
  • stata regress 多变量回归 regression结果分析

    万次阅读 多人点赞 2018-01-04 17:33:56
    由于之前上课的时候用过stata感觉用stata做分析的时候交互什么的体验其实很好,这次要做一个回归分析,发现之前学过的很多都不太记得了,就打算写一个博客作为备忘。0. stata documentationhttps://...
  • 一元线性回归及Excel回归分析

    千次阅读 2019-06-08 19:26:54
    摘要 一元线性回归可以说是数据分析中非常简单的一个知识点,有一点点统计、分析、建模经验的人都知道这个分析的含义,也会用各种工具来做这个分析...在回归分析中,只包括一个自变量和一个因变量,且二者的关系可...
  • 线性回归分析-回归算法

    千次阅读 2019-09-05 14:25:35
    线性回归分析-回归算法 1 回归算法之线性回归   回归问题的判定:目标是连续的,在指定区间内可以是任意一个数值。   线性回归的定义是:目标值预期是输入变量的线性组合。线性回归通过一个或多个自变量与因变量...
  • python数据分析:回归分析(regression analysis)

    万次阅读 多人点赞 2018-11-28 20:39:55
    何为回归分析回归分析(regression analysis)指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。回归分析按照涉及的变量的多少,分为一元回归和多元回归分析;按照因变量的多少,可分为简单...
  • 回归分析之线性回归

    万次阅读 2014-10-14 16:00:06
    1概念 回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量...如果在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如
  • 多元回归分析

    千次阅读 2017-11-13 19:09:16
     多元回归分析(multiple regression) 1.与简单线性回归区别: 多个自变量 2.多元回归模型 3.多元回归方程 4.估计多元回归方程 5.估计流程(与简单线性回归类似) 6.估计方法 使得min的值达到最小 7.如果...
  • 逐步回归分析

    千次阅读 2019-04-11 16:21:00
    R语言 逐步回归分析 逐步回归分析是以AIC信息统计量为准则,通过选择最小的AIC信息统计量,来达到删除或增加变量的目的。 R语言中用于逐步回归分析的函数 step() drop1() add1() #1.载入数据 首先对数据...
  • getwd()———–逐步回归——————read.table("demo.csv",header=TRUE,sep=",")->demo demo scale.demo(demo[,c("a1","a2","a3","a4","a5","a6","y")],center = T,scale = T)#标准化数据 scale.demo cb
  • 采用Minitab进行logistic回归分析

    千次阅读 2020-04-07 09:41:52
    在研究Y与X之间的因果关系时,如果Y不是一个定比或定距变量时,就需要进行logistic回归。logistic回归是一种广义线性... logistic回归分析类型 因变量Y的特征 举例 二元logistic...
  • 数据分析之线性回归分析

    千次阅读 2019-01-11 20:56:55
    (3)回归分析分为一元线性回归分析和多元线性回归分析 二、一元线性回归: (1)、线性回归,是利用数理统计中回归分析, 来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法 一元线性回归通用公式为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,517
精华内容 53,406
关键字:

如何看回归分析结果