numpy实现单层感知机

2021/7/28 23:09:28

本文主要是介绍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)

这篇关于numpy实现单层感知机的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程