100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 书接上文——python实现感知分类器模型分类过程动态可视化

书接上文——python实现感知分类器模型分类过程动态可视化

时间:2019-07-15 18:05:23

相关推荐

书接上文——python实现感知分类器模型分类过程动态可视化

上一篇博文中我们学习和回归了一下感知器分类模型,今天还是在上文的基础上做了一点扩展,上文中的感知器分类一方面是分类的效果有时候不太好,另一方面是没有实现分类过程的动态可视化,我们都知道感知器分类模型本质上就是在每一次迭代过程中进行权重动态调整的过程,今天我们基于这个出发点来实现每一轮迭代权重更新值得输出与分类的结果的动态绘制,内容很简单,具体如下:

#!usr/bin/env python#encoding:utf-8'''__Author__:沂水寒城功能: 感知器分类模型实践demo'''import osimport sysimport xlrdimport xlwtimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib.colors import ListedColormapaaa=(np.array([0, 0, 1.1])).T if sys.version_info<(3,0):#python2版本使用reload(sys)sys.setdefaultencoding("utf-8") def write2Excel(data_list,targetfile='res.xls'):'''将txt中的内容转置后写到Excel中'''j=0book=xlwt.Workbook(encoding='utf-8')table=book.add_sheet('w_b')for one_list in data_list:for i in range(len(one_list)):table.write(i,j,one_list[i])j+=1book.save(targetfile)def readOneExcelData(data='data/Homework4.xlsx',row=1,col=1):'''row: 起始行索引col: 起始列索引'''workbook=xlrd.open_workbook(data,encoding_override="utf-8")table=workbook.sheets()[0]row_num,col_num=table.nrows,table.ncolsdata_list=[]for i in range(row,row_num):one_list=[]for j in range(col,col_num):one_list.append(table.cell_value(i,j)) data_list.append(one_list)return np.array(data_list),[np.array(one) for one in data_list]def inputNetCal(X,W):'''计算'''print('W====> ',W.tolist())res=np.dot(X,W)return resdef netWadjust(W,n,X,flag):'''网络权重自适应调整'''return W+((n*X)*flag)def biasCal(label,output,n):'''计算偏置项'''bias=label-outputbias+=n*biasreturn biasdef demoModel(datasets,x_total,W,n,iters,pic_path='demo_res.png'):'''感知器分类模型'''x1,x2,t=datasets[:, 1], datasets[:, 2], datasets[:, 3]label_list=[x_total[i][-1] for i in range(len(x_total))]print 'label_list: ',label_listright=0for i in range(iters):if i%5==0:right=0node=inputNetCal(x_total[i%5][:3],W)bias=biasCal(label_list[i%5],node,1)if x_total[i%5][-1]==1 and node<=0: W=netWadjust(W,n,x_total[i%5][:3],1)elif x_total[i%5][-1]==0 and node>=0:W=netWadjust(W,n,x_total[i%5][:3],-1)elif x_total[i%5][-1]==1 and node>0:right+=1elif x_total[i%5][-1]==0 and node<0:right+=1else:passplt.cla()for h in range(len(x1)):if t[h]==1:plt.plot(x1[h],x2[h],'ro')else:plt.plot(x1[h],x2[h],'bo')plt.xlim(-1,1) plt.ylim(-3,3)plt.title('Perceptron Model Dynamic Ploter')plt.grid(False)x_list=np.arange(-1,1,0.1)plt.plot(x_list,-((W[1]/W[2])*x_list)-(W[0]/W[2]))plt.pause(0.2)if right==5:plt.savefig(pic_path)print 'Best W: ',Wprint 'label_list: ',label_listprint 'i: ',ibreakreturn W.tolist(),biasif __name__=='__main__':n=1 w=(np.array([0, 0, 1.1])).T datasets,x_total=readOneExcelData(data='data/Homework4.xlsx',row=1,col=0)w,b=demoModel(datasets,x_total,w,n,50)w.append(b)data_list=[['W1','W2','W3','Bias'],w]write2Excel(data_list,targetfile='res.xls')

结果如下:

我们顺便保存了最终的分类结果、权重、偏置系数等数据,如下:

权重、偏置系数结果如下:

本文的实现中,初始的权重与学习率都是固定的,当然也可以固定偏置系数,这样结果就会是唯一的了,简单的实践。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。