270 likes | 419 Views
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的細節,使用者可以參考網址:
E N D
Chapter14輸出模型 • 大綱 • 模型輸出概論 • PMML輸出 • C代碼輸出
14.1.1 模型的輸出 選擇以何種方式輸出
14.2 PMML輸出 • 除了Factor/PCA模型以外,都可以用PMML格式進行輸出 • Export PMML選項導出一個模型,會産生一個用PMML2.0來描述該模型的XML檔 • PMML文件的DTD是pmml-2.0.dtd,此文件在位於Clementine安裝目錄的dtd文件夾中 • 更多關於PMML的細節,使用者可以參考網址: http://www.dmg.org
14.3 C代碼輸出 • 模型 • 類神經網路 • Kohonen • C5.0 • K-Means
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
規則的原始檔案 • 包含C代碼的原始檔案用來預測相關的模型。這些代碼的前面部分包含相應的頭檔,其他的原始檔案定義預測的函數。這些函數的名字在OUT欄位中都有對應。在頭檔中所定義例子的結構作爲函數的參數使用。 • Ex:如果OUT欄位是NAME,則函數有以下結構 • int NAME(struct exNAME example, double *confidence) { .... }
決策樹中,函數體{ .... }是由If和Switch語句組成的。規則集轉變爲唯一水平條件。改進的模型中是每個模型産生一個“靜態” (檔局部)函數。 • 函數的返回值是依賴於OUT欄位類型: • 一個實數型OUT 欄位産生一個float。 • 一個整數型OUT 欄位返回一個int。 • 一個符號OUT 欄位産生一個整型,相應於一個在頭文件中被定義成欄位值的常數。 • 一個“unclassifiable” 例子返回0 (被定義爲unknown常量)。 • 函數自動爲其返回值設置與分類有關的信心
14.3.2 輸出網路 網路輸出創建3個文件 • 封裝頭文件(Wrapper header file) • 封裝程式文件(File of wrapper routines) • 網路定義文件(*.san) 封裝程式使用的函數是在其他檔中找到的,不依賴於模型 。這些函數使用網路定義檔來重新産生神經網路。檔案名 依神經系統網路名而定,如,一個名爲DRUG的網路,輸 出創建的檔案名叫做DRUG.h,DRUG.c,和DRUG.san
神經網路封裝頭文件(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 ) ----利用輸入結構輸入,和以輸出結構返回網路中的結果
神經網路封裝程式(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
文件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的網路
14.3.3 輸出徑向基函數網路網路(Exporting Radial Basis Function (RBF) Nets) • 創建三個文件 • 封裝頭文件 • 封裝程式的文件 • 神經網路定義文件(*.san) • 封裝程式利用在neurals_rbf.c中的函數。這些函數使用網路定義檔來複製網路。 • 徑向基函數網路輸出文件的名稱採用徑向基函數網路的名稱。例如,一個徑向基函數網路名爲Drug,,三個文件將名爲:Drug.h, Drug.c, and Drug.san
徑向基函數網路封裝頭文件 • 輸出的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網路中的結果
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
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的網路
14.3.4輸出Kohonen網路 • 建立三個文件 • 封裝頭文件 • 封裝程式文件 • 網路定義文件(*.san) • 封裝程式利用在koh_net.c中的函數。這些函數使用網路定義檔複製網路。 • Kohonen 網路的輸出檔案名採用Kohonen 網路的名稱。例如,一個名叫Cluster_Drug的網路,其三個文件分別名爲:Cluster_Drug.h,Cluster_Drug.c,和Cluster_Drug.san。
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 ) ----利用輸入結構輸入,和以輸出結構返回網路中的結果
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。
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的網路
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
K-Means 模型封裝頭檔 • 頭檔定義常數用來表示符號欄位值。這些常數的名字經常有下面的形式:FIELD_VALUE • Ex:如果欄位BP有值high,將被表現爲BP_high • 另外,頭檔定義了一個struct代表一個例子。這個struct的名字爲exNAME,與模型中的NAME相對應。Struct中整數型欄位處理爲int,實數型欄位爲double
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中)來計算每個例子和 中心之間的距離,返回最小距離和相應的集群數
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) 關閉模型
14.3.6 欄位名 • 在輸出模型代碼中將使用模型中的欄位元名。但是,爲了産生有效的C代碼,一些名字可能做如下修改 • 以數位元開頭的集合欄位元名,例如12_inch, 添加下線字首,_12_inch. • 欄位元名中,非文字和數位元的字元變成下劃線。例如,Barcelona->Diagonal 變爲Barcelona__Diagonal
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(在輸出集中無更多的可用的結果)