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实现单层感知机的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26大厂数据结构与算法教程:入门级详解
- 2024-12-26大厂算法与数据结构教程:新手入门指南
- 2024-12-26Python编程入门指南
- 2024-12-26数据结构高级教程:新手入门及初级提升指南
- 2024-12-26并查集入门教程:从零开始学会并查集
- 2024-12-26大厂数据结构与算法入门指南
- 2024-12-26大厂算法与数据结构入门教程
- 2024-12-26二叉树入门教程:轻松掌握基础概念与操作
- 2024-12-26初学者指南:轻松掌握链表
- 2024-12-26平衡树入门教程:轻松理解与应用