使用 Oracle 資料探勘 API

idba發表於2008-05-10

Oracle 釋出了 PL/SQL 和 Java 應用程式設計介面 (API) 後,市場上才會推出可利用這一新發布的 API 的點選工具或構建器,這一般是最好的做法。利用這一實踐,開發人員可將新功能即刻融入其應用程式中以使其企業從中獲益。

然而,開發可利用新發布 API 的專門工具需要投入大量精力。因此,理想情況下,從 API 釋出直至推出利用該 API 的直觀終端使用者工具,至少需要數個月,而實際上,這一滯後時間通常為一年或兩年。同時,利用 API 可能需要企業使用自己的工具,或更為常見的是利用即席解決方案,例如在報表生成器和電子表格中嵌入對 API 的呼叫。

一種常用方法是將 API 包裝在數個指令碼中,然後使用自定義按鈕和選單從電子表格訪問這些指令碼。但是,這一方法的主要缺點在於如今的電子表格是將單個單元格中的文字和數字作為值來進行處理的,因此它通常不是處理新功能的合適工具。

本文將介紹如何快速將分析和其他 API 整合至一個終端使用者可從其中輕鬆訪問新程式碼的電子表格平臺。作為指導性示例,其中還將闡釋如何將 Oracle 資料探勘 (PL/SQL) API 重新打包為 Java API,以及如何從電子表格呼叫的 J Cells 訪問該 API。J Cells 完全以 Oracle JDeveloper 編寫。它不僅可以將文字和數字作為單元格的值,而且還可將 Java 物件作為值進行處理,並可從其單元格直接訪問任何 Java API,以即刻進行部署。

電子表格平臺

我使用的是電子表格介面,只是其中允許使用者在單元格中建立任何 Java 物件以及使用基元 Java 型別。每個單元格都可用作另一個單元格的變數,使用者可以選擇在單元格中直接編寫 Java 程式碼,或使用其他格式。將電子表格介面和物件(而不僅是常規電子表格中的數字和文字)使用相結合是自動進行的:J Cells 為每個適合單元格的物件計算指示值,這一指示值給予使用者有關顯示物件的充足線索。此外,還會實施一個完整的值系統,可根據需要(例如,當使用者雙擊給定單元格時)以各種其他格式顯示物件。即使在電子表格中,因為公式可能定義比較複雜,所以系統還需識別要建立的物件是否具有相關的嚮導。嚮導通常是一個特定於某個物件型別的圖形化程式碼生成器。稍後本文示例將說明如何在 J Cells 中使用嚮導。

圖 1 顯示了本文示例的電子表格介面。

圖 1

圖 1:
J Cells 的電子表格介面

資料探勘 API

Oracle 支援兩種相容的 API 以訪問資料庫中的資料探勘功能。第一種是 PL/SQL API,其中包括 DBMS_DATA_MINING 程式包,另一種也是 Java API,稱為 Oracle 資料探勘 Java API。因為 J Cells 目前最適合訪問 Java API,所以需要以可直接從 Java 對其進行訪問的方式打包 PL/SQL API。兩個主要的 Oracle 資料探勘概念是設定模型。設定概念基本圍繞帶有兩列(setting_name 和 setting_value)的設定表構建;其中 setting_name 是挖掘演算法使用的屬性名,而 setting_value 是與該屬性相對應的值。

DBMS_DATA_MINING 程式包包含若干過程,包括 CREATE_MODEL 和 APPLY。CREATE_MODEL 過程根據設定表(作為過程的引數之一提供)中的值為給定挖掘函式和資料集建立挖掘模型。該過程簡單且易於使用。實際上,由使用者來為要建立的模型、要使用的挖掘函式、包含要使用的資料的表、要建模的列以及設定表提供名稱。這一方法的優點在於所有不同演算法都可以類似的方法呼叫。每種演算法的微調都整合至設定表中,但在很多情況下,各種設定係數可由演算法本身自動決定。設定表中條目的複雜性根據使用者的專業技術背景和演算法而有所不同。許多專業使用者可能希望手動設定所有可能的係數,而我們中的多數人更可能樂意系統自動給出適用設定。Oracle 提供了一個要用作設定鍵的常量列表,以及命名為常量或數字間隔的值。

表 1: algo_name(演算法名)設定鍵的值

演算法說明

algo_adaptive_bayes_network

Adaptive Bayes network 演算法(分類)

algo_ai_mdl

最短描述長度演算法(屬性重要性)

algo_apriori_association_rules

Apriori 演算法(關聯)

algo_decision_tree

決策樹演算法(分類)

algo_kmeans

k-means 演算法(叢集)

algo_naive_bayes

Naive Bayes 演算法(分類)

algo_nonnegative_matrix_factor

非負矩陣因式分解演算法(特性選擇)

algo_o_cluster

O-Cluster 演算法(叢集)

algo_support_vector_machines

支援向量機演算法(分類或迴歸)

Oracle 的演算法名 (algo_name) 鍵的常量值如上所示。對於其中的每一個值,使用了可能鍵和值的不同集等。以下(圖 2)顯示了嚮導函式是如何將這些鍵對映到樹結構,並允許使用者通過操縱該設定樹定義設定表的。

作為 Oracle 資料庫中建立的挖掘模型,DBMS_DATA_MINING.APPLY 過程用於將該模型應用到新資料集。而且,這是一個易於使用的過程,要求只輸入挖掘模型名、包含新資料集的表名、用於識別新資料集中行的列以及結果資料集名。Java 類 OracleMiningModel (below) 在呼叫預測、評分或 apply 方法時,都會利用該 APPLY 過程。此外,DBMS_DATA_MINING 程式包包含若干根據型別將各個模型詳細資訊作為結果集或以 XML 格式返回的函式。這些細節函式也可通過使用 OracleMiningModel 類的例項(代表資料庫中的不同模型)進行訪問。

此處可通過建立一個稱為 OracleModelSettings 的 Java 類以 Java 打包 (PL/SQL) 設定概念,該類具有靈活的建構函式和各種簽名,包括

public OracleModelSettings ( String modelSettingsName,
				Connection databaseConnection, 
				String[] keyToValueStringMap) 
		throws SQLException

keyToValueStringMap 只是表單“ -> ”的字串陣列。該陣列詳細說明了設定表的行,以及負責在資料庫中維護設定表的類。

類似地,此處也可通過建立一個稱為 OracleMiningModel 的 Java 類以 Java 打包模型概念,該類具有建構函式和各種簽名,包括

public OracleMiningModel ( String modelName,
			OracleModelSettings oms,
			String[] keyToValueStringMap) 
			boolean recreate)
		throws SQLException

此處使用 keyToValueMappings 陣列來確定在 Oracle 資料庫中建立資料探勘模型所需的演算法以及其他命名屬性。該類的用途就是建立和維護資料探勘模型。此外,OracleMiningModel 類還定義了用於檢索以及將該模型應用到新資料集的方法。這些方法包括以下各項,此處只顯示了一小部分。

public OracleResultSet infoAprioriAssociationRules(int topn)
public OracleResultSet infoAprioriFrequentItemsets(int topn)
public OracleResultSet infoAdaptiveBayesNetwork()
public OracleResultSet infoAIMinimumDescLength()
public OracleResultSet infoKMeans()
public OracleResultSet infoNaiveBayes()
public OracleResultSet infoNonnegativeMatrixFactorization()
public OracleResultSet infoOCluster()
public OracleResultSet infoSupportVectorMachines()
public XMLType infoDecisionTree()
public Object getPrediction(String[] signature, double[] doubleVal)
public HashMap score(String[] signature, double[] doubleVal)
public OracleResultSet apply(	String dataTable, 
				String caseID, 
				String resultTable, 
				String schema, 
				boolean overwrite)

除了具有上述簽名外,所有的方法可能都會引發 SQL 意外。一旦可以從兩個簡單類來管理資料探勘功能後,就可呼叫該電子表格平臺來訪問任何可用的資料探勘演算法,以在 Oracle 資料庫中建模資料集。

資料探勘示例

因此,來看一個在該系統中編寫的小資料探勘模型,該模型可通過訪問 Oracle 資料庫建立並執行 ODM (Oracle Data Mining) 迴歸模型。該回歸模型的用途是 根據輸入(例如血壓、高度和體重)預測心率。使用 J Cells 可直接訪問 Java API 以例項化物件並在物件上呼叫方法。首先,連線至 Oracle 資料庫。DataSource 物件可通過將以下公式

() = ~ OracleDataSource("agust","agust","dbVaio","vaioFS");

輸入到電子表格的單元格 b3 中進行例項化。Tilde 符號 (~) 表示縮寫符號,允許 J Cells 將(右側)語句轉換為建構函式t“new cell.OracleDataSource( "agust", "agust", "dbVaio", "vaioFS");”,使系統能夠以使用者“agust”的身份訪問伺服器“vaioFS”上的資料庫“dbVaio”。

現在,可通過在 DataSource 物件上呼叫正確的方法(例如在單元格 b4 和 b5 中分別輸入以下公式),獲得資料庫連線以及檢查資料庫中的源資料:

(*) = b3.getConnection(); 
(*) = b3.query("select * from pulse_clinical");

第一個語句將向單元格 b4 中返回一個 java.sql.Connection 物件,第二個語句將向單元格 b5 中返回一個 java.sql.ResultSet 物件。只需通過雙擊單元格 (b5) 就可檢查結果集,該操作會將結果表顯示在表格框架中以便檢視。

迄今為止,我只在該電子表格中建立了幾個簡單的資料物件。現在,可以呼叫資料探勘 API 來定義一個設定物件,然後建立一個簡單的資料探勘模型。首先,通過在單元格 b6 中輸入以下語句來建立一個設定物件:

(*) = new cell.odm.OracleModelSettings("xyz_settings", b4,
		new String[]{
			"algo_name -> algo_support_vector_machines",
			"svms_kernel_function -> svms_linear"} );

立刻我發現該公式中的問題是終端使用者友好的,因此,註冊一個帶有 J Cells 的嚮導,在提示使用者後自動生成該公式,可能是個不錯的辦法。一般,電子表格在使用者建立複雜公式時都會給予幫助,因此使用者可以期望在例項化物件時獲得指導。

部署的嚮導如圖 2 所示。

圖 2

圖 2:
典型的嚮導介面

同樣,資料探勘模型通過使用嚮導或輸入公式來建立,在這兩種情況中,結果模型都是在直接指定 API 呼叫的單元格 b7 中進行例項化:

(*)= new cell.odm.OracleMiningModel("xyz_model", b6,
		new String[]{
			"data_table_name -> pulse_clinical",
			"mining_function -> regression",
			"target_column_name -> pulse",
			"case_id_column_name -> subject"},
			false );
使用該公式結果例項化資料探勘模型將在 Oracle 資料庫中生成標準的 Oracle 資料探勘模型。該模型可通過雙擊單元格 b7 進行檢視,模型的完整值如圖 3 所示。

圖 3

圖 3:
檢視單元格 b7 中的模型

使用上述的 OracleMiningModel 方法,可將該模型應用到 Oracle 資料庫中的資料集。作為一個簡單的互動式評分模型(一般適用於電子表格應用程式),使用者可能希望輸入血壓、高度和體重值,讓資料庫使用剛才定義的模型預測心率。這個在模型物件上定義的 Java API 方法 getPrediction 非常適合這一用途。在單元格 e4、e5、e6 以及 e7 中(以單元格 b8 中籤名陣列指定的順序)鍵入輸入值後,通過輸入以下公式可進行評分:

(*) = b7.getPrediction(b8,new double[]{e4,e5,e6,e7}); 

同樣,該公式將直接訪問 Java API 以獲取並在單元格 e9 中顯示評分結果,如圖 4 所示。

圖 4

圖 4:
將模型應用到輸入值

電子表格優點

電子表格在終端使用者之間的流行多少有些令人費解。一方面,當今最常用的電子表格系統長期以來令許多開發人員氣餒,他們習慣於更為靈活、強大的系統。而另一方面,對於非開發人員而言,使用電子表格系統具有以下一些明顯優點:無須構建圖形化使用者介面、單獨構建和測試每個公式(程式碼)以及隱藏公式,看到的是更為簡單的計算結果。這些優點只存在於當今流行的電子表格中,使用公式可將數字或文字返回到單元格,而許多系統主要受限於此。此處演示瞭如何移除這一限制並建立更為強大的工具。然後用它來直接訪問 Oracle 的資料探勘模型功能以及其他 API。

結論

通過利用更為強大的電子表格,可以顯著縮短向終端使用者引入新技術版本(例如由釋出的 Java API 和 PL/SQL API)的時間。事實上,使用此處的方法,直接將原始 Java API 交給非程式設計人員,以立即整合至決策制定流程或進行預測和分析是切實可行的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-264853/,如需轉載,請註明出處,否則將追究法律責任。

相關文章