多重线性回归(Multiple Linear Regression):
研究一个因变量与多个自变量之间的线性关系的方法。
一元线性回归是特殊的多重线性回归,多重线性回归分析步骤和一元线性回归一样:
回归分析的步骤:
- 根据预测目标,确定自变量和因变量。
- 绘制散点图,确定回归模型类型。
- 估计模型参数,建立回归模型。
- 对回归模型进行检验。
回归方程的精度就是用来表示实际观测点和回归方程的拟合程度的指标,用调整判定系数来度量。
调整判定系数=ESS/TSS=1-(RSS/TSS)*(n-1/n-k-1)
其中:TSS:总离差平方和
ESS:回归平方和
RSS:残差平方和
n:样本个数
k:自变量个数 - 利用回归模型进行预测。
案例:现有10家已开店并营业的商店,有店铺面积、最近车站的距离及月营业额,现有一家新的店面,要求预测月营业额是多少
下面是分析过程:
第一步,根据预测目标,确定自变量和因变量。
因变量:月营业额
自变量:店铺面积、最近车站的距离。
代码演示:
import pandas;
import matplotlib;
from pandas.tools.plotting import scatter_matrix;
#导入数据
data = pandas.read_csv(
r'C:\Users\www12\Desktop\DA\pythonDM\4.2\data.csv'
)
第二步,绘制散点图,确定回归模型类型。
#绘制单个变量与因变量之间的散点图,并求出相关系数
plt.scatter(data['店铺的面积'],data['月营业额'])
plt.scatter(data['距离最近的车站'],data['月营业额'])
data[['店铺的面积','月营业额']].corr()
Out[6]:
店铺的面积 月营业额
店铺的面积 1.000000 0.892385
月营业额 0.892385 1.000000
data[['距离最近的车站','月营业额']].corr()
Out[7]:
距离最近的车站 月营业额
距离最近的车站 1.000000 -0.775083
月营业额 -0.775083 1.000000
可以看出两个自变量都与因变量成较强相关性,因此可以采用多重线性回归模型来解决该问题:
#绘制多个变量两两之间的散点图:scatter_matrix()方法
font = {
'family' : 'SimHei'
}
matplotlib.rc('font', **font)
scatter_matrix(
data[["店铺的面积", "距离最近的车站", "月营业额"]],
figsize=(10, 10), diagonal='kde'
) #diagonal参数表示变量与变量本身之间的绘图方式,kde代表直方图
#求相关系数矩阵
data[["店铺的面积", "距离最近的车站", "月营业额"]].corr()
Out[9]:
店铺的面积 距离最近的车站 月营业额
店铺的面积 1.000000 -0.492155 0.892385
距离最近的车站 -0.492155 1.000000 -0.775083
月营业额 0.892385 -0.775083 1.000000
结果如图所示:
可以看到店铺面积与月营业额成正相关,距离车站的距离与月营业额成负相关,三个变量都基本上呈正态分布,接下来我们可以用多重线性回归模型进行建模了。
代码和简单线性回归完全一样:
x = data[["店铺的面积", "距离最近的车站"]]
y = data[["月营业额"]]
from sklearn.linear_model import LinearRegression
#建模
lrModel = LinearRegression()
#训练模型
lrModel.fit(x, y)
#评分
lrModel.score(x, y)
Out[24]: 0.9452358526817111 #调整判定系数评分较高,模型拟合较好
#预测
lrModel.predict([[10, 110],[20, 110]])
Out[26]:
array([[442.96160353],
[858.09638609]])
#查看参数
lrModel.coef_
Out[28]: array([[41.51347826, -0.34088269]])
#查看截距
lrModel.intercept_
Out[29]: array([65.32391639])
API小结:
矩阵数据绘制散点图:
pandas.tools.plotting.scatter_matrix(matrix,figsize,digonal)
- matrix:矩阵
- figsize:绘图尺寸
- digonal:变量与本身之间的绘图函数kde为直方图。