當前位置:編程學習大全網 - 編程語言 - 使用Oracle數據挖掘API方法詳解

使用Oracle數據挖掘API方法詳解

 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 中使用向導

 圖 顯示了本文示例的電子表格界面

 

 圖 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 提供了壹個要用作設置鍵的常量列表 以及命名為常量或數字間隔的值

 表 algo_name(算法名)設置鍵的值

 

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

 作為 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 infoAdaptiveBayesNeork()

 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 );

 輸入到電子表格的單元格 b 中進行實例化 Tilde 符號 (~) 表示縮寫符號 允許 J Cells 將(右側)語句轉換為構造函數t new cell OracleDataSource( agust agust dbVaio vaioFS ); 使系統能夠以用戶 agust 的身份訪問服務器 vaioFS 上的數據庫 dbVaio

 現在 可通過在 DataSource 對象上調用正確的方法(例如在單元格 b 和 b 中分別輸入以下公式) 獲得數據庫連接以及檢查數據庫中的源數據

 (*) = b getConnection();

 (*) = b query( select * from pulse_clinical );

 第壹個語句將向單元格 b 中返回壹個 java sql Connection 對象 第二個語句將向單元格 b 中返回壹個 java sql ResultSet 對象 只需通過雙擊單元格 (b ) 就可檢查結果集 該操作會將結果表顯示在表格框架中以便查看

 迄今為止 我只在該電子表格中創建了幾個簡單的數據對象 現在 可以調用數據挖掘 API 來定義壹個設置對象 然後創建壹個簡單的數據挖掘模型 首先 通過在單元格 b 中輸入以下語句來創建壹個設置對象

  (*) = new cell odm OracleModelSettings( xyz_settings b

 new String[]{

  algo_name > algo_support_vector_machines

  svms_kernel_function > svms_linear } );

?  立刻我發現該公式中的問題是最終用戶友好的 因此 註冊壹個帶有 J Cells 的向導 在提示用戶後自動生成該公式 可能是個不錯的辦法 壹般 電子表格在用戶創建復雜公式時都會給予幫助 因此用戶可以期望在實例化對象時獲得指導

 部署的向導如圖 所示

 

 圖 典型的向導界面

 同樣 數據挖掘模型通過使用向導或輸入公式來創建 在這兩種情況中 結果模型都是在直接指定 API 調用的單元格 b 中進行實例化

  (*)= new cell odm OracleMiningModel( xyz_model b

 new String[]{

  data_table_name > pulse_clinical

  mining_function > regression

  target_column_name > pulse

  case_id_column_name > subject }

 false );

 使用該公式結果實例化數據挖掘模型將在 Oracle 數據庫中生成標準的 Oracle 數據挖掘模型 該模型可通過雙擊單元格 b 進行查看 模型的完整值如圖 所示

 

 圖 查看單元格 b 中的模型

 使用上述的 OracleMiningModel 方法 可將該模型應用到 Oracle 數據庫中的數據集 作為壹個簡單的交互式評分模型(壹般適用於電子表格應用程序) 用戶可能希望輸入血壓 高度和體重值 讓數據庫使用剛才定義的模型預測心率 這個在模型對象上定義的 Java API 方法 getPrediction 非常適合這壹用途 在單元格 e e e 以及 e 中(以單元格 b 中簽名數組指定的順序)鍵入輸入值後 通過輸入以下公式可進行評分

 (*) = b getPrediction(b new double[]{e e e e });

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

 

 圖 將模型應用到輸入值

  電子表格優點

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

  結論

lishixinzhi/Article/program/Oracle/201311/17437

  • 上一篇:編程類人猿
  • 下一篇:對於使用ADO.NET通用接口創建對象
  • copyright 2024編程學習大全網