网站备案怎么那么慢,wordpress 主题next,网页设计与制作课程设计报告小结,js代码 嵌入网站【1】引言
在前序学习进程中#xff0c;我们已经了解了基本的二元分类器和神经元的构成#xff0c;文章学习链接为#xff1a;
神经网络|(一)加权平均法#xff0c;感知机和神经元-CSDN博客
在此基础上#xff0c;我们认识到神经元本身在做二元分类#xff0c;是一种非…【1】引言
在前序学习进程中我们已经了解了基本的二元分类器和神经元的构成文章学习链接为
神经网络|(一)加权平均法感知机和神经元-CSDN博客
在此基础上我们认识到神经元本身在做二元分类是一种非此即彼的选择。
由于不同的数据所占的权重不同二元分类结果也一定收到权重的影响为此必须使用数学表达这种影响力。
在神经网络相关研究的漫长发展进程中研究范围从单个因素到多个因素必须关注无数的二元分类结果同时作用后获得的最终分类结果于是sigmoid()函数被提出。
【2】二元分类结果数学表达
认识感知机的二元分类本质是研究sigmoid()函数的基础。
这里先创造四个矩阵这三个矩阵分别代表元素1元素2元素1和权重和元素2的权重。
import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入matplotlib模块#创造矩阵
a np.random.randint(5,9,size(1,5)) #矩阵
b np.random.randint(1,5,size(1,5)) #矩阵
c np.random.randn(1,5) #矩阵
d np.random.randn(1,5) #矩阵
#阈值开关
k1
#空矩阵
e np.zeros((1,5),np.uint8) #用来存储二元分类的计算结果
进行二元分类计算
#二元分类计算
for i in range (5):if a[0,i]*c[0,i]b[0,i]*d[0,i]-k0: #阈值计算满足条件时取1否则取0e[0,i]1else:e[0,i]0print(e[0,,i,],e[0,i]) #输出阈值计算结果
绘制二元分类的效果
#绘制二元分类计算的结果
print(a,a) #输出矩阵
print(b,b) #输出矩阵
print(c,c) #输出矩阵
print(d,d) #输出矩阵
xnp.arange(0,5,1) #定义一个自变量
plt.plot(x,e[0,x]) #对阈值计算结果绘图
plt.savefig(ganzhiji.png) #保存图像
plt.show() #输出图像
这里使用的阈值判断函数为 for i in range (5):if a[0,i]*c[0,i]b[0,i]*d[0,i]-k0: #阈值计算满足条件时取1否则取0e[0,i]1else:e[0,i]0 代码运行后的输出图像为 图1
图1真实地反映了非此即彼的二元分类效果。
需要注意的是由于元素的权重使用随机数生成所以每次运行上述程序获得的效果可能不一样。
【3】sigmoid函数
实际上二元分类效果可能不是两个元素算一次就进行判断而是多个结果互相叠加在一起也就是把阈值判断函数改为 f0 #用来存储二元分类的综合计算结果
#二元分类计算
for i in range (5):if i0:e[0, i] a[0, i] * c[0, i] b[0, i] * d[0, i] - k # 阈值计算else:e[0, i] a[0, i] * c[0, i] b[0, i] * d[0, i] - ke[0,i-1] # 阈值计算
if e[0,4]0: #最后计算结果超过阈值开关取1否则取0f1
else:f0 代码运行后获得的输出图像为 图2
此时获得的数据分别为 图3
由图3可见因为最后的e[0,4]0所以f1。
此时的完整代码为
import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入matplotlib模块#创造矩阵
a np.random.randint(5,9,size(1,5)) #矩阵
b np.random.randint(1,5,size(1,5)) #矩阵
c np.random.randn(1,5) #矩阵
d np.random.randn(1,5) #矩阵
#阈值开关
k1
#空矩阵
e np.zeros((1,5),np.uint8) #用来存储二元分类的计算结果
f0 #用来存储二元分类的综合计算结果
#二元分类计算
for i in range (5):if i0:e[0, i] a[0, i] * c[0, i] b[0, i] * d[0, i] - k # 阈值计算else:e[0, i] a[0, i] * c[0, i] b[0, i] * d[0, i] - ke[0,i-1] # 阈值计算
if e[0,4]0: #最后计算结果超过阈值开关取1否则取0f1
else:f0#绘制二元分类计算的结果
print(a,a) #输出矩阵
print(b,b) #输出矩阵
print(c,c) #输出矩阵
print(d,d) #输出矩阵
print(e,e) #输出矩阵
print(f,f) #输出矩阵
xnp.arange(0,5,1) #定义一个自变量
plt.plot(x,e[0,x]) #对阈值计算结果绘图
plt.savefig(ganzhiji.png) #保存图像
plt.show() #输出图像
sigmoid()函数就是在上述基础上进一步优化函数表达式把所有的加权计算结果变成指数函数的变量并且指数函数还设置成分式的一部分。相应的有如下函数 如果把简化为-x该函数相应简化为 函数对应的图像为 图4
图4是平滑过渡图像并且输出结果限定在(0,1)范围内。
绘制图4的代码为
import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入matplotlib模块#创造矩阵
tnp.linspace(-10,10,100) #自变量
y0np.exp(-t) #指数函数
y1/(1y0) #因变量
plt.plot(t,y) #绘制图像
plt.title(sigmoid() function) #图像上设置图名
plt.savefig(sigmoid() function.png) #保存图像
plt.show() #显示图像
【4】函数验证
为验证sigmoid()函数可以在上述示例中的代码plt.plot(x,e[0,x]) #对阈值计算结果绘图
修改为
plt.plot(x,1/(1np.exp(-e[0,x]))) #对阈值计算结果绘图
此时运行代码获得的图像为 图5
由图5可见复杂多变的实际情况中sigmoid()函数的输出结果也是在(0,1)范围内。所以sigmoid()函数本身具有很强的实用性。
此时的完整代码为
import numpy as np #引入numpy模块
import matplotlib.pyplot as plt #引入matplotlib模块#创造矩阵
a np.random.randint(5,9,size(1,5)) #矩阵
b np.random.randint(1,5,size(1,5)) #矩阵
c np.random.randn(1,5) #矩阵
d np.random.randn(1,5) #矩阵
#阈值开关
k1
#空矩阵
e np.zeros((1,5),np.uint8) #用来存储二元分类的计算结果
f0 #用来存储二元分类的综合计算结果
#二元分类计算
for i in range (5):if i0:e[0, i] a[0, i] * c[0, i] b[0, i] * d[0, i] - k # 阈值计算else:e[0, i] a[0, i] * c[0, i] b[0, i] * d[0, i] - ke[0,i-1] # 阈值计算
if e[0,4]0: #最后计算结果超过阈值开关取1否则取0f1
else:f0#绘制二元分类计算的结果
print(a,a) #输出矩阵
print(b,b) #输出矩阵
print(c,c) #输出矩阵
print(d,d) #输出矩阵
print(e,e) #输出矩阵
print(f,f) #输出矩阵
xnp.arange(0,5,1) #定义一个自变量
plt.plot(x,1/(1np.exp(-e[0,x]))) #对阈值计算结果绘图
plt.savefig(sigmoid.png) #保存图像
plt.show() #输出图像
需要注意的是由于元素的权重使用随机数生成所以每次运行上述程序获得的效果可能不一样。
【5】总结
探究了sigmoid()函数研究了多因素的综合作用。