回归最初是遗传学中的一个名词,是由英国生物学家兼统计学家高尔顿首先提出来的,他在研究人类身高的时候发现:高个子回归人类的平均身高,而矮个子则从另一方向回归人类的平均身高;

回归分析整体逻辑

  • 回归分析(Regression Analysis)

    • 研究自变量与因变量之间关系形式的分析方法,它主要是通过建立因变量y与影响它的自变量 x_i(i=1,2,3… …)之间的回归模型,来预测因变量y的发展趋向。
  • 回归分析的分类

    • 线性回归分析

      • 简单线性回归
      • 多重线性回归
    • 非线性回归分析

      • 逻辑回归
      • 神经网络
  • 回归分析的步骤

    • 根据预测目标,确定自变量和因变量

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

    • 估计模型参数,建立回归模型

    • 对回归模型进行检验

    • 利用回归模型进行预测

简单线性回归模型

1.基础逻辑

y=a+bx+e

该模型也称作一元一次回归方程,模型中:

  • y:因变量
  • x:自变量
  • a:常数项(回归直线在y轴上的截距)
  • b:回归系数(回归直线的斜率)
  • e:随机误差(随机因素对因变量所产生的影响)
    • e的平方和也称为残差,残差是判断线性回归拟合好坏的重要指标之一

从简单线性回归模型可以知道,简单线性回归是研究一个因变量与一个自变量间线性关系的方法

2.案例实操

下面我们来看一个案例,某金融公司在多次进行活动推广后记录了活动推广费用及金融产品销售额数据,如下表所示

因为活动推广有明显效果,现在的需求是投入60万的推广费,能得到多少的销售额呢?这时我们就可以使用简单线性回归模型去解决这个问题,下面,我们用这个案例来学习,如何进行简单线性回归分析;

(1)第一步 确定变量

  • 根据预测目标,确定自变量和因变量

    • 问题:投入60万的推广费,能够带来多少的销售额?

    • 确定因变量和自变量很简单,谁是已知,谁就是自变量,谁是未知,就就是因变量,因此,推广费是自变量,销售额是因变量;

import numpy
from pandas import read_csv
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression data = read_csv(
'file:///Users/apple/Desktop/jacky_1.csv',encoding='GBK'
)

(2)第二步 确定类型

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

    • 根据前面的数据,画出自变量与因变量的散点图,看看是否可以建立回归方程,在简单线性回归分析中,我们只需要确定自变量与因变量的相关度为强相关性,即可确定可以建立简单线性回归方程,根据jacky前面的文章分享《Python相关分析》,我们很容易就求解出推广费与销售额之间的相关系数是0.94,也就是具有强相关性,从散点图中也可以看出,二者是有明显的线性相关的,也就是推广费越大,销售额也就越大
#画出散点图,求x和y的相关系数
plt.scatter(data.活动推广费,data.销售额) data.corr()

(3)第三步 建立模型

  • 估计模型参数,建立回归模型

    要建立回归模型,就要先估计出回归模型的参数A和B,那么如何得到最佳的A和B,使得尽可能多的数据点落在或者更加靠近这条拟合出来的直线上呢?

统计学家研究出一个方法,就是最小二乘法,最小二乘法又称最小平方法,通过最小化误差的平方和寻找数据的最佳直线,这个误差就是实际观测点和估计点间的距离;

最小二乘法名字的缘由有二个:一是要将误差最小化,二是使误差最小化的方法是使误差的平方和最小化;在古汉语中,平方称为二乘,用平方的原因就是要规避负数对计算的影响,所以最小二乘法在回归模型上的应用就是要使得实际观测点和估计点的平方和达到最小,也就是上面所说的使得尽可能多的数据点落在或者说更加靠近这条拟合出来的直线上;

我们只要了解最小二乘法的原理即可,具体计算的过程就交给Python处理。

![@数据分析 -jacky](https://img-blog.csdn.net/20171228102448874?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamFja3lfemh1eXVhbmx1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

#估计模型参数,建立回归模型
'''
(1) 首先导入简单线性回归的求解类LinearRegression
(2) 然后使用该类进行建模,得到lrModel的模型变量
''' lrModel = LinearRegression()
#(3) 接着,我们把自变量和因变量选择出来
x = data[['活动推广费']]
y = data[['销售额']] #模型训练
'''
调用模型的fit方法,对模型进行训练
这个训练过程就是参数求解的过程
并对模型进行拟合
'''
lrModel.fit(x,y)

(4)第四步 模型检验

  • 对回归模型进行检验

    • 回归方程的精度就是用来表示实际观测点和回归方程的拟合程度的指标,使用判定系数来度量。
判定系数=相关系数R2=ESSTSS=1−RSSTSS
其中,数据分析部落公众号(shujudata)
TSS=∑(Yi−Y¯)2总离差平方和
ESS=∑(Yi−Y¯)2回归差平方和
RSS=∑(Yi−Y¯)2残差平方和

解释:判定系数等于相关系数R的平方用于表示拟合得到的模型能解释因变量变化的百分比,R平方越接近于1,表示回归模型拟合效果越好

如果拟合出来的回归模型精度符合我们的要求,那么我们可以使用拟合出来的回归模型,根据已有的自变量数据来预测需要的因变量对应的结果

#对回归模型进行检验
lrModel.score(x,y)

执行代码可以看到,模型的评分为0.887,是非常不错的一个评分,我们就可以使用这个模型进行未知数据的预测了

(5)第五步 模型预测

  • 调用模型的predict方法,这个就是使用sklearn进行简单线性回归的求解过程;
lrModel.predict([[60],[70]])
  • 如果需要获取到拟合出来的参数各是多少,可以使用模型的intercept属性查看参数a(截距),使用coef属性查看参数b
#查看截距
alpha = lrModel.intercept_[0] #查看参数
beta = lrModel.coef_[0][0] alpha + beta*numpy.array([60,70])

3.完整代码

import numpy
from pandas import read_csv
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression data = read_csv(
'file:///Users/apple/Desktop/jacky_1.csv',encoding='GBK'
) #画出散点图,求x和y的相关系数
plt.scatter(data.活动推广费,data.销售额) data.corr() #估计模型参数,建立回归模型
'''
(1) 首先导入简单线性回归的求解类LinearRegression
(2) 然后使用该类进行建模,得到lrModel的模型变量
''' lrModel = LinearRegression()
#(3) 接着,我们把自变量和因变量选择出来
x = data[['活动推广费']]
y = data[['销售额']] #模型训练
'''
调用模型的fit方法,对模型进行训练
这个训练过程就是参数求解的过程
并对模型进行拟合
'''
lrModel.fit(x,y) #对回归模型进行检验
lrModel.score(x,y) #利用回归模型进行预测
lrModel.predict([[60],[70]]) #查看截距
alpha = lrModel.intercept_[0] #查看参数
beta = lrModel.coef_[0][0] alpha + beta*numpy.array([60,70])

4.总结-sklearn建模流程

  • sklearn建模流程

    • 建立模型

      • lrModel = sklearn.linear_model.LinearRegression()
    • 训练模型

      • lrModel.fit(x,y)
    • 模型评估

      • lrModel.score(x,y)
    • 模型预测

      • lrModel.predict(x)

Python回归分析五部曲(一)—简单线性回归的更多相关文章

  1. python回归分析五部曲

    Python回归分析五部曲(一)—简单线性回归 https://blog.csdn.net/jacky_zhuyuanlu/article/details/78878405?ref=myread Py ...

  2. Python回归分析五部曲(二)—多重线性回归

    基础铺垫 多重线性回归(Multiple Linear Regression) 研究一个因变量与多个自变量间线性关系的方法 在实际工作中,因变量的变化往往受几个重要因素的影响,此时就需要用2个或2个以 ...

  3. Python回归分析五部曲(三)—一元非线性回归

    (一)基础铺垫 一元非线性回归分析(Univariate Nonlinear Regression) 在回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条曲线近似表示,则称为一元非线性回归 ...

  4. 机器学习(2):简单线性回归 | 一元回归 | 损失计算 | MSE

    前文再续书接上一回,机器学习的主要目的,是根据特征进行预测.预测到的信息,叫标签. 从特征映射出标签的诸多算法中,有一个简单的算法,叫简单线性回归.本文介绍简单线性回归的概念. (1)什么是简单线性回 ...

  5. day-12 python实现简单线性回归和多元线性回归算法

    1.问题引入  在统计学中,线性回归是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数的线性组合.一个带有一个自变 ...

  6. 简单线性回归(梯度下降法) python实现

    grad_desc .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...

  7. 简单线性回归(最小二乘法)python实现

      简单线性回归(最小二乘法)¶   0.引入依赖¶ In [7]: import numpy as np import matplotlib.pyplot as plt   1.导入数据¶ In [ ...

  8. SPSS数据分析—简单线性回归

    和相关分析一样,回归分析也可以描述两个变量间的关系,但二者也有所区别,相关分析可以通过相关系数大小描述变量间的紧密程度,而回归分析更进一步,不仅可以描述变量间的紧密程度,还可以定量的描述当一个变量变化 ...

  9. 机器学习——Day 2 简单线性回归

    写在开头 由于某些原因开始了机器学习,为了更好的理解和深入的思考(记录)所以开始写博客. 学习教程来源于github的Avik-Jain的100-Days-Of-MLCode 英文版:https:// ...

随机推荐

  1. vs2017js 方法注释

    vs2017给js方法加注释,就像给C#类似 例如 function test1(a,b,c){ .... } 在function的上一行,打一个 " / " 再连续按两下 &qu ...

  2. Jenkins首次进入的一些设置及配置

    1.将Jenkins显示页面修改为中文环境 首先安装中文的插件:在manage Jenkins-Manage Plugins-可选插件 下载完成之后,在系统设置里边,修改为中文格式:manage Je ...

  3. CMU-Multimodal SDK Version 1.1 (mmsdk)使用方法总结

    年10月26日 星期六 mmdatasdk: module for downloading and procesing multimodal datasets using computational ...

  4. jsp,servlet文件上传问题完善

    1. 上传文件时文件名中文乱码 upload.setHeaderEncoding("utf-8"); 有个疑惑: 不管设置不设置都不乱码,但是刘帅龙老师讲的时候出现了乱码 . 2. ...

  5. spark源码阅读--shuffle读过程源码分析

    shuffle读过程源码分析 上一篇中,我们分析了shuffle在map阶段的写过程.简单回顾一下,主要是将ShuffleMapTask计算的结果数据在内存中按照分区和key进行排序,过程中由于内存限 ...

  6. IDEA忽略编译报错

    设置Intellij IDEA忽略部分类编译错误 File——Settings——Compiler——Java compiler修改:Use complier:将Javac改为Eclipse在Ecli ...

  7. nodejs npm vue yarn 环境搭建

    1.nodejs中文网http://nodejs.cn/download/下载最新版本 2.安装注意,虽然.msi包没有右键用管理员权限运行,如果直接双击安装可能会存在安装失败的问题.使用管理员权限运 ...

  8. 英语partschinite芬达石partschinite锰铝榴石

    partschinite指锰铝榴石,属于石榴石的一种,由于它有芬达饮料的诱人颜色,大家也称其为“芬达石”.石榴石宝石族中重要品种之一,化学成分为锰铝硅酸盐,颜色从红到橙红,红到棕红,玫瑰红.浅玫红均有 ...

  9. Android SDK版本号与API Level 的对应关系及发布时间(更新到28)

    Android SDK版本号与API Level 的对应关系及发布时间 平台版本号 API 级别 VERSION_CODE(代号) 发布时间 Android 9.0 28 Pie/P(馅饼) 2018 ...

  10. Eclipse apk项目创建和项目构架

    一.创建项目工程 设定名字 设定包名(每一台机器只有唯一的包名)下一步 根据设置进行选择 创建空项目 Finish即可创建 调节项目的字体 二.Eclipse 项目构架 Src 2. Gen R.ja ...