首页 > 编程笔记 > Python笔记 阅读:26

多元线性回归模型详解(附带实例)

线性回归的目的是针对一个或多个特征与连续目标变量之间的关系建模。与监督学习分类相反,回归分析的主要目标是在连续尺度上预测输出,而不是在分类标签上。

多元线性回归的目的是对多个特征(解释变量 x)和连续目标值(响应变量 y)之间的关系建模。线性回归模型定义为:


其中,w0 是当 x0=1 时的 y 轴截距。

下图显示了具有两个特征的多元线性回归模型的二维拟合超平面。


图 2 二维拟合超平面

由图 2 可看到,三维散点图中多元线性回归超平面的可视化在静态图像时已经很难描述了。

【实例】现有如下数据:

希望通过分析披萨的 Diameter(直径)、Toppings(辅料数量)与 Price(价格)的线性关系,来预测披萨的价格。实现的代码如下:
'''导入必要模块'''
import numpy as np
import pandas as pd
'''加载数据'''
pizza=pd.read_csv("pizza_multi.csv", index_col='Id')
pizza    #显示数据
运行程序,输出如下:


由下列公式可计算出 的值:

'''将后5行数据作为测试集, 其他为训练集'''
X=pizza.iloc[:-5, :2].values
y=pizza.iloc[:-5, 2].values.reshape((-1, 1))
print(X)
print(y)
[[6 2]
[8 1]
[10 0]
[14 2]
[18 0]]
[[7.]
[9.]
[13.]
[17.5]
[18.]]

ones=np.ones(X.shape[0]).reshape(-1, 1)
X=np.hstack((X, ones))
X
array([[6.,  2.,  1.],
       [8.,  1.,  1.],
       [10.,  0.,  1.],
       [14.,  2.,  1.],
       [18.,  0.,  1.]])
w_=np.dot(np.dot(np.linalg.inv(np.dot(X.T, X)), X.T), y)
w_
array([[1.01041667],
       [0.39583333],
       [1.1875  ]])
即:

b=w_[-1]
w=w_[:-1]
print(w)
print(b)
[[1.01041667]
[0.39583333]]
[1.1875]

'''预测  '''
X_test=pizza.iloc[-5:, :2].values
y_test=pizza.iloc[-5:, 2].values.reshape((-1, 1))
print(X_test)
print(y_test)
[[8 2]
[9 0]
[11 2]
[16 2]
[12 0]]
[[11.]
[8.5]
[15.]
[18.]
[11.]]
y_pred=np.dot(X_test, w)+b
#y_pred=np.dot(np.hstack((X_test, ones)), w_)
print("目标值:\n", y_test)
print("预测值:\n", y_pred)
运行程序,输出如下:

目标值:
[[11.]
[8.5]
[15.]
[18.]
[11.]]
预测值:
[[10.0625  ]
[10.28125 ]
[13.09375 ]
[18.14583333]
[13.3125  ]]

相关文章