程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2005 Analysis Services數據挖掘算法擴展方法

SQL Server 2005 Analysis Services數據挖掘算法擴展方法

編輯:關於SqlServer

本文是對英文原文SQL Server Data Mining Managed Plug-In Algorithms Tutorial的部分翻譯及整理,主要是描述SSAS數據挖掘算法的基本擴展方法和開發過程。本文的內容只是原文的一部分,如果想了解更多信息可以下載原文。英文原文在本文附件中下載。

SSAS為我們提供了九種數據挖掘算法,但是在應用中我們需要根據實際問題設計適當的算法,這個時候就需要擴展SSAS,使它能應用更多的算法,SSAS有比較好的可擴展性,它提供了一個完整的機制來進行擴展,只要繼承一些類並按適當的方法進行注冊就可以在SSAS中使用自己的算法了。下面我將通過實例分別用幾篇文章來介紹一下如何開發SSAS算法插件。本文介紹的算法插件開發方法是基於托管代碼的,是用C#開發的(算法插件也可以用C++開發,並且SQLSERVER2005的案例中附帶C++版本的代碼stub)。整個過程大至為六個步驟。在開始開發之前需要做一些准備工作,就是要去下載一個用C++編寫的COM組件,叫DMPluginWrapper(可以通過下載本文附帶的附件獲得),它作為SSAS與算法插件的中間層,用於處理SSAS與算法插件之間的交互以及封裝從SSAS到算法插件的參數和從算法插件到SSAS的處理結果。DMPluginWrapper、SSAS和算法插件之間的關系可以由下圖來描述。

圖表 1: DMPluginWrapper、SSAS和算法插件之間的關系

下面開始創建算法擴展的項目。

首先新建一個類庫項目(名為AlgorithmPlugin)將剛才的DMPluginWrapper項目引用到新建的這個AlgorithmPlugin類庫項目中。你可以選擇為這個類庫項目進行程序集簽名,這樣就可以將其注冊到GAC中。另外還要為DMPluginWrapper添加後生成腳本將程序集注冊到GAC,參考腳本如下(根據機器具體設置而定):

"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe" $(TargetPath)
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u $(TargetName)
"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /if $(TargetPath)

如果第一行腳本不能正確運行的話,算法插件是不能被SQLSERVER分析服務器識別的。另外兩行腳本就是將算法程序集注冊到GAC。

接下來的幾個步驟主要是繼承一些基類的工作,包括AlgorithmMetadataBase類、AlgorithmBase類和ICaseProcessor接口和AlgorithmNavigationBase類。首先在AlgorithmPlugin中新建一個類文件並命名為Metadata,為這個類添加ComVisible、MiningAlgorithmClass(typeof(Algorithm))和Guid屬性(Algorithm是下面要創建的算法類),並為Guid屬性指定一個GUID編碼。這個類要繼承於AlgorithmMetadataBase類。現在要做的事情就是覆蓋基類的方法。下面是所有需要覆蓋的方法(對於較簡單的實現寫在表格中):

方法名 實現(參考) 備注 GetServiceName return "MyFirstAlgorithmPlugin" 這個方法的返回值中不能帶有空格字符 GetServiceDescription return "Sample Algorithm Plugin";   GetServiceType PlugInServiceType.ServiceTypeOther;   GetViewerType return string.Empty   GetScaling return MiningScaling.Medium; 用於指定算法適用的規模,這個值不會被服務器使用而是顯示在模式行集中,為用戶提供算法的一些相關信息。 GetTrainingComplexity return MiningTrainingComplexity.Low 用於指定算法訓練適用的復雜度,這個值不會被服務器使用而是顯示在模式行集中,為用戶提供算法的一些相關信息。 GetPredictionComplexity return MiningPredictionComplexity.Low 用於指定預測復雜度,這個值不會被服務器使用而是顯示在模式行集中,為用戶提供算法的一些相關信息。 GetSupportsDMDimensions retrun false;   GetSupportsDrillThrough return false; 指定這個算法是否支持鑽透功能。 GetDrillThroughMustIncludeChildren return false;   GetCaseIdModeled return false;   GetMarginalRequirements return MarginalRequirements.AllStats   GetParametersCollection return null; 算法參數,因為本文中的例子沒有參數,所以這裡返回空。 GetSupInputContentTypes MiningColumnContent[] arInputContentTypes = new MiningColumnContent[]

{

MiningColumnContent.Discrete,

MiningColumnContent.Continuous,

MiningColumnContent.Discretized,

MiningColumnContent.NestedTable,

MiningColumnContent.Key

};



return arInputContentTypes;
指定算法所支持的輸入屬性的數據類型,如連續型、離散型等。 GetSupPredictContentTypes MiningColumnContent[] arPredictContentTypes = new MiningColumnContent[]

{

MiningColumnContent.Discrete,

MiningColumnContent.Continuous,

MiningColumnContent.Discretized,

MiningColumnContent.NestedTable,

MiningColumnContent.Key

};

return arPredictContentTypes;
與上一個方法類似,這裡是指定預測屬性所支持的數據類型。 GetSupportedStandardFunctions SupportedFunction[] arFuncs

= new SupportedFunction[] {

SupportedFunction.PredictSupport,

SupportedFunction.PredictHistogram,

SupportedFunction.PredictProbability,

SupportedFunction.PredictAdjustedProbability,

SupportedFunction.PredictAssociation,

SupportedFunction.PredictStdDev,

SupportedFunction.PredictVariance,

SupportedFunction.RangeMax,

SupportedFunction.RangeMid,

SupportedFunction.RangeMin,

SupportedFunction.DAdjustedProbability,

SupportedFunction.DProbability,

SupportedFunction.DStdDev,

SupportedFunction.DSupport,

SupportedFunction.DVariance,

// content-related functions

SupportedFunction.IsDescendent,

SupportedFunction.PredictNodeId,

SupportedFunction.IsInNode,

SupportedFunction.DNodeId,

};

return arFuncs;
指定DMX所支持的函數。 CreateAlgorithm return new Algorithm(); 返回算法實例,Algorithm是接下來要創建的類。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved