回归模型---数学原理与代码实现

220 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

定义

回归是用于数学建模、分类和预测的关键技术,主要是通过对自变量和因变量的关系进行研究,以直线或曲线来拟合数据点,然后研究如何使得曲线到数据点的距离差异最小。

举个例子,对于影响房价的因素有很多,例如房间的建筑面积、房间的数量、房屋的位置等等诸多因素统称为自变量,房价称为因变量,根据自变量的关系研究因变量从而完成对房屋价格预测的这种过程就是回归的过程。

线性回归

线性回归,假设输入X与输出Y存在某种线性关系,如下公式所示

2.PNG

其中X是输入,Y是输出,b为偏置项,b的存在主要是当模型无任何输入时,仍可以保证模型存在输出,偏置项也就是我们常说的斜率,它的存在保证了直线的平移性。对于某个输入值x对应的输出y与真实值之间的误差可以表示如下:

3.PNG

单一变量线性回归

对于上述线性关系,假设只考虑一个自变量,那么相应的也就只考虑一个因变量,此时的回归模型最简单,例如对于房屋的价格,我们只考虑建筑面积带来的影响,设面积为A,房屋价格为Y,则关系表达式为:

4.PNG

为了使得预测结果相对准确,我们最希望得到真实价格和预测价格最小误差,也就是需要求得一个相对准确的w和b的组合,所以用到了最小二乘法,在最小化误差平方和的基础上获得w和b的组合,数学表达式为:

5.PNG

观察上式,要想令误差S最小,可以将上式进行求导,然后计算导数为0的值,计算公式如下:

7.PNG

然后求解上述两个公式,令其等于零可以得到下面的计算公式

8.PNG

由于对于最终b表达式可以表示为Y和A的均值形式,所以进一步可以写为

9.PNG

利用b带入可求得w

10.PNG

下面直接上代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

np.random.seed(0)

# 模拟面积数据
area = 1.5 * np.random.rand(100) + 7
# 模拟价格数据
price = 15 * area + 10 + np.random.randint(20, 50, size=len(area))
data = np.array([area, price])
# 将数据转换为excel列表的形式
data = pd.DataFrame(data=data.T, columns=['area', 'price'])

plt.scatter(data['area'], data['price'])
w = sum(price*(area-np.mean(area)))/sum((area-np.mean(area))**2)
b = np.mean(price) - w*np.mean(area)

y_pred = w * area + b
# 绘图
plt.plot(area, y_pred, color='red', label="predicted price")
plt.scatter(data['area'], data['price'], label="traing data")
plt.xlabel("Area")
plt.ylabel("Price")
plt.legend()
plt.show()

结果如下

11.PNG