回归分析
- 线性回归:研究单一依变项与一个或以上自变项之间的关系
一、线性回归的两个用处:
- 预测是指用已观察的变量来预测依变项
- 因果分析则是将自变项当做是依变项发生的原因
二、分类
(一)一元m次多项式回归方程:
1.一元一次方程 (y=b0+b1x)
import pandas as pd from pandas import DataFrame from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 df=pd.read_excel("一元.xlsx") # x=df["工作年限"] #生成Series x1=df[["工作年限"]] #生成DataFrame,x必须要这种格式,多元的时候直接加参数就可以了 # x2=df["工作年限"].values #生成列表 y=df["月薪"].values # 生成散点图 plt.scatter(x1,y) plt.xlabel("工作年限") plt.ylabel("薪金") #画一次函数 regr=LinearRegression() regr.fit(x1,y) plt.plot(x1,regr.predict(x1)) print("y=%sx+%s"%(regr.coef_,regr.intercept_)) #求出斜率和截距 print(regr.predict(20)) #预测 #y=[86.45263324]x+7125.368046776232 #[8854.42071162]
2.一元二次方程 (y=b0+b1x+b2x2)
import pandas as pd from pandas import DataFrame from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 df=pd.read_excel("一元.xlsx") # x=df["工作年限"] #生成Series x1=df[["工作年限"]] #生成DataFrame,x必须要这种格式 # x2=df["工作年限"].values #生成列表 y=df["月薪"].values # 生成散点图 plt.scatter(x1,y) plt.xlabel("工作年限") plt.ylabel("薪金") #画二次函数 poly_reg=PolynomialFeatures(degree=2) #多项式设为2 x4=poly_reg.fit_transform(x1) #转为多项式 regr=LinearRegression() regr.fit(x4,y) plt.plot(x1,regr.predict(x4),color="black") print(regr.coef_) print(regr.predict(poly_reg.fit_transform(10))) #转为多项式才能预测 plt.show()
#[ 0. 201.29139993 -1.0073576 ] #y=b0+b1x+b2x2,所以b1=201.29139993,b2=-1.0073576
#[6836.46992426]
(二)二元M次多项式回归方程
1.二元一次多项式回归方程
- 与下面一样
2.二元二次多项式回归方程
import pandas as pd from pandas import DataFrame from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 plt.rcParams['axes.unicode_minus']=False #用来正常显示负号 df=pd.read_excel("多元回归.xlsx") print(df)
x1=df[["工作年限","级别"]] #生成DataFrame,x必须要这种格式。与一次唯一的区别 y=df["月薪"].values
poly_reg=PolynomialFeatures(degree=2) #多项式设为2 x4=poly_reg.fit_transform(x1) #转为多项式regr=LinearRegression() regr.fit(x4,y) # plt.plot(x1,regr.predict(x4),color="black") print(regr.coef_) print(regr.intercept_) print(regr.predict(poly_reg.fit_transform([[10,3]]))) #二元的预测方式,要写成这样
#[ 0.00000000e+00 2.00000000e+02 1.00000000e+02 -1.00000000e+00 -4.44089210e-14 -9.03721542e-14]
y=bo+b1x1+b2x2+b3x12+b4x22+b5x1x2
bo b1 b2 b3 b4 b5
#4999.999999999951
#[7200.]
(三)多元多次的多项式回归方程
- 较复杂,加之实际生产生活中一元m次多项式归回就已经能够解决了,所以略!