• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      一種回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)分類挖掘教學(xué)演示模型

      2016-02-19 09:36:25王華秋
      計(jì)算機(jī)時(shí)代 2016年2期

      王華秋

      DOI:10.16644/j.cnki.cn33-1094/tp.2016.02.024

      摘 ?要: 回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)分類算法是一種重要的數(shù)據(jù)挖掘方法,是處理大數(shù)據(jù)分類的重要工具。但該算法原理比較抽象,從公式推導(dǎo)的角度很難讓學(xué)生深刻理解,因此提出利用MATLAB數(shù)學(xué)軟件實(shí)現(xiàn)回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)分類算法,將其編譯成.NET平臺(tái)的COM組件,由Visual C#.NET集成開發(fā)環(huán)境下的應(yīng)用程序調(diào)用編譯后的MATLAB的COM組件,實(shí)現(xiàn)回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)的分類模型。

      關(guān)鍵詞: 回聲狀態(tài)神經(jīng)網(wǎng)絡(luò); 分類模型; MATLAB組件; Windows應(yīng)用程序

      中圖分類號(hào):G642 ? ? ? ? ?文獻(xiàn)標(biāo)志碼:A ? ? 文章編號(hào):1006-8228(2016)02-82-04

      A teaching demonstration model of classification mining

      based on echo state neural network

      Wang Huaqiu

      (Computer Science and Engineering College, Chongqing University of Technology, Chongqing 400054, China)

      Abstract: Echo state neural network classification algorithm is an important data mining method, which is an important tool to deal with classification of Big data. But the principle of the algorithm is abstract and complex, and it is very difficult for the students to understand the essence of the algorithm from the angle of formula derivation. In this paper, echo state neural network classification algorithm is realized by MATLAB mathematics software, and is compiled into COM component on .NET platform. The compiled COM component is called by an application program, which is developed in Visual C#.NET integrated environment, to realize the echo state neural network classification model.

      Key words: echo state neural network; classification model; MATLAB component; Windows application program

      0 引言

      回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)(ESN)由Jaeger于2001年提出[1],其特點(diǎn)在于將隨機(jī)稀疏連接的神經(jīng)元構(gòu)成的儲(chǔ)備池作為隱藏層,用以對(duì)輸入進(jìn)行高維的、非線性的表示?;芈暊顟B(tài)神經(jīng)網(wǎng)絡(luò)常用于解決數(shù)據(jù)分類決策問題,Alexandre等[2]提出面向靜態(tài)模式分類的回聲狀態(tài)網(wǎng)絡(luò)方法。彭喜元等[3]在此基礎(chǔ)上提出了隨機(jī)子空間多儲(chǔ)備池分類模型,提高了傳統(tǒng)回聲狀態(tài)網(wǎng)絡(luò)分類模型的泛化能力及分類性能,郭嘉等[4]在Alexandre基礎(chǔ)上提出了基于相應(yīng)簇的回聲狀態(tài)網(wǎng)絡(luò)靜態(tài)分類方法,將儲(chǔ)備池子簇與需分類數(shù)據(jù)類別數(shù)量建立對(duì)應(yīng)關(guān)系,能夠更好地滿足對(duì)不同數(shù)據(jù)有針對(duì)性的分類需求。

      神經(jīng)網(wǎng)絡(luò)分類算法是數(shù)據(jù)挖掘的一種重要方法,是教學(xué)中的重點(diǎn)環(huán)節(jié),由于回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)分類算法比較復(fù)雜,單從公式推導(dǎo)的角度講解,學(xué)生會(huì)難以真正理解,因此需要編程實(shí)現(xiàn)這些算法,讓學(xué)生有一個(gè)直觀的認(rèn)識(shí),這種分類算法需用到多種數(shù)學(xué)公式,用高級(jí)語(yǔ)言編程代碼量較大,學(xué)生依然難于理解,為了用少量的代碼編寫復(fù)雜的分類算法程序,本文采用專業(yè)數(shù)學(xué)軟件MATLAB實(shí)現(xiàn)了回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)分類算法。但由于MATLAB軟件主要是處理數(shù)學(xué)公式,進(jìn)行復(fù)雜的矩陣運(yùn)算,因此專業(yè)性較強(qiáng),對(duì)于非數(shù)學(xué)專業(yè)用戶來說輸入矩陣復(fù)雜、輸出結(jié)果抽象,較難理解[5],而且MATLAB是純粹的數(shù)學(xué)計(jì)算工具,操作界面繁瑣,造成用戶使用不方便[6]。本文采用混合編程技術(shù),即使用.NET編程環(huán)境,通過COM組件跨平臺(tái)調(diào)用的方式集成MATLAB自定義DLL組件,構(gòu)建既能夠進(jìn)行專業(yè)的數(shù)學(xué)分析和數(shù)學(xué)計(jì)算,又具有友好的操作界面,方便非專業(yè)人員使用的分類模型。

      1 總體思路

      首先,在MATLAB R2010b中新建.NET Aseembly類型的工程,編寫實(shí)現(xiàn)分類算法的m文件,編譯生成相應(yīng)的COM組件。在Visual Studio 2010應(yīng)用程序中引用MATLAB R2010b組件MWArray和實(shí)現(xiàn)分類算法的自定義組件,結(jié)合頁(yè)面輸入將數(shù)據(jù)參數(shù)傳遞給自定義組件,就可進(jìn)行分析計(jì)算,并將結(jié)果返回到界面中。系統(tǒng)的技術(shù)架構(gòu)如圖1所示。

      2 回聲狀態(tài)網(wǎng)絡(luò)分類模型

      ESN是一種新型的遞歸神經(jīng)網(wǎng)絡(luò),由輸入層、儲(chǔ)備池、輸出層組成,其結(jié)構(gòu)如圖2所示。

      假設(shè)該網(wǎng)絡(luò)中輸入層有K個(gè)輸入,儲(chǔ)備池有N個(gè)內(nèi)部連接單元,輸出層有L個(gè)輸出,儲(chǔ)備池內(nèi)部單元狀態(tài)更新方程如公式⑴所示:

      x(n+1)=f(Winu(n+1)+Wx(n)) ?⑴

      其中,x(n)=(x1(n),…,xN(n))T表示回聲狀態(tài)網(wǎng)絡(luò)的狀態(tài)變量,y(n)=(y1(n),…,yL(n))T表示目標(biāo)輸出,u(n)=(u1(n),…,uK(n))T表示輸入。f表示儲(chǔ)備池處理單元處理函數(shù),本文選擇雙曲正切函數(shù)tanh。Win表示輸入單元與儲(chǔ)備池處理單元的連接權(quán)值,W為儲(chǔ)備池內(nèi)處理單元之間的連接權(quán)值,其中Win、W無(wú)須訓(xùn)練,經(jīng)初試給定后不再發(fā)生改變。

      回聲狀態(tài)網(wǎng)絡(luò)分類模型在訓(xùn)練某特征數(shù)據(jù)對(duì)應(yīng)的狀態(tài)變量x(n)時(shí)保持輸入數(shù)據(jù)不變,當(dāng)狀態(tài)變量的變化量‖x(n)-x(n-1)‖小于閾值δ時(shí),表示狀態(tài)變量趨于穩(wěn)定,該特征數(shù)據(jù)對(duì)應(yīng)的狀態(tài)變量訓(xùn)練完成。

      關(guān)鍵代碼如下:

      X1=zeros(N,n);

      Yt=I_OUT;

      for t=1:n

      u=I_1(:,t);

      x1=zeros(N,1);

      x11=zeros(N,1)+1;

      his=200;

      error=0;

      while(sum(abs(x1-x11))>1&&error<2)

      if(sum(abs(x1-x11))-his>0)

      error=error+1;

      his=sum(abs(x1-x11));

      x11=x1;

      x1=tanh(Win1*[1;u] + W1*x1);

      else

      error=0;

      his=sum(abs(x1-x11));

      x11=x1;

      x1=tanh(Win1*[1;u] + W1*x1);

      end

      end

      X1(:,t)=x1;

      end

      分類輸出如公式⑵所示:

      y(n+1)=Woutf(u(n+1),x(n+1)) ?⑵

      其中,Wout表示儲(chǔ)備池與輸出單元的連接權(quán)值為輸出層到儲(chǔ)備池的連接權(quán)值,通過狀態(tài)變量計(jì)算得到,f為輸出單元處理函數(shù)。

      關(guān)鍵語(yǔ)句如下:

      x1=tanh(Win1*[1;u]+W1*x1);

      y=Wout1*x1;

      3 生成COM組件

      在MATLAB R2010b中編譯生成.NET使用的COM組件的步驟如下:

      ⑴ 新建Deployment Project,名稱為DM.prj,選擇Type為.NET Assembly。

      ⑵ 新建m文件,將實(shí)現(xiàn)回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)分類算法的語(yǔ)句寫入其中。

      ⑶ 在MATLAB R2010b窗口右側(cè)的.NET Assembly對(duì)話框中,依次選擇Add class和Add files添加ESNClassificationTrain.m和ESNClassificationTest.m文件。通過build 按鈕即可進(jìn)行編譯。編譯完成后會(huì)在安裝目錄C:\Program Files\MATLAB\R2010b\

      bin\DM\distrib下生成DM.dll和DMNative.dll文件。

      4 分類模型的實(shí)現(xiàn)

      在VS2010中調(diào)用MATLAB R2010b中的dll文件實(shí)現(xiàn)分類模型步驟如下。

      ⑴ 在VS2010中新建項(xiàng)目,使用C#語(yǔ)言建立Windows應(yīng)用程序。

      ⑵ 在VS2010中設(shè)計(jì)友好的交互界面。

      ⑶ 在設(shè)計(jì)界面中,添加原始數(shù)據(jù)表格DataGridView,根據(jù)原始數(shù)據(jù)量的大小確定儲(chǔ)備池有N個(gè)內(nèi)部連接單元個(gè)數(shù),這是惟一需要設(shè)置的參數(shù)。在表格右邊加入三個(gè)TextBox控件,分別存放目標(biāo)分類結(jié)果,實(shí)際分類結(jié)果和分類正確標(biāo)志。在Button控件的Clicked 事件中,加入代碼,實(shí)現(xiàn)IRIS數(shù)據(jù)庫(kù)的回聲狀態(tài)網(wǎng)絡(luò)分類。這樣即可方便用戶參看原始數(shù)據(jù),又可觀察分類效果,實(shí)現(xiàn)了良好的界面展示。

      ⑷ 添加引用組件:在.NET編程環(huán)境中,MATLAB程序輸入、處理、輸出的數(shù)字?jǐn)?shù)據(jù)只能是MWNumericArray類型的矩陣。所以需引用MWarray.dll組件,該組件的位置在MATLAB的安裝目錄\MATLAB\R2010b\toolbox\dotnetbuilder\bin\win32\

      v2.0下。另外,還需添加上述的自定義組件DM.dll和DMNative.dll。

      在代碼中加入以下語(yǔ)句,即可在程序中調(diào)用相應(yīng)組件。

      using MathWorks.MATLAB.NET.Arrays;

      using MathWorks.MATLAB.NET.Utility;

      using DM;

      ⑸ 由于MWarray.dll是64位的組件,而Windows應(yīng)用程序編譯生成的程序是32位的。因此要需要在工程屬性中將應(yīng)用程序生成的目標(biāo)平臺(tái)設(shè)置為x64。

      ⑹ 根據(jù)界面輸入,提取相應(yīng)的判斷矩陣,數(shù)據(jù)格式的轉(zhuǎn)換是需要解決的主要問題。

      關(guān)鍵語(yǔ)句如下:

      //定義二維數(shù)組,用于存儲(chǔ)輸入、輸出數(shù)據(jù)。

      double[,] I_1=new double[dt.Columns.Count-1, dt.Rows.Count];

      double[,] I_OUT=new double[ay.Count -1, dt.Rows.Count];

      //定義MATLAB類型的矩陣變量

      MWNumericArray arrI_1=null;

      //強(qiáng)制類型轉(zhuǎn)換,以便作為參數(shù)傳遞給MATLAB生成的COM組件

      arrI_1=(MWNumericArray)(I_1);

      MWNumericArray arrI_OUT=null;

      arrI_OUT=(MWNumericArray)(I_OUT);

      ⑺ 調(diào)用DM組件實(shí)現(xiàn)分類決策。添加“IRIS數(shù)據(jù)分類”按鈕,在click事件中寫入代碼,調(diào)用MATLAB生成的組件,實(shí)現(xiàn)分類決策。這里以IRIS鳶尾花數(shù)據(jù)作為分類算法的數(shù)據(jù)來源,數(shù)據(jù)集包含150個(gè)數(shù)據(jù)集,分為三類,每類50個(gè)數(shù)據(jù),每個(gè)數(shù)據(jù)包含4個(gè)屬性,三類分別為:setosa,versicolor,virginica,數(shù)據(jù)包含4個(gè)獨(dú)立的屬性,這些屬性變量測(cè)量植物的花朵,比如萼片和花瓣的長(zhǎng)度等。

      關(guān)鍵代碼如下:

      ESN e1=new ESN(); //初始化一個(gè)對(duì)象

      MWArray[] argsOut1=null; //用于存儲(chǔ)多個(gè)輸出結(jié)果

      int numArgsOut1=3;

      int N=40;

      argsOut1=e1.ESNClassificationTrain(numArgsOut1,arrI_

      1,arrI_OUT,N); //調(diào)用MATLAB中寫好的函數(shù)ESNClassificationTrain,此函數(shù)的功能是根據(jù)數(shù)據(jù)訓(xùn)練分類模型,得到3組輸出參數(shù),即Win,W和Wout。

      MWArray[] argsOut2=null; //用于存儲(chǔ)多個(gè)輸出結(jié)果

      int numArgsOut2=3;

      argsOut2=e1.ESNClassificationTest(numArgsOut2,

      (MWArray)argsOut1.GetValue(0), (MWArray)argsOut1

      .GetValue(1), (MWArray)argsOut1.GetValue(2),arrI_1,

      arrI_OUT,N); //調(diào)用MATLAB中寫好的函數(shù)ESNClassificationTest,此函數(shù)的功能是根據(jù)判斷數(shù)據(jù)的分類結(jié)果,得到3組輸出參數(shù),即目標(biāo)分類結(jié)果,實(shí)際分類結(jié)果和分類錯(cuò)誤標(biāo)識(shí)。

      //輸出的MWArray[]類型轉(zhuǎn)換為double[,]

      double[,] targetOut=new double[1,argsOut2[0]

      .NumberOfElements];

      targetOut=(double[,])argsOut2[0].ToArray();

      double[,] realOut=new double[1,argsOut2[1]

      .NumberOfElements];

      realOut=(double[,])argsOut2[1].ToArray();

      double[,] correctID=new double[1,argsOut2[2]

      .NumberOfElements];

      correctID=(double[,])argsOut2[2].ToArray();

      //將目標(biāo)值,實(shí)際值和錯(cuò)誤標(biāo)識(shí)顯示在控件中

      for (int i=0; i<targetOut.Length; i++)

      {

      textBox1.Text+=targetOut[0,i].ToString()+"\r\n";

      textBox5.Text+=realOut[0,i].ToString()+"\r\n";

      if(correctID[0,i]!=0)

      textBox6.Text+=i.ToString()+"出錯(cuò)"+"\r\n";

      else

      textBox6.Text+=""+"\r\n";

      }

      最終實(shí)現(xiàn)的分類模型運(yùn)行結(jié)果如圖3所示。

      5 總結(jié)

      回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)分類比較復(fù)雜,傳統(tǒng)的公式推導(dǎo)令人難以理解,用高級(jí)語(yǔ)言編程又難以用簡(jiǎn)潔代碼實(shí)現(xiàn),為了用簡(jiǎn)易的計(jì)算機(jī)代碼反映復(fù)雜的數(shù)學(xué)公式,本文利用MATLAB與.NET混合編程實(shí)現(xiàn)基于回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)分類挖掘?qū)嶒?yàn)演示系統(tǒng),體現(xiàn)了MATLAB專業(yè)數(shù)學(xué)軟件功能強(qiáng)大、計(jì)算簡(jiǎn)單的優(yōu)勢(shì),通過.NET平臺(tái)調(diào)用編譯后的MATLAB的COM組件,通過界面的直觀設(shè)計(jì),簡(jiǎn)化用戶操作,提高了程序的可操作性。本文使用的實(shí)例是回聲狀態(tài)神經(jīng)網(wǎng)絡(luò)分類模型,今后在實(shí)際應(yīng)用中可自行構(gòu)建具體目標(biāo)的指標(biāo)體系實(shí)現(xiàn)分類決策。

      參考文獻(xiàn)(References):

      [1] Jaeger H. The “Echo State” Approach to Analysing and

      Training Recurrent Neural Networks[R]. German National Reasearch Center for Information Technology,2001.

      [2] Alexandre L A, Embrechts M J, Linton J. ?Benchmarking

      Reservoir Computing on Time-independent Classification Tasks[C].In: Proceedings of the 2009 International Joint Conference on Neural Networks, Atlanta GA, USA,2009:89-93

      [3] 彭喜元,郭嘉,王建民.基于隨機(jī)子空間與多儲(chǔ)備池的分類方

      法[J].儀器儀表學(xué)報(bào),2011.32(11):2487-2492

      [4] 郭嘉,雷苗,彭喜元.基于相應(yīng)簇回聲狀態(tài)網(wǎng)絡(luò)靜態(tài)分類方法[J].

      電子學(xué)報(bào),2011.39(3):14-18

      [5] 蔣順業(yè),蘭洋.C#與Matlab混合編程在預(yù)警系統(tǒng)中的應(yīng)用[J].

      軟件,2013.34(4):83-84

      [6] 田鵬,姜印平.MATLAB與C#混合編程在ASP.NET數(shù)值計(jì)

      算中的分析與實(shí)現(xiàn)[J].天津理工大學(xué)學(xué)報(bào),2014.30(4):41-45

      磴口县| 石阡县| 连江县| 江安县| 瑞丽市| 盘锦市| 蚌埠市| 衡山县| 清流县| 鄄城县| 县级市| 唐山市| 闻喜县| 镇赉县| 三门县| 蒙阴县| 夏津县| 沾化县| 磐石市| 西乌珠穆沁旗| 庄河市| 吴堡县| 喀什市| 宁津县| 三原县| 永新县| 辽中县| 上饶县| 腾冲县| 肇州县| 琼结县| 吴桥县| 垫江县| 德江县| 库伦旗| 固始县| 德保县| 霍林郭勒市| 谷城县| 定结县| 临夏市|