1 Rosenblatt感知器模型介绍
1958年,一名叫做Rosenblatt的心理学家在McCulloch-Pitts模型的基础上提出了Rosenblatt感知器模型(第一个从算法上完整描述的神经元模型)。这个模型实现了神经元自主调整参数。
这个模型将标准答案与输出相减得到的预测与标准之间的误差,然后根据这个误差来调整权值。比如,让权值加上误差,再让相加结果作为新的权值。这就做到了预测结果过小的时候,误差为正数,权值加上误差之后向大调整,这样下次输入的结果就也会变大了,从而更加接近标准值;同样的,当预测结果过小的时候,误差为负数,权值加上误差之后向小调整,这样下次输入的结果就也会变小,从而也更加接近标准值。
由Rosenblatt感知器模型产生这样的思考:是否可以探寻研究出一种能够实时动态调整学习率的方法呢?
机器学习的本质是数学。意识是对客观世界的能动反映。我们常说世界可以被数学所表示,那么反映了客观世界的意识也应该同样隐含了数学的关系。根据这个指导思想,可以来研究各种各样的人工智能算法。
2 Rosenblatt感知器应用
Rosenblatt感知器,感知器也叫预测机
那么感知器有什么用呢?感知器可以拟合任何的线性函数,任何线性分类或线性回归问题都可以用感知器来解决。
使用python实现Rosenblatt感知器
pass:此次python实验的预测函数不含偏置项系数,所以函数图像过原点,只能拟合因果是成正比的数据或只能完成可被过原点的直线分类的数据
为了将“直观的直觉”转换为“现实认知”,在McCullon-Pitts模型的基础上,让神经元自己调整权值W。
3 Rosenblatt感知器流程
3.1 模型的算法调整
1.根据一个输入得到 y,用 标准值 - y = 误差;
2.将 W1 = W1+误差,再执行 步骤1 ;
这便是Rosenblatt模型的学习过程。当然它还需要处理一下细节问题。
3.2 当输入X为负数时
当输入为负,如果仍然用(W = W+误差)来调整W,那么调整后的结果将会越来越远离我们的标准结果;所以我们引入了 W = W + X*误差;这样就巧妙得避免了这个问题;
3.3 当W调整过大时
W调整也是有变化幅度的,如果W的变化幅度过大,那么可能会使计算的结果在标准结果上来回跳跃;所以我们引入了 W = W + X * 误差 * alpha
4 线性回归问题应用
1.首先先引入需要用到的库
import numpy from matplotlib import pypolt
引入numpy数学库以方便我们的数学计算
引入matplotlib中的pyplot模块进行画图操作
numpy使用手册:NumPy 中文
matplotlib使用手册:Matplotlib 中文
2.获取数据以便进行训练
def getdata(count): """获取指定数量的数据""" x = np.random.rand(count)#生成区间[0,1)的随机数 x = np.sort(x)#进行从小到大排序 y = [1.5*xx+np.random.rand()/3 for xx in x]#使用列表推导式生成对应的值 return x,y
创建一个名为getdata的函数随机生成有共同特征的数据,有一个参数count来接收获取数据的数量
3.获取100个数据
xs,ys = getdata(100)#获取100个数据
4.编写预测函数
w = float("%.2f"%np.random.uniform(0,1))#随机生成权重参数 alpha = 0.05#设置学习率 y_predict = w*xs#简单的预测函数
5.绘制图像以便我们观察
plt.scatter(xs,ys)#绘制散点图 plt.plot(xs,y_predict)#绘制预测函数的图像 plt.show()#显示图像
6.算法的实现
for i in range(100):#对每个数据进行一次权重调整 x = xs[i] y = ys[i] #取出一个数据 y_predict = w*x#计算相应数据的预测值 e = y - y_predict#计算相应数据的预测值与实际值的误差(使用差值评估误差) w = w + alpha*e*xs#根据误差调整权重参数 y_predict = w * xs#重新配置预测函数
7.多次训练
why:因为学习率的存在,我们的预测函数只进行了一次在总体上的调整,无法完美的拟合。但是如果学习率设置太大会造成预测曲线不能收敛
for _ in range(100):#进行100次训练 for i in range(100):#对每个数据进行一次权重调整 x = xs[i] y = ys[i] #取出一个数据 y_predict = w*x#计算相应数据的预测值 e = y - y_predict#计算相应数据的预测值与实际值的误差(使用差值评估误差) w = w + alpha*e*xs#根据误差调整权重参数 y_predict = w * xs#重新配置预测函数
8.再次画出预测曲线
plt.plot(xs,y_predict)#绘制预测函数的图像 plt.show()#显示图像
可以看到完美的拟合了数据