前面文章中,介绍了一元线性回归的求解,其关键点在于系数w和截距b的求解。但如果是多元特征,需要求解的变量就是多维的,之前的方法就会异常复杂。所以对于多元特征问题,求解的思路是将向量聚合,用矩阵的方式求解。
线性回归求解
最小二乘法的主要思想是,选择未知参数,使得预测值和观测值之差的平方和最小。
参考文档
最小二乘法:https://zhuanlan.zhihu.com/p/36910496
矩阵求导:https://blog.csdn.net/u010976453/article/details/54381248
波士顿房价预测
以下用经典的波士顿房价预测问题,来介绍多元线性回归问题代码求解方式。
# CRIM 城镇人均犯罪率 float # ZN 住宅用地超过 25000 sq.ft. 的比例 float # INDUS 城镇非零售商用土地的比例 float # CHAS 查理斯河空变量(如果边界是河流,则为1;否则为0) int # NOX 一氧化氮浓度 float # RM 住宅平均房间数 float # AGE 1940 年之前建成的自用房屋比例 float # DIS 到波士顿五个中心区域的加权距离 float # RAD 辐射性公路的接近指数 float # TAX 每 10000 美元的全值财产税率 float # PTRATIO 城镇师生比例 float # B 1000(Bk-0.63)^ 2,其中 Bk 指代城镇中黑人的比例 float # LSTAT 人口中地位低下者的比例 float # MEDV 自住房的平均房价,以千美元计 float
代码示例
1、加载数据
import numpy as np from matplotlib import pyplot as plt ds = np.loadtxt('./boston_housing.data') x_arr = ds[:, :-1] y_arr = ds[:, -1].reshape(-1, 1) X = np.mat(np.hstack([np.ones((x_arr.shape[0], 1)), x_arr])) Y = np.mat(y_arr)
2、参数求解
def fit(X, Y): theta = (X.T * X).I * X.T * Y return theta theta = fit(X, Y) y_hat = X * theta print('theta:', theta) print(y_hat.shape) # 可视化 x = range(len(y_hat)) plt.scatter(x, y_arr) plt.plot(x, y_hat, c='r') plt.show()
3、模型预测
x_test = np.mat([[1, 2.27346, 0.00, 18.580, 1, 0.7050, 6.2500, 92.60, 1.7984, 5, 403.0, 14.70, 348.92, 6.50]]) y_pred = test_x * theta print('预测值:', y_pred[0, 0])
本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/250