python_MachineLearning_感知机PLA

感知机:线性二类分类器(linear binary classifier)
 
import numpy as np
import matplotlib.pyplot as plt

datafile = open('data.txt')

xx = []
yy = []

#read data from file
line = datafile.readline()
while line:
    p = line.split()
    print(p)
    xx.append((1, float(p[0]), float(p[1])))
    yy.append(int(p[2]))
    line = datafile.readline()

print(xx)
print(yy)
xx_arr = np.array(xx)  #numpy的array,相当于向量,可用于运算
yy_arr = np.array(yy)

w = np.array([1, 0, 0])
delta = 1

for i in range(100):
    false = -1
    for j in range(len(xx_arr)):
        if int(yy_arr[j]) != np.sign(np.dot(w, xx_arr[j])): #numpy.dot求两向量内积
            false = j
            break
    if false == -1:
        break
    w = w + delta * yy_arr[false] * xx_arr[false] #更新w向量

#使用matplotlib.pyplot绘制函数
line_x1 = np.linspace(0,5,50) #生成[0,5]之间均匀分布的50个x1
line_x2 = [(-w[1]*x-w[0])/w[2] for x in line_x1] #每个x1对应的x2
plt.plot(line_x1,line_x2)

#使用matplotlib.pyplot绘制点
for i in range(len(xx_arr)):
    if yy_arr[i] == 1:
        plt.plot(float(xx_arr[i][1]), float(xx_arr[i][2]),'go')
    else:
        plt.plot(float(xx_arr[i][1]), float(xx_arr[i][2]), 'ro')

plt.show()

猜你喜欢

转载自www.cnblogs.com/jasonlixuetao/p/9843777.html
今日推荐