numpy实现单层感知机
作者:互联网
感知机原理:利用超平面对数据进行二分类。
损失函数:y*(wx+b)。大于0则判断成功否则判断失败。
通过梯度下降法优化损失函数。
机器学习就是分析数据,找到一种能解决你需求的函数关系。
目标感知机:x1+2*x2+3*x3+4*x4+5
代码部分:
引入numpy库:
import numpy as np构建数据:
train=np.random.randint(-300,300,(128,4))//生成范围在-300到300,128个4维度数据。 test=np.random.randint(-300,300,(30,4)) w=[1,2,3,4]//目标感知机权值 train_lable=np.dot(train,w)+5//求标签 test_lable=np.dot(test,w)+5 train_lable=train_lable>0//判断结果是否在超平面上,如果在上边为真 train_lable=train_lable.astype(int)//将布尔型变为0和1,真变为1,假变为0 train_lable=train_lable*2-1//乘2-1后1*2-1=1.0*2-1=-1 test_lable=test_lable>0 test_lable=test_lable.astype(int) test_lable=test_lable*2-1 train=train.astype(float)//变为浮点型便于归一化 test=test.astype(float) for i in range(4): train[:,i]=(train[:,i]-train[:,i].mean())/train[:,i].std()//进行归一化处理,否则数据影响参数学习 for i in range(4): test[:,i]=(test[:,i]-test[:,i].mean())/test[:,i].std() 进行训练: for i in range(30): sum=0 for j in range(128): out=np.dot(train[j],w1)+b1 if out*train_lable[j]<=0://如果输出和标签不是同号表示输出错误,进行梯度下降法 w1[0]=w1[0]+x*train_lable[j]*train[j,0] w1[1]=w1[1]+x*train_lable[j]*train[j,1] w1[2]=w1[2]+x*train_lable[j]*train[j,2] w1[3]=w1[3]+x*train_lable[j]*train[j,3] b1=b1+x*train_lable[j] sum=sum-out*train_lable[j]//记录损失值 print("损失函数值:",sum) 进行测试: sum=0 for i in range(30): out=np.dot(test[i],w1)+b1 if out*test_lable[i]<0: sum=sum+1 print(sum) print(w1,b1)标签:lable,sum,感知机,train,w1,test,np,numpy,单层 来源: https://www.cnblogs.com/hahaah/p/15073052.html