chapter14 輸出模型

27
© ISL 2000 1 Chapter14 輸輸輸輸 大大 大大大大大大 PMML 大大 C 大大大大

Upload: patrice-xavier

Post on 30-Dec-2015

86 views

Category:

Documents


0 download

DESCRIPTION

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的細節,使用者可以參考網址: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Chapter14 輸出模型

© ISL 2000 1

Chapter14輸出模型

大綱 模型輸出概論 PMML 輸出 C 代碼輸出

Page 2: Chapter14 輸出模型

© ISL 2000 2

14.1 模型輸出概論模型類型 支援的輸出類型神經網路 C 代碼, PMML

建立 C5.0 C 代碼, PMML

Kohonen C 代碼, PMML

線性回歸 PMML

一般規則歸納 PMML

Apriori PMML

K-Means C 代碼, PMML

邏輯回歸 PMML

兩步聚類 PMML

分類和回歸 (C&R) 樹 PMML

序列探測 PMML

因數分析 / 主成分分析 None

Page 3: Chapter14 輸出模型

© ISL 2000 3

14.1.1 模型的輸出

選擇以何種方式輸出

Page 4: Chapter14 輸出模型

© ISL 2000 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

Page 5: Chapter14 輸出模型

© ISL 2000 5

Page 6: Chapter14 輸出模型

© ISL 2000 6

14.3 C 代碼輸出

模型 類神經網路 Kohonen C5.0 K-Means

Page 7: Chapter14 輸出模型

© ISL 2000 7

14.3.1 輸出 C5.0 決策數和規則集

規則的輸出創立兩個文件:頭檔和原始檔案。這些檔案名沿用以規則進行預測的 OUT 欄位名

Exl: 如果 OUT 欄位的名字是 NAME ,則輸出産生的文件爲 NAME.h 和 NAME.c 。

規則的頭文件 頭檔定義常數,用來代表符號(集和標記)欄位值。這些常

數的名字經常有的形式: FIELD_VALUE 例如,如果欄位 BP 有值 high ,將表示爲 BP_high 。 另外,頭檔定義 struct 代表一個例子。這個 struct 的名字爲 ex

NAME ,與 OUT 欄位中的 NAME 相對應。 Struct 處理整數型欄位爲 int ,實型欄位爲 float

Page 8: Chapter14 輸出模型

© ISL 2000 8

規則的原始檔案 包含 C 代碼的原始檔案用來預測相關的模型。這些

代碼的前面部分包含相應的頭檔,其他的原始檔案定義預測的函數。這些函數的名字在 OUT 欄位中都有對應。在頭檔中所定義例子的結構作爲函數的參數使用。

Ex: 如果 OUT 欄位是 NAME ,則函數有以下結構 int NAME(struct exNAME example, double *confiden

ce) { .... }

Page 9: Chapter14 輸出模型

© ISL 2000 9

決策樹中,函數體 { .... } 是由 If 和 Switch 語句組成的。規則集轉變爲唯一水平條件。改進的模型中是每個模型産生一個“靜態” ( 檔局部)函數。

函數的返回值是依賴於 OUT 欄位類型: 一個實數型 OUT 欄位産生一個 float 。 一個整數型 OUT 欄位返回一個 int 。 一個符號 OUT 欄位産生一個整型,相應於一個在頭文件中被

定義成欄位值的常數。 一個“ unclassifiable” 例子返回 0 ( 被定義爲 unknown 常量 ) 。

函數自動爲其返回值設置與分類有關的信心

Page 10: Chapter14 輸出模型

© ISL 2000 10

14.3.2 輸出網路

網路輸出創建 3個文件 封裝頭文件( Wrapper header file ) 封裝程式文件( File of wrapper routines ) 網路定義文件 (*.san)

封裝程式使用的函數是在其他檔中找到的,不依賴於模型。這些函數使用網路定義檔來重新産生神經網路。檔案名依神經系統網路名而定,如,一個名爲 DRUG 的網路,輸出創建的檔案名叫做 DRUG.h , DRUG.c ,和 DRUG.san

Page 11: Chapter14 輸出模型

© ISL 2000 11

神經網路封裝頭文件(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 )

---- 利用輸入結構輸入,和以輸出結構返回網路中的結果

Page 12: Chapter14 輸出模型

© ISL 2000 12

神經網路封裝程式( 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

Page 13: Chapter14 輸出模型

© ISL 2000 13

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 的網路

文件 neurals.c 爲神經網路的處理過程提供 5 個函數

Page 14: Chapter14 輸出模型

© ISL 2000 14

14.3.3    輸出徑向基函數網路網路( Exporting Radial Basis Function (RBF) Nets ) 創建三個文件

封裝頭文件 封裝程式的文件 神經網路定義文件 (*.san)

封裝程式利用在 neurals_rbf.c 中的函數。這些函數使用網路定義檔來複製網路。

徑向基函數網路輸出文件的名稱採用徑向基函數網路的名稱。例如,一個徑向基函數網路名爲 Drug, ,三個文件將名爲: Drug.h, Drug.c, and Drug.san

Page 15: Chapter14 輸出模型

© ISL 2000 15

徑向基函數網路封裝頭文件

輸出的 RBF 網路封裝頭檔包含兩個結構( structs )和兩個函數,使用名字來源於網路名。例如,一個名爲Drug 的網路産生的頭檔包括: Drug_inputs, 用於輸入的 struct Drug_outputs, 用於輸出的 struct 處理輸入和輸出的函數

void neural_Drug_CLEARSETS () --- 清除輸入資料 struct Drug_outputs *neural_Drug( struct Drug_inputs *ins,str

uct Drug_outputs *outs ) -- 利用輸入結構輸入,和以輸出結構返回 RBF 網路中的結果

Page 16: Chapter14 輸出模型

© ISL 2000 16

RBF 網路封裝程式

原始檔案包含兩個在相應的頭檔中定義的函數代碼,這些代碼包含著對 neurals_rbf.c 函數的調用

由封裝程式返回的值依賴於 OUT 欄位: 一個産生 *char 的集合。 返回一個 int (1 代表真, 0 代表假 ) 的標記。 一個産生 double 的實數型。 一個返回 int 的整數型

RBF 網路輸出的其他文件( Other Files for RBF Net Export ) 爲了使用網路,使用者必須在編譯中包含附加檔。這些檔在 Clement

ine 安裝的 LIB/sann 子目錄中,並且被命名爲 rbfprop.h , rbfprop.c ,neurals_rbf.h , and neurals_rbf.c

Page 17: Chapter14 輸出模型

© ISL 2000 17

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 的網路

Page 18: Chapter14 輸出模型

© ISL 2000 18

14.3.4 輸出 Kohonen 網路

建立三個文件 封裝頭文件 封裝程式文件 網路定義文件 (*.san)

封裝程式利用在 koh_net.c 中的函數。這些函數使用網路定義檔複製網路。

Kohonen 網路的輸出檔案名採用 Kohonen 網路的名稱。例如,一個名叫 Cluster_Drug 的網路,其三個文件分別名爲: Cluster_Drug.h , Cluster_Drug.c ,和 Cluster_Drug.san 。

Page 19: Chapter14 輸出模型

© ISL 2000 19

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 )---- 利用輸入結構輸入,和以輸出結構返回網路中的結果

Page 20: Chapter14 輸出模型

© ISL 2000 20

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 。

Page 21: Chapter14 輸出模型

© ISL 2000 21

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 的網路

Page 22: Chapter14 輸出模型

© ISL 2000 22

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

Page 23: Chapter14 輸出模型

© ISL 2000 23

K-Means 模型封裝頭檔

頭檔定義常數用來表示符號欄位值。這些常數的名字經常有下面的形式: FIELD_VALUE

Ex: 如果欄位 BP 有值 high ,將被表現爲 BP_high 另外,頭檔定義了一個 struct 代表一個例子。這個 struc

t 的名字爲 exNAME ,與模型中的 NAME 相對應。 Struct 中整數型欄位處理爲 int ,實數型欄位爲 double

Page 24: Chapter14 輸出模型

© ISL 2000 24

K-Means 模型封裝程式

包含著兩個函數的代碼,包含著對 genkm.c 中函數的調用 void encode_Drug ( struct kmDrug example, double *ex ) 使用在 0 和 1 值對例子進行編碼,將結果存入雙精度型的陣列 int calc_Drug( struct kmDrug example, struct Kmeans km,double *d

istance) 使用例子和中心陣列(包含在結構 Kmeans 中)來計算每個例子和中心之間的距離,返回最小距離和相應的集群數

Page 25: Chapter14 輸出模型

© ISL 2000 25

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) 關閉模型

Page 26: Chapter14 輸出模型

© ISL 2000 26

14.3.6 欄位名

在輸出模型代碼中將使用模型中的欄位元名。但是,爲了産生有效的 C 代碼,一些名字可能做如下修改 以數位元開頭的集合欄位元名,例如 12_inch, 添加下線字首, _12_inch.

欄位元名中,非文字和數位元的字元變成下劃線。例如, Barcelona->Diagonal 變爲 Barcelona__Diagonal

Page 27: Chapter14 輸出模型

© ISL 2000 27

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

(在輸出集中無更多的可用的結果)