leetcode一直刷,但是没有记录到CSDN这里,已经刷到150+60,所以上学期学了机器学习没太好掌握,所以现在也重新好好学习一下hhhhh。
PLA完全就是用来练手python的,直接代码
import matplotlib.pyplot as plt
import numpy as np
def createnote():
group = [[-4.0, 2.0], [-3.0, 1.0], [-3.0, 4.0], [-1.0, 3.0], [-1.0, 1.0], [1.0, 3.0], [1.0, 1.0], [-1.0, -2.0], [2.0, -3.0], [3.0, -3.0]]
labels = [-1, -1, -1, -1, -1, 1, 1, 1, 1, 1]
return group, labels
def makeplt(group, nodea, nodeb):
x = [group[n][0] for n in range(10)]
y = [group[n][1] for n in range(10)]
plt.plot(nodea, nodeb)
plt.scatter(x[0:5], y[0:5], c = 'r', marker = 'x')
plt.scatter(x[5:10], y[5:10], c = 'b')
plt.xlim(-5.0, 5.0)
plt.ylim(-5.0, 5.0)
plt.show()
def run(w0, group, labels):
w = np.mat(w0)
for i in range(10):
x = np.mat([1.0, group[i][0], group[i][1]])
if w * x.T * np.mat(labels[i]) < 0:
newW = w + x * labels[i]
return -1, newW
return 1, w
def PLA(group, labels):
w = [0, 1.0, 1.0]
f = -1.0
while f < 0:
f, w = run(w, group, labels)
print(w)
return w
def createpoint(w):
a = [-100.0, 100.0]
b = [(-1.0) * w[0] / w[2] - w[1] * (-100.0) / w[2], (-1.0) * w[0] / w[2] - w[1] * (100.0) / w[2]]
return a, b
group, labels = createnote()
w = PLA(group, labels)
newW = np.array(w).ravel().tolist()
a, b = createpoint(newW)
makeplt(group, a, b)