多元线性回归
可以看出匹萨价格预测的模型 R 方值并不显著。 如何改进呢?
匹萨的价格其实还会受到其他因素的影响。 比如,匹萨的价格还与上面的辅料有关。 让我们再为模型增加一个输入变量。 用一元线性回归已经无法解决了,我们可以用更具一般性的模型来表示,即多元线性回归
写成矩阵形式如下:
增加辅料的匹萨价格预测模型训练集如下表所示:
同时要升级测试集数据:
学习算法评估三个参数的值:两个相关因子和一个截距。可以通过矩阵运算来实现,因为矩阵没有除法运算,所以用矩阵的转置运算和逆运算来实现:
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