import numpy as np
import matplotlib.pyplot as plt
#1、创建数据集
def createdata():
samples=np.array([[3,-3],[4,-3],[1,1],[1,2]])
labels=[-1,-1,1,1]
return samples,labels
#训练感知机模型
class Perceptron:
def __init__(self,x,y,a=1):
self.x=x
self.y=y
self.w=np.zeros((x.shape[1],1))#初始化权重,w1,w2均为0
self.b=0
self.a=1#学习率
self.numsamples=self.x.shape[0]
self.numfeatures=self.x.shape[1]
def sign(self,w,b,x):
y=np.dot(x,w)+b
return int(y)
def update(self,label_i,data_i):
tmp=label_i*self.a*data_i
tmp=tmp.reshape(self.w.shape)
#更新w和b
self.w=tmp+self.w
self.b=self.b+label_i*self.a
def train(self):
isFind=False
while not isFind:
count=0
for i in range(self.numsamples):
tmpY=self.sign(self.w,self.b,self.x[i,:])
if tmpY*self.y[i]<=0:#如果是一个误分类实例点
print ('误分类点为:',self.x[i,:],'此时的w和b为:',self.w,self.b)
count+=1
self.update(self.y[i],self.x[i,:])
if count==0:
print ( '最终训练得到的w和b为:',self.w,self.b)
isFind=True
return self.w,self.b
#画图描绘
class Picture:
def __init__(self
感知机实现—随机数据
最新推荐文章于 2022-09-22 23:25:14 发布