神经网络算法研究和分析
【摘要】 神经网络算法研究和分析
神经网络算法研究和分析
对于两类分类问题的研究及其分析。
一类
二类
我们将其画出散点:
x=np.array((5,7,3,5,0,-1,-2,-3))
y=np.array((1,3,2,4,0,-3,3,0))
colors = [ "red", "red", "red", "red", "green", "green", "green", "green"]
plt.scatter(x, y ,c=colors)
接下来求出重心并画出其连线:
points = [[5., 4.],
[3., 2.],
[7., 3.],
[5., 1.]]
points = np.array(points)
b1 = np.mean(points,axis=0)
points = [[-3., 0.],
[-2., 3.],
[-1., -3.],
[0, 0]]
points = np.array(points)
b2 = np.mean(points,axis=0)
x2 = np.arange(-3,8,0.1)
y2=25/65*x2+1.5*25/65
plt.plot(x2,y2 ,label="centerLIne",linestyle="--")
根据题干直接画一条垂直的可划分线:
y3=-65/25*x2+2
plt.plot(x2,y3)
当然这样做全是自己目测出来的,如何利用机器学习,让程序从一条原本错误的曲线学习得到正确的划分呢?
算法核心分析:
1.先写出sgn函数:
def sgn(num):
if num >= 0:
return 1
else:
return -1
2.完成数据和模型初始化:
由图可知一定可以用线性方程进行划分区域,所以直接假设可划分模型是一个直线:
初始化:
x=np.array((5,7,3,5,0,-1,-2,-3))
y=np.array((1,3,2,4,0,-3,3,0))
n=np.array((1,1,1,1,-1,-1,-1,-1))
b=-9
w=-5
learnrate=0.05
3.反馈调节函数:
w = w + ((n[i] - sgn(y[i] - (x[i] * w + b))) * learnrate * x[i])
b =b+(y[i] - (x[i] * w + b)) * learnrate
开始学习之前错误函数的样子(绿色线条):
可以看到完全不能分割相应的数据。
学习24次后的曲线和调节结果(绿色线条):
我们可以发现曲线此时已经完全将两类点数分开,随后为了验证反馈调节的正确性,我将学习频率直接提高到10000次,看是否收敛:
一万次结果更加完美,所以我们的反馈调节函数是正确的。
下面附上我的全部可编译代码供大家参考。
import matplotlib.pyplot as plt
import numpy as np
def sgn(num):
if num >= 0:
return 1
else:
return -1
points = [[5., 4.],
[3., 2.],
[7., 3.],
[5., 1.]]
points = np.array(points)
b1 = np.mean(points,axis=0)
points = [[-3., 0.],
[-2., 3.],
[-1., -3.],
[0, 0]]
points = np.array(points)
b2 = np.mean(points,axis=0)
print(b1,b2)
x2 = np.arange(-3,8,0.1)
y2=25/65*x2+1.5*25/65
plt.plot(x2,y2 ,label="centerLIne",linestyle="--")
y3=-65/25*x2+2
plt.plot(x2,y3)
x=np.array((5,7,3,5,0,-1,-2,-3,b1[0],b2[0]))
y=np.array((1,3,2,4,0,-3,3,0,b1[1],b2[1]))
colors = [ "red", "red", "red", "red", "green", "green", "green", "green", "black", "black"]
plt.scatter(x, y ,c=colors)
x=np.array((5,7,3,5,0,-1,-2,-3))
y=np.array((1,3,2,4,0,-3,3,0))
n=np.array((1,1,1,1,-1,-1,-1,-1))
b=-9
w=-5
learnrate=0.05
for k in range(10000):
wori=w
bori=b
for i in range(8):
w = w + ((n[i] - sgn(y[i] - (x[i] * w + b))) * learnrate * x[i])
b =b+(y[i] - (x[i] * w + b)) * learnrate
print(w,b)
y4= w*x2+b
print(w,b)
plt.plot(x2,y4)
plt.ylim(-6,8)
plt.xlim(-6,8)
plt.legend()
plt.show()
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)