当前位置 : 主页 > 编程语言 > python >

从回归分析到算法基础

来源:互联网 收集:自由互联 发布时间:2022-06-18
什么是回归分析? 回归分析就是定量地描述自变量和因变量之间的关系,并根据这些数量关系对现象进行预测和控制的一种统计分析方法。这种预测称为回归分析预测,例如可以通过回


什么是回归分析?

回归分析就是定量地描述自变量和因变量之间的关系,并根据这些数量关系对现象进行预测和控制的一种统计分析方法。这种预测称为回归分析预测,例如可以通过回归去研究工程师薪资与工作年限的关系。

1 回归分析简介

1.1 “回归”一词的来源

“回归”(regression)一词来源于生物学,是由英国著名生物学家兼统计学家高尔顿******在研究人类遗传问题时提出来的。1985~1990年期间,高尔顿发表多篇论文论证其观点。在研究父与子身高的遗传问题时,高尔顿搜集了1078对父子的身高数据,他发现这些数据的散点图大致呈直线状态。也就是说,总的趋势是父亲的身高增加时,儿子的身高也倾向于增加。高尔顿进而分析出子代的身高_y_与父亲的身高_x_大致可归结为直线关系,并求出了该直线方程(单位:英寸,1英寸=2.54cm):。

这种趋势及回归方程表明的内容如下:

  • 父代身高每增加1个单位,其成年儿子的身高平均增加0.516个单位;
  • 矮个子父亲所生的儿子比其父要高,如_x_=60,,高于父辈的平均身高。身材较高的父亲所生子女的身高却回降到多数人的平均身高,如_x_=80,,低于父辈的平均身高。换句话说,当父亲身高走向极端,子女的身高不会像父亲身高那样极端化,其身高要比父亲们的身高更接近平均身高,即有“回归”到平均数的趋势。

以上就是统计学上最初出现“回归”时的含义,高尔顿把这一现象叫作“向平均数方向的回归”(regression toward mediocrity)。虽然这是一种特殊情况,与线形关系拟合的一般规则无关,但“线形回归”的术语却因此沿用下来,作为根据一种变量(父亲身高)预测另一种变量(子女身高)或多种变量关系的描述方法。之后,回归分析的思想渗透到了数理统计的其他分支。随着计算机的发展以及各种统计软件包的出现,回归分析的应用越来越广泛。

1.2 回归与相关

客观事物在发展过程中是彼此联系、相互影响的,在数据挖掘的过程中常常要研究两个或者两个以上的变量之间的关系,各种变量间的关系大致可以分为完全确定关系(函数关系)和非确定性关系。

(1)完全确定关系:可以用精确的数学表达式来表示,即当变量_x_的取值确定后,_y_有唯一的确定值与之对应,如圆形的面积(​A​)与半径(​r​)之间的关系为。

(2)非确定关系:不能用精确的数学公式来表示,当变量_x_的取值确定后,_y_有若干种可能的取值,如父代身高与子代身高之间、房价与人口密度之间,等等。这些变量间都存在着十分密切的关系,但是不能通过一个或者几个变量的值来精准地计算出另外一个变量的值。统计学中把这些变量间的关系称为相关关系,把存在相关关系的变量称为相关变量。

在一定的范围内,对一个变量的任意数值,虽然没有另一个变量的确定数值与之对应,但是却有一个特定条件概率分布与之对应,这种变量的不确定关系,称为相关关系。通常,相关变量间的关系一般分为因果关系和平行关系。

(1)因果关系:一个变量的变化受另一个或几个变量的影响,如玉米的生长速度受种子的遗传特性、管理条件等影响。统计学上采用回归分析方法来研究呈因果关系的相关变量之间关系。表示原因的变量成为自变量,表示结果的变量成为因变量。

(2)平行关系:变量之间互为因果或共同受另外的因素影响,如人的身高和胸围。统计学上采用相关分析******来研究呈平行关系的相关变量之间的关系。

1.3 回归模型的划分与应用

1.回归模型的划分

回归问题分为模型学习和预测两个过程。即先基于给定的训练数据集构建一个模型,再根据新的输入数据预测相应的输出。

回归问题按照输入变量的个数可以分为一元回归和多元回归,按照输入变量和输出变量之间关系的类型,可以分为线性回归和非线性回归。

2.回归模型的应用

如图9-1所示。

▲图9-1 回归模型的应用

2 线性回归分析实战

2.1 线性回归的建立与求解

首先来看一个工作年限与年收入的例子。

工作年限是指职工以工资收入为全部或主要来源的工作时间。工作年限的长短标志着职工参加工作时间的长短,也反映了他对社会和企业的贡献大小以及知识、经验、技术熟练程度的高低。有5年工作经验的员工,往往要比只有两年工作经验的员工业务精通度、技术熟练度更高,所以工资也更高。

小明在北京从事算法工作,整理了身边5个从事算法工作同事的数据,工作年限与年收入数据如表9-1所示(单位:十万元)。

表9-1 工作年限与年收入表

序号

1

2

3

4

5

6

工作年限(Years of working)

2

3

4

5

5

11

年收入(Yearly income)

20

25

30

34

31

40

试建立工作年限与年收入之间的关系式。

(1)首先针对表9-1描出散点图如图9-2所示。

从图9-2中可以看出,6个点整体呈现线状分布,这说明两个变量之间存在线性相关关系。

▲图9-2 根据表9-1数据所做的散点图

其中,式(9-2)称为一元线性回归模型。

(2)利用最小二乘法求解方程。

2.2 Python求解回归模型案例

本节将通过Python完成计算,数据集见表9-2,文件名为data.xlsx。

表9-2 回归分析数据集

工作年限

年收入

2

20

3

25

4

30

5

34

5

31

11

40

【例​9-1​】回归分析,程序运行结果如图9-3所示

输入:

#!usr/bin/env python
#_*_ coding:utf-8 _*_
#1.导入需要的包
import pandas as pd
from sklearn import linear_model
import matplotlib.pyplot as plt
#2.通过pd.read_excel获取数据,并分别存入变量值X_parm,Y_parm
def get_data():
data = pd.read_excel("data.xlsx")
X_parm = []
Y_parm = []
for x ,y in zip(data['years'],data['income']):
#存储在相应的list列表中
X_parm.append([float(x)])
Y_parm.append(float(y))
return X_parm,Y_parmOutput
#3.构建线性回归并计算
def linear_model_main(X_ parm,Y_ parm,predict_value):
# Create linear regression object
regr = linear_model.LinearRegression()
#train model
regr.fit(X_parm,Y_parm)
predict_outcome = regr.predict(predict_value)
pred= {}
pred['intercept'] = regr.intercept_
pred['coefficient'] = regr.coef_
pred['predicted_value'] = predict_outcome
R_Square=regr.score(X_parm,Y_parm)
return pred,R_Square
#4.绘出拟合图像
def show_linear(X_parm,Y_parm):
# Create linear regression object
regr = linear_model.LinearRegression()
#train model
regr.fit(X_parm,Y_parm)
predict_outcome = regr.predict(predict_value)
pred= {}
pred['intercept'] = regr.intercept_
pred['coefficient'] = regr.coef_
pred['predicted_value'] = predict_outcome
return pred
if __name__=="__main__":
X,Y =get_data()
pred_value = 7
result,R_Square = linear_model_main(X,Y,pred_value)
print ("y={:.3}*x+{}".format(result['coefficient'][0],result
['intercept']))
print ("Predicted value:",result['predicted_value'])
show_linear(X,Y)
print("R_Square={ :.3 }".format(R_Square))

输出:

y=2.0*x+20.0
Predicted value: [34.]
R_Square=0.826

▲图9-3 例9-1程序运行结果

通过上面的分析得到一元线性回归拟合图像,如图9-3所示。最终得到回归方程为_y_=2_x_+20,同时绘制出了线性图形,回归系数为2.0,常数项为20.0。当_x_=7时,预测得出_y_=34。

2.3 检验、预测与控制

1.平方和分解公式

​2、 回归模型的显著性检验​

3.预测和控制

4.计算推导案例

在表9-2数据集下:

  • 求_y_关于_x_的线性回归方程;
  • 对方程的显著性进行检验;
  • 预测当科研经费为6(十万元)时,年利润将在什么范围内?

【例9-2.1】计算回归模型中参数

输入:

import pandas as pd
data = pd.read_excel("data.xlsx") #here ,use pandas to read cvs file.
data.columns=["X","Y"] #修改列名
data["X_Square"],data["Y_Square"]=data['X']**2,data['Y']**2
data["XY"]=data['X']*data['Y']
data["pred_Y"]=2*data['X']+20
data.loc['Row_sum'] =data.apply(lambda x: x.sum())
print(data[["X","Y","XY","X_Square","Y_Square","pred_Y"]])

输出:

X Y X_Square Y_Square XY pred_Y
0 2 20 4 400 40 24
1 3 25 9 625 75 26
2 4 30 16 900 120 28
3 5 34 25 1156 170 30
4 5 31 25 961 155 30
5 11 40 121 1600 440 42
Row_sum 30 180 200 5642 1000 180

接下来计算对应参数值。

【例9-2.2】计算回归模型中参数

输入:

data = pd.read_excel("data.xlsx")
data.columns=["X","Y"]
data["XY"]=data['X']*data['Y']
print("mean=\n{}".format(data.iloc[0:6][["X","Y","XY"]].mean()))
print("Lxy={}".format(sum((data["X"]-5)*(data["Y"]-30))))
print("Lxx={}".format(sum((data["X"]-5)**2)))
print("Lyy={}".format(sum((data["Y"]-30)**2)))

输出:

X 5.000000
Y 30.000000
XY 166.666667
dtype: float64
Lxy=3850
Lxx=675
Lyy=22742

注:在执行例9-2.2代码过程中,要重新执行程序,不要在例9-2.1基础之上执行。

参考9.2.3节中第一部分的公式,结合例9-2.2,得到数据如下:

所以年利润的95%的置信区间为[32−9.71,32+9.71]=[22.29,41.71]。


  • 基于Python3.6构建了近140个代码案例
  • 全面介绍Python在人工智能中的应用
  • 创新性地从全国大学生数学建模竞赛切入人工智能

《Python 3破冰人工智能:从入门到实战》创新性地从数学建模竞赛入手,深入浅出地讲解了人工智能领域的相关知识。本书内容基于Python 3.6,从人工智能领域的数学出发,到Python在人工智能场景下的关键模块;从网络爬虫到数据存储,再到数据分析;从机器学习到深度学习,涉及自然语言处理、机器学习、深度学习、推荐系统和知识图谱等。

此外,本书还提供了近140个代码案例和大量图表,全面系统地阐述了算法特性,个别案例算法来自于工作经验总结,力求帮助读者学以致用。



上一篇:学习Python编程的十大资源
下一篇:没有了
网友评论