神经网络python 实现,,感知器学习算法步骤如


感知器学习算法步骤如下:
1.对权系数w置初值
对权系数w=(W1.W2,…,Wn,Wn+1)的各个分量置一个较小的零随机值,但Wn+1
—g。并记为Wl(0),W2(0),…,Wn(0),同时有Wn+1(0)=-θ。这里Wi(t)为t时刻从第i个
输入上的权系数,i=1,2,…,n。Wn+1(t)为t时刻时的阀值。

bubuko.com,布布扣

图1-10 感知器的分类例子

2.输入一样本X=(X1,X2,…,Xn+1)以及它的期望输出d。

期望输出值d在样本的类属不同时取值不同。如果x是A类,则取d=1,如果x是B类,则取-1。期望输出d也即是教师信号。

3.计算实际输出值Y

bubuko.com,布布扣

4.根据实际输出求误差e

e=d-Y(t) (1-21)

5.用误差e去修改权系数

bubuko.com,布布扣

i=1,2,…,n,n+1 (1-22)

其中,η称为权重变化率,0<η≤1


# -*- coding: cp936 -*-import numpyimport pylabimport sysclass neuralNetwork:b = 1learnRaito = 0.5trainData = numpy.array([[b,1,3],[b,2,3],[b,1,8],[b,2,15],[b,3,7],[b,4,29],[b,4,8],[b,4,20]])#训练数据 可以训练不同的方程 模型trainResult = numpy.array([1,1,-1,-1,1,-1,1,-1])weight = numpy.array([b,0,0])error = 0.001def Out(self,v):"""求值的取向"""if v>=0:return 1else:return -1def exceptSignal(self,oldw,inx):#a bug here#print '-'*20#print oldw#print inx#print numpy.dot(oldw.T,inx)#print '+'*20#return 1ans = numpy.dot(oldw.T,inx)return self.Out(ans)def trainOnce(self,oldw,inx,correctResult):"""one training"""error = correctResult - self.exceptSignal(oldw,inx)newWeight = oldw + self.learnRaito*error*inxself.weight = newWeightreturn errordef getAbs(self,x):if x<0:return -xelse:return xdef trainWeight(self):"""traing the weight of data"""error = 1while error > self.error:i = 0error = 0for inx in self.trainData:error += self.getAbs(self.trainOnce(self.weight,inx,self.trainResult[i]))i = i+1def drawTrainResult(self):""" draw graph of Result"""xor = self.trainData[:,1]#切片,获取第一列,x坐标yor = self.trainData[:,2]#切片,获取第二列,y坐标pylab.subplot(111)xMax = numpy.max(xor)+15xMin = numpy.min(xor)-5yMax = numpy.max(yor)+50yMin = numpy.min(yor)-5pylab.xlabel(u'xor')pylab.ylabel(u'yor')pylab.xlim(xMin,xMax)pylab.ylim(yMin,yMax)#draw pointfor i in range(0,len(self.trainResult)):if self.trainResult[i] == 1:pylab.plot(xor[i],yor[i],'r*')else:pylab.plot(xor[i],yor[i],'ro')def drawTestResult(self,data):test = data#numpy.array(data)if self.exceptSignal(self.weight,test)>0:pylab.plot(test[1],test[2],'b*')else:pylab.plot(test[1],test[2],'bo')def drawTrueLine(self):"""真实函数分界线"""xtest = numpy.array(range(0,20))ytest = xtest*2+1.68pylab.plot(xtest,ytest,'g--')def showGraph(self):pylab.show()testData = [[1,5,11],[1,5,12],[1,4,16],[1,6,7],[1,3,12],[1,2,22]]neural = neuralNetwork()print neural.Out(124.32423)neural.trainWeight()neural.drawTrainResult()neural.drawTrueLine()#neural.showGraph()for test in testData:neural.drawTestResult(test)print neural.weightneural.showGraph()


红色是训练数据,蓝色是测试数据,圆点代表是在线上方,*代表在线下方,由图可知这个算法还不错

bubuko.com,布布扣





神经网络python 实现,布布扣,bubuko.com

神经网络python 实现

评论关闭