感知机

系列文章见: 《回忆AI时代-从图灵机到人工智能》

我们让计算机判断今天适不适合去七骑车?用感知机的案例。在之前的案例中,程序员把权重w = np.array([2.0, 0.8, 3.0])写到程序中,但实际这里不应该由程序员写到程序中,而是需要给计算机大量历史数据,让它自己学习,譬如:

天气 周末 身体 是否骑车
1 1 1 1
1 0 1 1
0 1 1 0
0 0 1 0
1 1 0 0
0 0 0 0

感知机代码:

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
import numpy as np

# -------------------------
# 训练数据
# -------------------------
X = np.array([
[1, 1, 1], # 晴天 周末 身体好 -> 骑车
[1, 0, 1], # 晴天 工作日 身体好 -> 骑车
[0, 1, 1], # 下雨 周末 身体好 -> 不骑
[0, 0, 1], # 下雨 工作日 身体好 -> 不骑
[1, 1, 0], # 晴天 周末 身体不好 -> 不骑
])

y = np.array([1, 1, 0, 0, 0])

# -------------------------
# 初始化权重
# -------------------------
w = np.zeros(3)

# 偏置
b = 0

# 学习率
lr = 0.2

# -------------------------
# 开始训练
# -------------------------
for epoch in range(20):

for x, target in zip(X, y):

s = np.dot(x, w) + b

pred = 1 if s >= 0 else 0

error = target - pred

# 更新权重
w += lr * error * x

# 更新偏置
b += lr * error

print("训练后的权重:", w)
print("训练后的偏置:", b)

程序输出:

1
2
3
4
5
训练后的权重:
[ 0.8 -0.2 0.2]

训练后的偏置:
-0.6