感知机分类:
设有两个模式样本集合
用感知机算法设计两个模式类的分类判决函数
python实现,但是由于一旦分类成功就停止,分类的显著性较低。
也没画图,尴尬。
def calW(a,b,w,bb,n): #a 正集合 b负集合 w 系数 bb sigma n 学习系数// f 激活函数
if len(a)==0 and len(b)==0:
return False
pnum=0 #处理元素的次数
wnum=0 #w循环次数
while True:
for num in a:
pnum=pnum+1
Dval=mul(num,w,bb)
if Dval<0:
wnum=wnum+1
w,bb=update(w,bb,n,Dval,num,1)
print(w,wnum,bb,'\n')
pnum=0
for num in b:
pnum=pnum+1
Dval=mul(num,w,bb)
if Dval>0:
wnum=wnum+1
w,bb=update(w,bb,n,Dval,num,0)
print(w,bb,'\n')
pnum=0
if pnum>=len(a)+len(b):
break
return wnum
def mul(num,w,b):
if not len(num)==len(w):
return False
sum=0
for i in range(len(num)):
sum=sum+num[i]*w[i]
sum=sum+b
return sum
def update(w,b,n,Dval,num,flag):
if flag:
for i in range(len(w)):
w[i]=w[i]+(1-Dval)*n*num[i]
b=b+n*(1-Dval)
else:
for i in range(len(w)):
w[i]=w[i]+(-1-Dval)*n*num[i]
b=b+n*(-1-Dval)
return w,b
def main():
a=[[2,1],[2,2],[3,2]]
b=[[4,0],[5,0],[5,1]]
n=0.1
bb=0.2
num=calW(a,b,[1000,1],bb,n)
print(num)
main()
并说明,当权值向量 取不同初值时,激活函数不同时,对训练效果的影响及原因。