文章主要介绍两种常见的回归分析方法,以及其对应的Python实现操作。

我会从以下几个方面来介绍:

  • 什么是回归分析
  • 为什么使用回归分析
  • 回归分析技术有哪些
  • 使用Python实现回归分析

什么是回归分析

在统计学中,回归分析(regression analysis)指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
在大数据分析中,回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。

回归分析是通过规定的因变量和自变量来确定变量间的关系,建立回归模型,并根据实测数据来求解模型的各参数,然后评价回归模型是否能够很好的拟合实测数据;如果能够很好的拟合,则可以根据自变量作进一步预测。[1]

举例来说,我们可以通过回归分析来研究和预测员工的流失情况与员工的各种特征之间的关系;预测股票波动与各种股票特征之间的关系等等。回归分析还可以用于比较那些通过不同变量之间的相互影响,如商品价格变动与促销活动数量之间的关系。

回归分析与相关分析不同,相关分析表明的是变量间的相关关系的性质和程度,一般不区分因变量和自变量;而回归分析研究是的影响关系如何,需要确定具体的因变量和自变量间的相关的数学形式。所以一般都会先进行相关分析后,确认存在相关再进行回归分析。

为什么使用回归分析

如上所说,我们可以看出:

回归分析可以表明因变量和自变量之间的显著关系;也可以表明自变量对因变量的影响程度。

利用回归分析,我们可以更好的了解哪些变量对因变量的影响程度更大,从而决定采取什么样的方式去解决问题或者达到目标。

回归分析技术有哪些

比较常见的回归分析有线性回归、逻辑回归,除了这两种,还有多项式回归、逐步回归、岭回归、套索回归和弹性网络回归也都比较常见。

接下来我们对这些比较常见的两种回归方法进行分析:

1.Linear Regression线性回归

线性回归是最为人熟知的建模技术之一。线性回归通常是人们在学习预测模型时首选的技术之一。在这种技术中,因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的。

线性回归使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(X)之间建立一种关系。

线性回归可以表示为

;通常,a是截距,b表示斜率。

接下来,我们需要去衡量自变量x与因变量y的相关程度。

举例来看:这里有20名学生,以及他们为考试花费时间和最后的考试成绩,我们需要研究自变量花费时间和因变量成绩的相关关系:

我们可以先画一个散点图看下:

可以看出来,随着学习时间越大,考试成绩也是越高的,我们也可以看下相关系数,相关系数为0.93,我们可以说,学习时间和考试成绩是强相关。

或许你会对相关系数比较陌生,不要着急,补充一下什么是相关系数。

再说相关系数之前,先介绍一下协方差

在概率论和统计学中,协方差用于衡量两个变量的总体误差。

期望值分别为E[x]与E[y]的两个实随机变量x与y之间的协方差Cov(x,y)定义为:

直观来看,协方差表示的是两个变量总体误差的期望。协方差可以表示两个变量相关性方向,也可以表示相关性大小衡量两个变量相关程度,但是协方差会因为变量的变化幅度不同,导致差异较大。为了消除变量的变化幅度带来的影响,我们可以使用相关系数。

相关系数是用以反映变量之间相关关系密切程度的统计指标。

相关系数r表达式:

相关系数在-1到1之间,

,可以说,相关系数是标准化后的协方差,单纯反映两个变量每单位的变化的相似程度。相关系数同样可以表示两个变量相关性方向,也可以表示相关性大小衡量两个变量相关程度。

回到案例中,如果我们想要通过学习时间来预测考试成绩,怎么办呢?我们可以在这些散点中穿过一条直线,使得这条直线尽量的接近每个数据点。这条直线就是“最佳拟合线”。我们无法保证这条线穿过每一个点,但是如果存在线性相关性,应该可以保证,每一个点合理的接近这条“最佳拟合线”,这样我们就可以通过学习时间来预测考试的成绩了。

我们一开始有提到,简单线性回归的表达式为y = bx+a,那我们怎么求最佳拟合线的a和b的值?我们可以通过最小二乘法来完成。

最小二乘法通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。

这么理解:

一个点的误差 = 实际值 - 预测值

误差平方和SSE = ∑(实际值 - 预测值)²

而最小二乘法可以使得误差平方和SSE最小

通过上述,我们已经可以建立模型。那接下来就是需要对模型的精度进行评估

我们用决定系数R平方来评估模型的性能

决定系数R²反应了y的波动有多少百分比能被x的波动所描述,即表征依变数Y的变异中有多少百分比,可由控制的自变数X来解释。

决定系数R²与训练点的数量无关,不受数据集中的数据多少影响;比误差平方和SSE更可靠。

决定系数R²越大,表示回归模型精度越高

2.Logistic Regression逻辑回归

还是上述的案例,如果我们去根据学生的学习成绩预测学生考试是否及格(及格&不及格),我们采用逻辑回归

逻辑回归是用来计算“事件=Success”和“事件=Failure”的概率。当因变量的类型属于二元(1 / 0,真/假,是/否)变量时,应该使用逻辑回归。

逻辑回归于线性回归的区别,就是线性回归预测输出的是(-∞,∞),而逻辑回归输出的是{0,1},是离散值。

简单来说, 逻辑回归是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。好比投硬币预测正面还是反面,结果只有两种。

我们继续回到刚才的案例中,我们增加1个column叫“是否及格”:

但是,在机器学习中,很多算法要求标签是数值,所以案例里我们使用用0和1:0表示不及格,1表示及格:

案例中,我们根据学生花费时间作为特征变量,预测是否及格,及格、不及格就是标签。

我们用散点图观察一下:

如果我们依旧使用线性回归的“最佳拟合线”在这里就是不合适的。

所以我们需要使用逻辑回归。逻辑回归核心就是逻辑回归函数:

逻辑函数是一个S型曲线,y值是从0-1的函数,曲线函数与Y轴相交于(0,0.5)。

逻辑函数

逻辑函数值表示什么呢?逻辑函数中y表示当分类结果的标签为1时,x对应的概率值;比如说,当学生为考试努力时间x=2时候,函数上y就表示,分类标签为1时的概率为0.25就是通过考试的概率为0.25;

那问题来了,有了这个概率值Y如何应用到我们结果标签0或者1上呢,因为我们是想要知道学生是否通过考试:我们利用决策面,如果逻辑函数得到的结果大于等于0.5,那特征=1,如果y<0.5,那特征-y=0;

这里需要解释一下什么是决策面

决策面,是用于在N维空间,将不同类别样本分开的平面或曲面。

机器学习可以对分类问题定义决策面,决策面通常位于两个不同类中间的地方,机器学习中有许多现成模型供我们生成决策面。

通过上述,我们已经可以建立模型。那接下来就是同样需要对模型的精度进行评估

我们用正确率评估模型的准确率。正确率等于给模型输入数据中,正确数据占所有测试数据比例。

使用Python实现回归分析

1.线性回归的Python实现

① 提取特征x和标签y

# 特征features
exam_x = df.loc[:,'学习时间']
# 标签labels
exam_y = df.loc[:,'成绩']

② 建立训练数据和测试数据

我们需要导入train_test_split,train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取训练数据(train)和测试数据(test)。

# 建立训练数据和测试数据
x_train , x_test , y_train , y_test = train_test_split(exam_x,exam_y,train_size = .8)

train_size:训练数据占比,如果是整数的话就是样本的数量。

③ 输出数据大小

print('原始数据特征',exam_x.shape,',训练数据特征',x_train.shape,',测试数据特征',x_test.shape)
print('原始数据标签',exam_y.shape,',训练数据标签',y_train.shape,',测试数据标签',y_test.shape)

④ 训练模型

先导入线性回归包:

# 1.导入线性回归
from sklearn.linear_model import LinearRegression

创建模型:

# 2.创建模型:线性回归
model1 = LinearRegression()

训练模型:

# 3.训练模型
x_train = x_train.values.reshape(-1,1)
x_test = x_test.values.reshape(-1,1)
model1.fit(x_train,y_train)

截距和回归系数:

# 截距
a = model1.intercept_
# 回归系数
b = model1.coef_
print('最佳拟合线:截距a = ',a,'回归系数b = ',b)

我们可以看一下图:

⑤ 模型准确性评估

# 模型评估
model1.score(x_test , y_test)

2.逻辑回归的Python实现

① 提取特征x和标签y

# 特征features
exam_x1 = df.loc[:,'学习时间']
# 标签labels
exam_y1 = df.loc[:,'是否及格']

② 建立训练数据和测试数据

我们同样需要导入train_test_split:

from sklearn.model_selection import train_test_split
# 建立训练数据和测试数据
x1_train , x1_test , y1_train , y1_test = train_test_split(exam_x1,exam_y1,train_size = .8)

③ 输出数据大小:

# 输出数据大小
print('原始数据特征',exam_x1.shape,',训练数据特征',x1_train.shape,',测试数据特征',x1_test.shape)
print('原始数据标签',exam_y1.shape,',训练数据标签',y1_train.shape,',测试数据标签',y1_test.shape)

④ 训练模型

先导入逻辑回归:

# 训练模型
# 1.导入逻辑回归
from sklearn.linear_model import LogisticRegression
# 2.创建模型:逻辑回归
model2 = LogisticRegression()
# 3.模型训练
x1_train = x1_train.values.reshape(-1,1)
x1_test = x1_test.values.reshape(-1,1)
model2.fit(x1_train,y1_train)

⑤ 评估模型的准确率

# 评估模型的准确率
model2.score(x1_test,y1_test)

最后,总结一下分类和回归的区别:

  • 输出类型不同:分类输出的是离散数据(预测是否通过),回归输出的是连续数据(预测分数)
  • 分类得到的是决策面,用于对数据集中的数据进行分类;回归得到的是最优拟合线,这个线条可以最好的接近数据的每个点;
  • 对模型评估指标不一样:如何评估监督分类,通常使用正确率作为指标;回归中通常使用决定系数R平方表示模型评估的好坏,R平方可以表示有多少百分比的y波动被回归线所描述。

接下来,就期待我们的实战吧~下一篇会使用本文的知识来预测泰坦尼克号的生存率。

参考

  1. ^回归分析 https://baike.baidu.com/item/%E5%9B%9E%E5%BD%92%E5%88%86%E6%9E%90/2625498?fr=aladdin

python 回归 显著_Python数分:回归分析相关推荐

  1. python sns绘制回归线_Python数分实战:员工流失情况预测

    在很久之前,我有写一个Excel数据分析的实战项目,不晓得大家还记不记得,感兴趣的童鞋可以回看: A九姑娘:Excel数分实战:员工流失率分析​zhuanlan.zhihu.com 本次的项目数据依旧 ...

  2. python回归模型_Python实现线性回归模型

    从简单的线性回归模型中可以看到构建一个监督学习网络的基本步骤.下文摘自<动手学深度学习> 线性回归概念 线性回归输出是一个连续值,因此适用于回归问题.回归问题在实际中很常见,如预测房屋价格 ...

  3. python回归建模_Python实现回归预测及模型优化

    大家好,之前写多了自动化办公的内容,现在换个机器学习的专题跟大家交流学习,作为一个眼科研究生后面也希望后面多通过一些眼科案例顺带普及下眼科知识!在眼科中AI的一项应用就是利用卷积神经网络实现图像识别. ...

  4. python数字计算公式_python数的运算

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 什么是运算符? 本章节主要说明python的运算符. 举个简单的例子4 +5 = ...

  5. 浪潮编程题python石头排序_数分 | 沙滩排石头-浪潮提前批笔试 Java、C++、Python

    题目 沙滩摆放着一排大小不一的球形石头,已知第i个石头的半径为ri,不存在两个石头半径相等.现要求通过移动石头使摆放的石头从左往右半径递增.每次可选择一块石头,并把它放在剩下n-1块石头的最左边或最右 ...

  6. python线性回归实例_Python机器学习线性回归分析实例 | kTWO-个人博客

    前言 在前面的文章中,我们都是简单的对线性回归模型进行构建,这篇文章我们采用网上下载的数据量比较大的数据来对模型进行构造,最后讲述在线性的情况下如何对模型进行评估. 数据集介绍 下图是该数据集的前10 ...

  7. 逻辑回归模型 python_机器学习-逻辑回归分析(Python)

    编辑推荐: 本文首先介绍这两种方法的区别和联系,然后对分类方法中的逻辑回归进行较详细的说明(包括其基本原理及评估指标),最后结合案例介绍如何利用Python进行逻辑回归分析. 本文来自于csdn,由火 ...

  8. python判断回文数_Python练习题---判断回文数

    设n是一个任意自然数,如果n的各位数字反向排序所得的自然数与n相等,则n被称为回文数,从键盘输入一个5位数字 ,请编写程序判断这个数字是不是回文数. 思路:先获取一个字符串,再判断该字符串是否满足是自 ...

  9. guido python正式发布年份_Python语言适合哪些领域的计算问题? (1.3分)_学小易找答案...

    [单选题]关于Python中的复数,下列说法错误的是 (1.3分) [多选题]药物作用的基本规律包括? [单选题]Python 中,以下哪个赋值操作符是错误的? (1.3分) [单选题]哪个选项是下面 ...

最新文章

  1. IBM AIX JFS 数据恢复记录(暂)
  2. Nginx与PHP(FastCGI)的安装、配置
  3. 关于几种压缩算法以及hadoop和hbase中的压缩配置说明
  4. 第11届 蓝桥杯-第1、2次模拟(软件类)真题-(2020年3月、4月)-官方讲解视频
  5. some more debugging screenshot about timeformat in DatePicker 15
  6. MAC下Android的Eclipse开发环境的搭建 转自MacroCheng
  7. Android仿新浪微博弹出界面动画,Android仿新浪微博个人信息界面及其他效果
  8. 三相桥式全控整流电路simulink仿真_三相二极管桥式整流电路分析与仿真
  9. 关于网站项目计划书的写法
  10. html5实现图片无缝滚动,原生javascript实现图片无缝滚动效果,javascript无缝滚动...
  11. 用Matlab生成Ornstein-Uhlenbeck过程
  12. 如何基于HTTP设计一个加密解密系统
  13. Spark累加器的作用和使用
  14. Objective-C中的instancetype和id区别
  15. 不懂优雅停机,搞挂了线上服务,咋办?
  16. 我的博客在百度:http://hi.baidu.com/sunmoonzhangli
  17. Easy_language
  18. 关于爬虫反爬机制处理方法(整合)
  19. 前端web用腾讯地图api根据地址获取经纬度
  20. 思科否认与华为中兴事件有关

热门文章

  1. 通过系统表获取SQL,Access,Oracle数据库的元数据信息
  2. C语言实用基础大总结(高效快速学习精华、实用语句案例多)
  3. 移动端点击保存图片_财经理财新闻资讯类网站织梦模板(带手机端)
  4. 微课系列(6):Python关键字else的三种用法
  5. Python计算序列中数字最大差值(美团2016校招笔试题)
  6. Python模拟大整数乘法的小学竖式计算过程
  7. mysql代码提示_聊一聊 php 代码提示
  8. 电脑屏幕卡住了按什么都没反应_刚买2个月,联想电脑屏幕出现坏点,售后回复:坏点不够3个不能保修...
  9. 设计模式 C++观察者模式
  10. 双机热备_涨知识 | 双机热备与备份一体机的联系及区别