-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhwfin_11.py
More file actions
49 lines (42 loc) · 1.27 KB
/
hwfin_11.py
File metadata and controls
49 lines (42 loc) · 1.27 KB
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
import numpy as np
import matplotlib.pyplot as plt
X = np.array([[1, 0], [0, 1], [0, -1], [-1, 0], [0, 2], [0, -2], [-2, 0]])
Y = np.array([-1, -1, -1, 1, 1, 1, 1])
def XtoZ(X):
return np.column_stack((
X[:, 1]**2 - 2 * X[:, 0] - 1,
X[:, 0]**2 - 2 * X[:, 1] + 1))
Ex = np.array(
[[-1, 1, -0.5], [1, -1, -0.5], [1, 0, -0.5], [0, 1, -0.5]])
# problem 11
plt.ion()
plt.scatter(X[:, 0], X[:, 1], s=400, c=Y, cmap='bwr', vmin=-1, vmax=1)
plt.show()
plt.waitforbuttonpress()
plt.clf()
Z = XtoZ(X)
plt.scatter(Z[:, 0], Z[:, 1], s=400, c=Y, cmap='bwr', vmin=-1, vmax=1)
plt.show()
plt.waitforbuttonpress()
z1_min = np.min(Z[:, 0])
z1_max = np.max(Z[:, 0])
z2_min = np.min(Z[:, 1])
z2_max = np.max(Z[:, 1])
def draw_line(W, b):
# w1*z1 + w2*z2 + b = 0
# w2 = - 1/w2 * (w1*z1 + b)
if W[1] != 0:
z2_1 = - 1 / W[1] * (W[0] * z1_min + b)
z2_2 = - 1 / W[1] * (W[0] * z1_max + b)
l, = plt.plot([z1_min, z1_max], [z2_1, z2_2],
marker="", linewidth=3, color='black')
else:
z1 = -b / W[0]
l, = plt.plot([z1, z1], [z2_min, z2_max],
marker="", linewidth=3, color='black')
return l
for ex in Ex:
l = draw_line(ex[0:2], ex[2])
plt.show()
plt.waitforbuttonpress()
l.remove()