行政院國家科學委員會專題研究計畫 成果報告
網際網路架構下的自動化資料分析服務中心
計畫類別: 個別型計畫
計畫編號: NSC94-2213-E-011-026-
執行期間: 94 年 08 月 01 日至 95 年 07 月 31 日 執行單位: 國立臺灣科技大學資訊工程系
計畫主持人: 李育杰
計畫參與人員: 李育杰、張志丞、陳威翰
報告類型: 精簡報告
報告附件: 出席國際會議研究心得報告及發表論文 處理方式: 本計畫可公開查詢
中 華 民 國 95 年 10 月 31 日
網際網路架構下的自動化資料分析服務中心
本計劃將利用網際網路及資料庫管理技術,提供使用者於使用端上傳待分析 資料至伺服器,而系統可自動依使用者的需求進行資料分析,系統完成分析工作 後自動產生之結果,可存至使用者預先註冊之帳戶,供使用者下載分析結果與學 習模型(Learning Model)。初期將利用支撐向量法[4, 13]提供分類、迴歸與群聚問 題之分析服務。基於公開網路化資料探勘平台的設計理念,我們將採以下原則開 發使用介面與計算平台:
系統架構圖
圖 1 計劃整體架構圖
整個計劃分為三個部份,前端、資料庫、後端前端指的是 Users 和 Web Server 部份,資料庫指的是圖中 Database Server 部份,後端指的是 Computing Server Group 部份。而且前端不需要和後端直接傳訊息來做事,全部都是由 Database Server 當仲介來傳遞資料。
註冊 系統前端架構
圖 2 前端程式架構
登入
Classification SSVM
Regression SSVR
上傳檔案 &
設定 Project Name
秀出檔案內容資料
回到 Process State Training
設定相關參數
Testing
上傳檔案 &
設定 Project Name
秀出檔案內容資料
回到 Process State
Clustering K-means
上傳檔案 &
設定 Project Name &
設定群組個數
秀出檔案內容資料
回到 Process State 首頁
忘記密碼
登入是否成功
成功
網站資訊
修改帳戶 Process 通知管理員 成員 登出
演算法 View Project Delete Project
3
本計劃網頁伺服器是以 JSP [3] 語言所撰寫而成,使用者在第一次連到伺服 器時,必須先註冊,之後才能以註冊之資料來登入本網站。另外在會員註冊和資 料修改的部分有使用到 JavaScript [3] 的技巧作表單的驗證。
使用者在登入後會進入到首頁的框架頁面,網頁伺服器同時為使用者產生一 個 Session 作為專屬資料的保存,也提供不同使用者個人化的服務。依需要可以 選擇登出、登入或 E-mail 給網頁管理者,如果要執行工作的上傳或是檢閱工作 進度,就選擇 Process State 頁面。使用者可以使用 View 來查閱已完成工作的運 算結果, Delete 則是用來刪除工作。
無論是 SSVM、SSVR 或 K-means 都需要使用者設定參數,同一使用者會在 不同的頁面中設定所要使用的參數類型與數值,所以要配合 Session 來做個人化 的記錄。不同的演算法所使用到的參數不一,我們使用 XML [3] 的技術來做參 數的傳遞,將使用者設定的參數寫成 XML 檔再存入資料庫。參數設定完成後,
新增加的任務就會放入 Process State 頁面當中。
對於不知如何設定參數之使用者,本計劃特別發展出巢狀式均勻撒點法的策 略。在許多學習模型中,挑選參數時常是建立模型中最耗費時間的步驟。像是支 撐向量機(support vector machine)中,就需要挑選兩個適當的參數 C 與 gamma(高 斯核函數之參數)。傳統挑選參數之方式多為撒格子點法,但這類的方法雖然簡 易,但是其效率性較低而且需要使用者指定格子點之範圍。有鑒於此,我們的資 料分析系統屏除了格子點法,使用巢狀式均勻撒點法的策略。在此種方式中,使 用者僅需要上傳其資料,無需額外之設定即可得到適當之參數(其細節請參考本 實 驗 室 之 論 文 ”Model Selection for Support Vector Machines via Uniform
Design”)。藉由此巢狀式均勻撒點法,本系統提供了一個自動挑選參數的策略來
幫助使用者挑選參數,並且藉由此種方式來減輕系統的負擔。而在實測的環境 中,巢狀式均勻撒點法也確實達到了減少消耗系統資源及提供使用者方便之效 用。Process State 頁面可以清楚瀏覽各項工作的上傳時間、計算花費時間、目前 狀態(Waiting, Operating, Finish),使用者如果想要隨時監控工作的狀態,本計劃 也提供了一個貼心的小設計,讓使用者可以勾選每隔 60 秒網頁重整一次,這部 份也是使用 JavaScript 的技巧。如果工作完成,資料庫會得到後端程式傳回來的 結果,它也是一個 XML 的檔案,網頁伺服器會去資料庫將檔案讀出並解析,讓 使用者點選 View 來觀看計算結果。
系統後端架構
圖 3 後端程式架構
計劃中的後端指的是圖 1 的 Computing Server Group,而每一台 Computing Server 所做的事情就是圖 3 所畫的內容。
首先介紹我們後端程式的發展環境及操作平台,程式是使用 JDK5.0 的 Java,在 NetBeans 這個發展環境所撰寫。SSVM 及 SSVR 在計劃開發前就已經 使用 C 語言開發完成,K-means 則是透 JMatLink 套件在 Java 程式端使用 MatLab 函數。
後端程式執行流程:
1.主程式每五秒去 Database Server 檢查是否有新工作。
2.如果有新工作,就傳回工作內容及詳細資訊給主程式。
3.主程式就建立一個 Thread 去做其工作內容。
4.Thread 判斷要做 SSVM、SSVR 或是 K-means 演算法,再透過 JNI [3] 當仲介,
讀入 SSVM、SSVR 和 K-means 的動態連結函式庫來做運算。做完運算後的 結果再透過 JNI 傳回給 Thread。
5.Thread 得到結果後,再將結果寫入 Database Server。
6.Web Server 在更新網頁查看工作進度時,就會看到 Database Server 中運算後 的結果。
5
JNI ( Java Native Interface )
我們計劃中的 SSVR 和 SSVM 的程式是由 MATLAB 語言來寫成的,而計劃 的後端的主程式是由 Java 所寫成,自然而然會讓人想到這兩種語言應該如果做 連結、呼叫及引用模組,我們就想到使用目前最流行的 JNI ( Java Native Interface )。
JNI 簡介
Java Native Interface ( 以下簡稱 JNI ) 是 JDK 的一部份,如果你的程式有使 用到 JNI 的技術,可以使寫出來的程式擁有更完整的可攜性 ( Portable ),也就是 可以在跨平台上有更好的相容性。
JNI 允許 Java 程式在 Java Virtual Machine ( JVM ) 的內部去操縱、控制由其 它語言寫好的應用程式 ( Applications ) 及函式庫 ( Libraries ),像是 MATLAB、
C、C++甚至是組合語言 ( Assembly ),這些語言寫出來的模組,都可以透過 JNI 來和 Java 程式互相連結、引用,而不用重新將程式重寫一致化成同一種語言。
圖 4 JNI 示意圖
我們的計劃就是因為上面的第二個例子,計劃中的 SSVR 及 SSVM 在之前都 己經用 MATLAB 開發完成,而我們計劃是選用 Java 來撰寫,因此我們就需要使 用到 JNI 當媒介來呼叫 SSVR 和 SSVM 這兩套 Library。
若我們用 Java 來重寫一份 SSVR 及 SSVM,如果以後有什麼修改的話,就必 需在 MATLAB 和 Java 兩個版本上都要做修改,所以使用 JNI 來呼叫 MATLAB 在維護上比較方便,只需更改 MATLAB 的那份。
而且 SSVR 和 SSVM 這兩套 Library 有另外使用到 ATLAS ( Automatically Tuned Linear Algebra Software ) 矩陣運算,它是一個用 C 寫成的並將矩陣運算做 最佳化的 Library (相關連結:http://math-atlas.sourceforge.net/),所以用 C 來跑,速 度會變快許多。
總合上面的幾點,所以我們選擇使用 JNI 來呼叫用 MATLAB 開發好的 SSVR 和 SSVM 這兩套 Library。
XML 於本計劃中所扮演的角色
資料庫伺服器 網頁伺服器
計算伺服器群組
XML XML
圖 5 XML 參數傳遞示意圖
上圖概略呈現了 XML 在本計劃中,所扮演的角色是一個資料參數的傳遞。
網頁伺服器在處理完使用者的參數設定之後,會將數值寫成 XML 格式,並將它 存入資料庫中。而計算伺服器群組,則會到資料庫去讀取 XML 格式的使用者參 數設定資料。並加以計算之後,將結果寫成 XML 格式,存回資料庫中,而當使 用者瀏覽結果時,網頁伺服器會到資料庫去取得計算結果的 XML 文件,並加以 處理之後,顯示給使用者觀看。
或許各位會疑問,為什麼我們要使用 XML 而不使用固定的資料庫欄位來儲存相 關參數值呢?最主要考量的原因有兩個,第一是因為我們所開發的多個演算法中 所使用的參數個數不一,像是 SSVM 的參數只有 Nu 而 SSVR 的參數有 Nu 及 Epsilon,另外還有 Kernel 等參數設定,都有個數不一的地方。所以基於以上的 考量,我們捨棄了較不易更動的資料庫欄位儲存方式,改用一個較為彈性的資料 結構 – XML 來儲存參數資料。另外,也因為 XML 它具有很大的彈性,所以在 未來新增新的演算法時,我們並不須大幅的修改程式碼以及資料庫定義,而只需 對 XML 格式稍作修改,並加入新的演算法處理函數即可
7
網頁安全性問題– SQL Injection
由於我們的整各計劃架構中,是透過網路的方式來提供使用者服務的,所以我們 將面對的是一群來自各方不同的使用者,也因如此,我們也將面臨駭客入侵的嚴 苛挑戰,為了保護我們的使用者資料,因此我們對整體的系統,做了一些防駭的 措施。
JAVA Call MATLAB 製作流程
• //建立一個 JMatLink 的 engine 物件
• JMatLink engine = new JMatLink();
• //開啟 MATLAB
• engine.engOpen();
• //將參數傳至 MATLAB
• engine.engPutArray(“Mat”, work.getMatData());
• engine.engPutArray(“K”, (double)work.getXmlParam().getK_Value());
• //呼叫 MATLAB function 計算
• engine.engEvalString("[IDX, C, SUMD, D] = kmeans(Mat, K);");
• engine.engEvalString(“IDX=IDX‘; SUMD=SUMD’; D=D‘;”);
engine.engEvalString(“CNUM=zeros(1, K);
• //Return 計算結果至 Java 端
• work.setIdx(engine.engGetArray(“IDX”)[0]);
• work.setCentroid(engine.engGetArray("C"));
• work.setSumD(engine.engGetArray("SUMD")[0]);
• ork.setCNum((int[])StaticFuncs.ConvertArray(new int[0], engine.engGetArray(“CNUM”)[0]));
• //關閉 MATLAB
• engine.engCloseAll();
網站介紹
圖 6.1 網頁流程圖一:首頁 圖 6.2 網頁流程圖二:註冊頁面
圖 6.3 Process State 頁面 圖 6.4 選擇 SSVM
圖 6.5 輸入檔名及選擇上傳 Data 圖 6.6 確認上傳資料
9
圖 6.7 設定參數 圖 6.8 設定分割的方式及比例
圖 6.9 新增上傳的資料 圖 6.10 SSVM-Training 的結果
圖 6.11 SSVM-Testing 的結果
參考文獻
1.碁峰 JSP2.0 技術手冊 林上傑、林康司 2.松崗 最新 JSP 入門及應用
3.文魁 JSP 動態網頁入門實務 位元文化編著 4.文魁 XML 技術實務 位元文化編著
5.碁峰 專業ASP.NET安全防護 洪伶譯 6.金禾 Java 完美經典:優質學習 江義華 7.精彩 Java 2 程式設計
作者:吳逸賢 吳目誠
出版者:網奕資訊科技股份有限公司
8.資料採礦理論與實務-顧客關係管理的技巧與科學 作者:Michael J. A. Berry,Gordon S. Linoff
譯者:吳旭志,賴淑貞 出版者:維科圖書有限公司
9.資料採礦-顧客關係管理暨電子行銷之應用 作者:Michael J. A. Berry,Gordon S. Linoff 譯者:彭文正
出版者:數博網資訊股份有限公司 10.在Java內呼叫MATLAB程式的製作流程
http://www.held-mueller.de/JMatLink/
11.Java 技術論壇
http://www.javaworld.com.tw/jute/index.htmlhttp://www.javaworld.com.tw/jute/index.html
12. Java Performance 相關書籍介紹http://edu.uuu.com.tw/article/010310b.htm
13.Automatically Tuned Linear Algebra Software (ATLAS)
http://math-atlas.sourceforge.net/
14.Trail: Java Native Interface
http://java.sun.com/docs/books/tutorial/native1.1/index.html
15.鳥哥的 Linux 與 ADSL 私房菜http://linux.vbird.org/linux_basic/0240tarcompress.php
16.The Java Developers Almanac 1.4http://www.javaalmanac.com/egs/index.html
17. Chien-Ming Huang, Yuh-Jye Lee, Dennis K. J. Lin and Su-Yun Huang. "Model Selection for Support Vector Machines via Uniform Design", A special issue on Machine Learning and Robust Data Mining of Computational Statistics and Data Analysis. (Submitted)