线性回归算法 Linear Regression

1.什么是线性回归算法

利用称为线性回归方程的最小平方函數对一个或多个自变量因变量之间关系进行建模的一种回归分析

2.基本回归方程

一元回归:$y=wx+b$

多元回归:

$h_\theta(x)=\theta_0+theta_1x_1+\theta_2x_2$

$h\theta(x)=\sum_{i=0}^n\theta_ix_i=\theta^Tx$

3.基本实现步骤

  • 数据处理

    归一化、数据补全、数据降维

  • 数据训练拟合

    求偏导→更新数据函数未知数

4.部分代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def linear_regression(data, initial_b=0, initial_m=0, learning_rate=0.01, num_iter=1000):
"""
优化器梯度下降
:param data 数据 二维数组[[x],[y]]
:param initial_b 初始值y=bx+m
:param initial_m 初始m值y=bx+m
:param learning_rate 学习率
:param num_iter 迭代次数
"""
b = initial_b
m = initial_m
for i in range(num_iter):
b, m = compute_gradient(b, m, data, learning_rate)
return [b, m]

def compute_gradient(b_cur, m_cur, data, learning_rate):
"""
梯度下降核心内容是对自变量进行不断的更新(针对w和b求偏导),使得目标函数不断逼近最小值
"""
b_gradient = 0
m_gradient = 0

N = float(len(data))
# 偏导数, 梯度
for i in range(0, len(data)):
x = data[i, 0]
y = data[i, 1]

b_gradient += -(2 / N) * (y - ((m_cur * x) + b_cur))
m_gradient += -(2 / N) * x * (y - ((m_cur * x) + b_cur)) #偏导数

new_b = b_cur - (learning_rate * b_gradient)
new_m = m_cur - (learning_rate * m_gradient)
return [new_b, new_m]