多元线性回归分析(multiple regression)原理及举例
1. 与简单线性回归区别(simple linear regression)
多个自变量(x)
2. 多元回归模型
y=β0+β1x1+β2x2+ … +βpxp+ε
其中:β0,β1,β2… βp是参数
ε是误差值
3. 多元回归方程
E(y)=β0+β1x1+β2x2+ … +βpxp
4. 估计多元回归方程:
y_hat=b0+b1x1+b2x2+ … +bpxp
一个样本被用来计算β0,β1,β2… βp的点估计b0, b1, b2,…, bp
5. 估计流程 (与简单线性回归类似)
6. 估计方法
使平方和sum of squares最小
7. 例子
一家快递公司送货:X1: 运输里程 X2: 运输次数 Y:总运输时间
Driving
Assignment |
X1=Miles
Traveled |
X2=Number of Deliveries | Y= Travel Time (Hours) |
1 | 100 | 4 | 9.3 |
2 | 50 | 3 | 4.8 |
3 | 100 | 4 | 8.9 |
4 | 100 | 2 | 6.5 |
5 | 50 | 2 | 4.2 |
6 | 80 | 2 | 6.2 |
7 | 75 | 3 | 7.4 |
8 | 65 | 4 | 6.0 |
9 | 90 | 3 | 7.6 |
10 | 90 | 2 | 6.1 |
Time = b0+ b1*Miles + b2 * Deliveries
Time = -0.869 + 0.0611 Miles + 0.923 Deliveries
- 描述参数含义
b0: 平均每多运送一英里,运输时间延长0.0611 小时
b1: 平均每多一次运输,运输时间延长 0.923 小时
- 预测
如果一个运输任务是跑102英里,运输6次,预计多少小时?
Time = -0.869 +0.0611 *102+ 0.923 * 6
= 10.9 (小时)
- 如果自变量中有分类型变量(categorical data) , 如何处理?
英里数 | 次数 | 车型 | 时间 |
100 | 4 | 1 | 9.3 |
50 | 3 | 0 | 4.8 |
100 | 4 | 1 | 8.9 |
100 | 2 | 2 | 6.5 |
50 | 2 | 2 | 4.2 |
80 | 2 | 1 | 6.2 |
75 | 3 | 1 | 7.4 |
65 | 4 | 0 | 6 |
90 | 3 | 0 | 7.6 |
- 关于误差的分布
误差ε是一个随机变量,均值为0
ε的方差对于所有的自变量来说相等
所有ε的值是独立的
ε满足正态分布,并且通过β0+β1x1+β2x2+ … +βpxp反映y的期望值
小结:那么 X值 可以是连续数值型数据也可以是分类型数据(分类型数据需要转化多列0 1 格式) 最终y值决定了是分类的问题 还是 回归的问题
例子1利用python 对x值为连续数值实现建模和预测
from numpy import genfromtxt from sklearn import linear_model #使用sklearnlinear model模型 dataPath = r"Delivery.csv" #导入数据 deliveryData = genfromtxt(dataPath,delimiter=',') #csv文件分隔符是逗号 转化为numpy array矩阵格式 print "data" print deliveryData x= deliveryData[:,:-1] # 第一个:取所有行 第二个取倒数第一列 :是不包括 0-1列 提取前两列 y = deliveryData[:,-1] #取所有行和最后一列 print x print y lr = linear_model.LinearRegression() lr.fit(x, y) print lr print("coefficients 系数:") #打印b0 b1 print lr.coef_ print("intercept 截面:") #截面 print lr.intercept_ xPredict = [102,6] yPredict = lr.predict(xPredict) print("predict:") print yPredict
例子2利用python 对x值为连续数值和分类型数值(也就是车型这列数据)混合时实现建模和预测
其原理很简单 比如 三类车型 123 为1时候 是011 为2时候是010 为3时候是001 并且是三列数值 也就是 三个x
代码就是例子1如上一样
from numpy import genfromtxt from sklearn import linear_model datapath=r"Delivery_Dummy.csv" data = genfromtxt(datapath,delimiter=",") x = data[1:,:-1] y = data[1:,-1] print x print y mlr = linear_model.LinearRegression() mlr.fit(x, y) print mlr print "coef:" print mlr.coef_ #打印b0 b1 b2 ... b5 print "intercept" print mlr.intercept_ xPredict = [90,2,0,0,1] yPredict = mlr.predict(xPredict) print "predict:" print yPredict