1 / 27

Chapter14 輸出模型

Chapter14 輸出模型. 大綱 模型輸出概論 PMML 輸出 C 代碼輸出. 14.1 模型輸出概論. 14.1.1 模型的輸出. 選擇以何種方式輸出. 14.2 PMML 輸出. 除了 Factor/PCA 模型以外,都可以用 PMML 格式進行輸出 Export PMML 選項導出一個模型,會産生一個用 PMML2.0 來描述該模型的 XML 檔 PMML 文件的 DTD 是 pmml-2.0.dtd ,此文件在位於 Clementine 安裝目錄的 dtd 文件夾中 更多關於PMML的細節,使用者可以參考網址:

Download Presentation

Chapter14 輸出模型

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter14輸出模型 • 大綱 • 模型輸出概論 • PMML輸出 • C代碼輸出

  2. 14.1 模型輸出概論

  3. 14.1.1 模型的輸出 選擇以何種方式輸出

  4. 14.2 PMML輸出 • 除了Factor/PCA模型以外,都可以用PMML格式進行輸出 • Export PMML選項導出一個模型,會産生一個用PMML2.0來描述該模型的XML檔 • PMML文件的DTD是pmml-2.0.dtd,此文件在位於Clementine安裝目錄的dtd文件夾中 • 更多關於PMML的細節,使用者可以參考網址: http://www.dmg.org

  5. 14.3 C代碼輸出 • 模型 • 類神經網路 • Kohonen • C5.0 • K-Means

  6. 14.3.1 輸出C5.0決策數和規則集 • 規則的輸出創立兩個文件:頭檔和原始檔案。這些檔案名沿用以規則進行預測的OUT欄位名 • Exl:如果OUT欄位的名字是NAME,則輸出産生的文件爲NAME.h和NAME.c。 • 規則的頭文件 • 頭檔定義常數,用來代表符號(集和標記)欄位值。這些常數的名字經常有的形式:FIELD_VALUE • 例如,如果欄位BP有值high,將表示爲BP_high。 • 另外,頭檔定義struct代表一個例子。這個struct的名字爲exNAME,與OUT欄位中的NAME相對應。Struct處理整數型欄位爲int,實型欄位爲float

  7. 規則的原始檔案 • 包含C代碼的原始檔案用來預測相關的模型。這些代碼的前面部分包含相應的頭檔,其他的原始檔案定義預測的函數。這些函數的名字在OUT欄位中都有對應。在頭檔中所定義例子的結構作爲函數的參數使用。 • Ex:如果OUT欄位是NAME,則函數有以下結構 • int NAME(struct exNAME example, double *confidence) { .... }

  8. 決策樹中,函數體{ .... }是由If和Switch語句組成的。規則集轉變爲唯一水平條件。改進的模型中是每個模型産生一個“靜態” (檔局部)函數。 • 函數的返回值是依賴於OUT欄位類型: • 一個實數型OUT 欄位産生一個float。 • 一個整數型OUT 欄位返回一個int。 • 一個符號OUT 欄位産生一個整型,相應於一個在頭文件中被定義成欄位值的常數。 • 一個“unclassifiable” 例子返回0 (被定義爲unknown常量)。 • 函數自動爲其返回值設置與分類有關的信心

  9. 14.3.2 輸出網路 網路輸出創建3個文件 • 封裝頭文件(Wrapper header file) • 封裝程式文件(File of wrapper routines) • 網路定義文件(*.san) 封裝程式使用的函數是在其他檔中找到的,不依賴於模型 。這些函數使用網路定義檔來重新産生神經網路。檔案名 依神經系統網路名而定,如,一個名爲DRUG的網路,輸 出創建的檔案名叫做DRUG.h,DRUG.c,和DRUG.san

  10. 神經網路封裝頭文件(Neural Net Wrapper Header File) • 被輸出的神經網路封裝頭文件聲明兩個structs 和兩個函數,它們的名字源自網路名 • Ex:對某個網路名叫Drug,頭檔包括: • Drug_inputs,一個用於輸入的結構 • Drug_outputs,一個用於輸出的結構 • 處理輸入和輸出的兩個函數 • void neural_Drug_CLEARSETS ()----清除輸入資料 • 其他函數爲:struct Drug_outputs *neural_Drug( struct Drug_inputs *ins,struct Drug_outputs *outs ) ----利用輸入結構輸入,和以輸出結構返回網路中的結果

  11. 神經網路封裝程式(Neural Net Wrapper Routines) • 原始檔案包含了頭檔中所定義的兩個函數的代碼。該代碼包含了對在neurals.c中的函數的調用。封裝程式的返回值依賴於OUT欄位,如下 • 集合返回 *char。 • 標記産生int (1 代表真,0代表假) • 實數型返回爲double • 整數産生一個int • 神經網路輸出的其他文件(Other Files for Neural Net Export) • 爲了使用某個網路,附加檔應該在編譯期間就包含進來。這些檔在Clementine安裝的LIB/sann 子目錄中,並且被命名爲forprop.h,forprop.c,neurals.h,an和neurals.c

  12. 文件neurals.c爲神經網路的處理過程提供5個函數文件neurals.c爲神經網路的處理過程提供5個函數 • int neural_init(char *filename) 打開一個神經網路,它的定義對應於一個已命名檔(通常是一個 *.san 文件). • int neural_propagate(char *netname) 在神經網路中netname中設置變數varnam爲第三個參數,它的類 型依賴於被設置的變數 • int neural_propagate(char *netname) 通過網路netname,將輸入中的值前向傳播至輸出 • int neural_result( char *netname, char *varname, struct neural_r_u *results) 在神經網路netname中,將輸出變數varname 中的結果,輸入到 聯合變數的結果中(集合爲results.c ,實數範圍爲results.d,整數 值和標記值爲results.i) • nt neural_close(char *netname) 關閉名爲netname的網路

  13. 14.3.3 輸出徑向基函數網路網路(Exporting Radial Basis Function (RBF) Nets) • 創建三個文件 • 封裝頭文件 • 封裝程式的文件 • 神經網路定義文件(*.san) • 封裝程式利用在neurals_rbf.c中的函數。這些函數使用網路定義檔來複製網路。 • 徑向基函數網路輸出文件的名稱採用徑向基函數網路的名稱。例如,一個徑向基函數網路名爲Drug,,三個文件將名爲:Drug.h, Drug.c, and Drug.san

  14. 徑向基函數網路封裝頭文件 • 輸出的RBF網路封裝頭檔包含兩個結構(structs)和兩個函數,使用名字來源於網路名。例如,一個名爲Drug的網路産生的頭檔包括: • Drug_inputs, 用於輸入的struct • Drug_outputs, 用於輸出的struct • 處理輸入和輸出的函數 • void neural_Drug_CLEARSETS () ---清除輸入資料 • struct Drug_outputs *neural_Drug( struct Drug_inputs *ins,struct Drug_outputs *outs ) --利用輸入結構輸入,和以輸出結構返回RBF網路中的結果

  15. RBF 網路封裝程式 • 原始檔案包含兩個在相應的頭檔中定義的函數代碼,這些代碼包含著對neurals_rbf.c函數的調用 • 由封裝程式返回的值依賴於OUT欄位: • 一個産生 *char的集合。 • 返回一個int (1代表真,0代表假)的標記。 • 一個産生double的實數型。 • 一個返回int的整數型 • RBF網路輸出的其他文件(Other Files for RBF Net Export) • 爲了使用網路,使用者必須在編譯中包含附加檔。這些檔在Clementine安裝的LIB/sann子目錄中,並且被命名爲rbfprop.h,rbfprop.c,neurals_rbf.h,and neurals_rbf.c

  16. neurals_rbf.c檔在網路過程中提供五個函數 • int neural_rbf_init(char *filename) 打開在已命名的檔中定義的RBF網路(通常是*.san 文件) • int neural_rbf_set(char *netnam, char *varnam, ...) 在網路中netname中設置變數varnam爲第三個參數,它的 類型決定於被設置的變數 • nt neural_rbf_propagate(char *netname) 在網路netname中前向傳播從輸入中得到的變數值至輸出 • int neural_rbf_result(char *netname, char *varname, struct neural_r_u *results) 在網路netname中把從輸出變數varname 中得到的結果置入聯合類型 結果(設置爲results.c,實數範圍爲results.d,整數和標記爲results.i) • int neural_rbf_close(char *netname) 關閉名爲netname的網路

  17. 14.3.4輸出Kohonen網路 • 建立三個文件 • 封裝頭文件 • 封裝程式文件 • 網路定義文件(*.san) • 封裝程式利用在koh_net.c中的函數。這些函數使用網路定義檔複製網路。 • Kohonen 網路的輸出檔案名採用Kohonen 網路的名稱。例如,一個名叫Cluster_Drug的網路,其三個文件分別名爲:Cluster_Drug.h,Cluster_Drug.c,和Cluster_Drug.san。

  18. Kohonen 網路封裝頭文件 • 輸出的Kohonen 網路封裝頭文件包含兩個結構(structs)和兩個函數,使用名字來源於網路名。例如,一個網路名爲Cluster_Drug,産生的頭檔包括 • Cluster_Drug_inputs, 用於輸入的結構 • Cluster_Drug_outputs, 用於輸出的結構 • 處理輸入和輸出的兩個函數 • void kohonen_Cluster_Drug_CLEARSETS () ---清除輸入的資料 • struct Cluster_Drug_outputs *kohonen_Cluster_Drug( struct Cluster_Drug_inputs *ins, struct Cluster_Drug_outputs *outs ) ----利用輸入結構輸入,和以輸出結構返回網路中的結果

  19. Kohonen 網路封裝程式 • 原始檔案包含由相應的頭檔定義的兩個函數代碼。這些代碼包含著對koh_net.c的函數的調用 • 輸出結構包含整數型欄位,從dimension1 到dimensionN依次命名,N代表輸出圖的維數。 • Kohonen網路輸出的其他文件(Other Files for Kohonen Net Export) • 爲了使用網路,使用者必須在編譯過程中包含其他的附加 檔。這些檔在Clementine安裝的LIB/sann子目錄中,並且被命名爲kohprop.h, kohprop.c, koh_net.h,和koh_net.c。

  20. koh_net.c檔提供五個函數 • int kohonen_init(char *filename) 打開在被命名的檔中定義的Kohonen網路(通常是*.san 文件) • int kohonen_set(char *netname, char *varnam, ...) 在網路中netname 中設置變數varnam爲第三個參數,它的 類型決定於被設置的變數 • int kohonen_propagate(char *netname) 將輸入中的值通過網路netname向前傳播至輸出 • int kohonen_result( char *netname, char *varname, int *results ) 在netname網路中,將輸出變數varname中的結果,輸出至整型陣列 results • int kohonen_close(char *netname) 關閉名爲netname的網路

  21. 14.3.5輸出K-Mean模型 • 輸出K-Means模型創建三個檔 • 封裝頭文件 • 封裝程式文件 • 中心定義文件(*.sak) • 封裝程式使用在genkm.c中的函數。在genkm.c中的一個函數自動的讀取*.sak 檔,其中包含以下的資訊(N個類M個輸入) • 群的數目(Number of clusters) • 輸入的數目(Number of inputs) • 對群1從1輸入到M(Cluster 1 coordinates for inputs 1 through M) • 對群2從1輸入到M(Cluster 2 coordinates for inputs 1 through M) • 對群N從1輸入到M(Cluster N coordinates for inputs 1 through M) • K-Means 模型輸出檔的命名基於模型模型名。例如,一個名叫Drug的模型,三個檔將命名爲:KM_Drug.h,KM_Drug.c,和KM_Drug.sak

  22. K-Means 模型封裝頭檔 • 頭檔定義常數用來表示符號欄位值。這些常數的名字經常有下面的形式:FIELD_VALUE • Ex:如果欄位BP有值high,將被表現爲BP_high • 另外,頭檔定義了一個struct代表一個例子。這個struct的名字爲exNAME,與模型中的NAME相對應。Struct中整數型欄位處理爲int,實數型欄位爲double

  23. K-Means 模型封裝程式 • 包含著兩個函數的代碼,包含著對genkm.c中函數的調用 • void encode_Drug ( struct kmDrug example, double *ex ) 使用在0和1值對例子進行編碼,將結果存入雙精度型的陣列 • int calc_Drug( struct kmDrug example, struct Kmeans km,double *distance) 使用例子和中心陣列(包含在結構Kmeans中)來計算每個例子和 中心之間的距離,返回最小距離和相應的集群數

  24. K-Means 模型輸出的其他檔(Other Files for K-Means Model Export) • 爲了使用輸出模型,在編譯中,使用者必須包含檔kmgen.h和kmgen.c,kmgen.h 檔提供struct Kmeans的定義,包含 • nb_centers,類的數目 • nb_inputs,輸入到模型的數目 • centers,集群的中心值 • 其他文件,kmgen.c,提供兩個函數 • void km_init( char* name, struct Kmeans *km ) 打開name ( .sak 文件)文件並且填充struct Kmeans • void km_close(struct Kmeans *km) 關閉模型

  25. 14.3.6 欄位名 • 在輸出模型代碼中將使用模型中的欄位元名。但是,爲了産生有效的C代碼,一些名字可能做如下修改 • 以數位元開頭的集合欄位元名,例如12_inch, 添加下線字首,_12_inch. • 欄位元名中,非文字和數位元的字元變成下劃線。例如,Barcelona->Diagonal 變爲Barcelona__Diagonal

  26. 14.3.7 模型輸出的錯誤代碼 • 0: OK(成功) • 1: FILE NOT FOUND(文件未找到) • 2: INVALID NETWORK NAME(無效的網路名) • 3: NOT ENOUGH AVAILABLE MEMORY(記憶體不足) • 4: NO SUCH VARIABLE IN THE NETWORK(網路中無此變數) • 5: WRONG DIRECTION FOR VARIABLE(變數方向錯) • 6: INPUT VARIABLE ASSIGNMENT INCORRECT(輸入變數賦值不正確) • 7: UNKNOWN GENERIC TYPE (PROBABLY A FILE FAULT)(未知類型(可能是檔錯)) • 8: NETWORK ALREADY IN MEMORY(網路已在記憶體中) • 9: NO MORE RESULTS AVAILABLE FROM AN OUTPUT SET(在輸出集中無更多的可用的結果)

More Related