使用Numpy实现一维线性回归

使用Numpy实现一维线性回归并可视化。

实现代码如下:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
"""
Created on Mon Aug 5 17:21:33 2019

使用numpy实现简单的线性回归,并可视化训练过程

@author: Deep
"""

import numpy as np
import matplotlib.pyplot as plt


"""
step 1: 生成数据
"""

x = np.linspace(-5, 5, num=100)
y = 3*x + 2 + np.random.randn(100)

# 画图
plt.scatter(x, y)
plt.xlabel("x")
plt.ylabel("y")
plt.show()

"""
step 2: 初始化参数并建立模型
yhat = w*x + b
L = (y - w*x - b)**2
dw = 2(y - w*x - b)*(-x)
db = 2(y - w*x - b)*(-1)
"""
w = 0
b = 0
lr = 1.2
num_iter = 50

b_lr = 0.0
w_lr = 0.0

plt.ion() # 画图

for i in range(num_iter):

dw = 0
db = 0

loss = []
for n in range(len(x)):

dw += 2*(y[n] - w*x[n] - b)*(-x[n])
db += 2*(y[n] - w*x[n] - b)*(-1)

dw = dw/len(x)
db = db/len(x)

w_lr = w_lr + dw**2
b_lr = b_lr + db**2

w = w - lr/np.sqrt(w_lr) * dw
b = b - lr/np.sqrt(b_lr) * db

if i % 5 == 0:

prediction = w*x + b
loss.append(np.sum((prediction - y)**2/len(x), axis=0))

plt.cla()
plt.scatter(x, y)
plt.plot(x, prediction, 'r-', lw=5)
plt.text(0.5, 0, 'Loss=%.4f' % loss[0], fontdict={'size': 20, 'color': 'red'})
plt.pause(0.1)

plt.ioff()
plt.show()

效果如下图所示:

img

参考:

  1. https://www.youtube.com/watch?v=1UqCjFQiiy0

  2. https://morvanzhou.github.io/tutorials/machine-learning/torch/3-01-regression/

  3. https://blog.csdn.net/weixin_40123108/article/details/83587117

-------------本文结束感谢您的阅读-------------

本文标题:使用Numpy实现一维线性回归

文章作者:丁鹏

发布时间:2019年08月05日 - 21:08

最后更新:2019年08月05日 - 21:08

原始链接:http://deepon.me/2019/08/05/使用Numpy实现一维线性回归/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

给博主投币,共同实现开源世界
0%