08.线性回归 Linear Regression

多元线性回归

可以看出匹萨价格预测的模型 R 方值并不显著。 如何改进呢?
匹萨的价格其实还会受到其他因素的影响。 比如,匹萨的价格还与上面的辅料有关。 让我们再为模型增加一个输入变量。 用一元线性回归已经无法解决了,我们可以用更具一般性的模型来表示,即多元线性回归

08.线性回归 Linear Regression

写成矩阵形式如下:

08.线性回归 Linear Regression

增加辅料的匹萨价格预测模型训练集如下表所示:

08.线性回归 Linear Regression

同时要升级测试集数据:

08.线性回归 Linear Regression

学习算法评估三个参数的值:两个相关因子和一个截距。可以通过矩阵运算来实现,因为矩阵没有除法运算,所以用矩阵的转置运算和逆运算来实现:

08.线性回归 Linear Regression
from numpy.linalg import inv
from numpy import dot, transpose
X = [[1,6,2],[1,8,1],[1,10,0],[1,14,2],[1,18,0]]
y = [[7],[9],[13],[17.5],[18]]
print(dot(inv(dot(transpose(X),X)),dot(transpose(X),y)))
[[1.1875    ]
 [1.01041667]
 [0.39583333]]

 利用矩阵的方法实现,可以得到同样的结果:

from numpy import *
xMat = mat(X)
yMat = mat(y)
xTx = xMat.T*xMat
print(xTx)
if linalg.det(xTx)==0.0:
	print("The matrix is singular")
else:
	ws = xTx.I * (xMat.T*yMat)
	print(ws)
[[  5  56   5]
 [ 56 720  48]
 [  5  48   9]]
[[1.1875    ]
 [1.01041667]
 [0.39583333]]

更新价格预测模型

from numpy.linalg import inv
from numpy import dot, transpose
import numpy as np
from sklearn.linear_model import LinearRegression
X = [[6,2],[8,1],[10,0],[14,2],[18,0]]
y = [[7],[9],[13],[17.5],[18]]
model = LinearRegression()
model.fit(X,y)
 
X_test = [[8,2], [9,0], [11,2], [16,2], [12,0]]
y_test = [[11], [8.5], [15], [18], [11]]
predictions = model.predict(X_test)
for i, prediction in enumerate(predictions):
	print("Predicted: %s, Target: %s" %(prediction, y_test[i]))
print("R2=%.2f"%model.score(X_test, y_test))
Predicted: [10.0625], Target: [11]
Predicted: [10.28125], Target: [8.5]
Predicted: [13.09375], Target: [15]
Predicted: [18.14583333], Target: [18]
Predicted: [13.3125], Target: [11]
R2=0.77

增加输入变量让模型拟合效果更好了。 为什么只用一个测试集评估一个模型的效果是不准确的,如何通过将测试集数据分块的方法来测试,让模型的测试效果更可靠。 不过现在至少可以认为匹萨价格预测问题,多元回归确实比一元回归效果更好。 假如输入变量和输出变量的关系不是线性的呢?下面来研究一个特别的多元线性回归的情况,可以用来构建非线性关系模型。

原创文章,作者:朋远方,如若转载,请注明出处:https://caovan.com/08-xianxinghuigui-linear-regression/.html

Like (0)
Donate 微信扫一扫 微信扫一扫
朋远方的头像朋远方
Previous 2022年11月14日 下午9:46
Next 2022年11月15日 下午10:14

相关推荐

发表回复

Please Login to Comment