SQL Server 2005中数据挖掘算法扩展方法(下)

日期: 2009-04-12 作者:yin.pu 来源:TechTarget中国 英文

  接下来要实现的是AlgorithmNavigator类,这个类要继承于 AlgorithmNavigationBase。这个类主要用于显示算法处理结果中所有结点的信息。在这个类中有三个成员变量:Algorithm类型 的algorithm、bool类型的forDMDimension和int类型的currentNode。下面是这个类要实现的方法:


方法名(构造方法):AlgorithmNavigator
参考实现:
Codethis.algorithm = currentAlgorithm; this.forDMDimension = dmDimension; this.currentNode = 0;
方法名实现备注MoveToNextTreereturn false;GetCurrentNodeIdreturn currentNode;ValidateNodeIdreturn (nodeId == 0);LocateNodeif (!ValidateNodeId(nodeId)) 
return false; 
currentNode = nodeId; 
return true;GetNodeIdFromUniqueNameint nNode = Convert.ToInt32(nodeUniqueName); 
return nNode;GetUniqueNameFromNodeIdreturn nodeId.ToString(“D3”);按三位数字的格式输出结点编号GetParentCountreturn 0;GetParentNodeIdreturn 0;GetChildrenCountreturn 0GetChildNodeIdreturn -1;GetNodeTypereturn NodeType.Model;GetNodeUniqueNamereturn GetUniqueNameFromNodeId(currentNode);GetNodeAttributesreturn null;
方法名:
//此方法返回了描述结点的数值特征
GetDoubleNodeProperty 
参考实现: 
Codedouble dRet = 0; double dTotalSupport = lgorithm.MarginalStats.GetTotalCasesCount(); double dNodeSupport = 0.0; dNodeSupport = dTotalSupport; switch (property) { //结点的支持度 case NodeProperty.Support: dRet = dNodeSupport; break; case NodeProperty.Score: dRet = 0; break; //结点概率 case NodeProperty.Probability: dRet = dNodeSupport / dTotalSupport; break; //结点的边缘概率 case NodeProperty.MarginalProbability: dRet = dNodeSupport / dTotalSupport; break; } return dRet; 
方法名:
//取得结点的字符串表示
GetStringNodeProperty 
参考实现:     
Codestring strRet = “”; switch (property) { case NodeProperty.Caption: { strRet = algorithm.Model.FindNodeCaption(GetNodeUniqueName()); if (strRet.Length == 0) {strRet = “All”; }}break; case NodeProperty.ConditionXml: strRet = “”; break; case NodeProperty.Description: strRet = “All Cases”; break; case NodeProperty.ModelColumnName: strRet = “”; break; case NodeProperty.RuleXml: strRet = “”; break; case NodeProperty.ShortCaption:     strRet = “All”; break; } return strRet; 
方法名:
//取得结点的分布
GetNodeDistribution
参考实现: 
Codeint attStats = (int)algorithm.AttributeSet.GetAttributeCount(); AttributeStatistics[] marginalStats = new AttributeStatistics[attStats]; for (uint nIndex = 0; nIndex < attStats; nIndex++) { marginalStats[nIndex] = algorithm.MarginalStats.GetAttributeStats(nIndex); } return marginalStats; 

  现在我们已经实现了完所有需要要实现的类,最后要做的就是将算法插件部署到分析服务器。在完成代码后,需要将程序集注册到GAC以便分析服务器 可以从中加载插件。下面的代码就是将DMPluginWrapper加载到GAC的脚本,如果在本文的开头正确地在Visual Studio中设置了后生成(Post-Building)脚本的话可以跳过下面的脚本代码,因为它们是相同的功能:   


//将DMPluginWrapper.dll注册到GAC中 “%ProgramFiles%Microsoft Visual Studio 8SDKv2.0Bingacutil.exe” /u DMPluginWrapper
“%ProgramFiles%Microsoft Visual Studio 8SDKv2.0Bingacutil.exe” /if DMPluginWrapper.dll//将AlgorithmPluging.dll注册到GAC中并通过REGASM将程序集注册到注册表中使其可以用于COM调用 “%WINDIR%Microsoft.NETFrameworkv2.0.50727RegAsm.exe” AlgorithmPlugin.dll 
“%ProgramFiles%Microsoft Visual Studio 8SDKv2.0Bingacutil.exe” /u AlgorithmPlugin 
“%ProgramFiles%Microsoft Visual Studio 8SDKv2.0Bingacutil.exe” /if AlgorithmPlugin.dll 

  注意以上的路径一定要与自己机器的设置匹配。成功运行上面的脚本后算法插件就被注册到计算机之中,但要在分析服务器中使用这个算法还有一项工 作,就是把在分析服务器中注册这个算法。在分析服务器中注册算法有两种方式,一种是通过发送XMLA代码到分析服务器来注册;另一种是通过修改 SQLSERVER的配置文件来注册算法插件。下面先说第一种: 

  通过XMLA方式注册算法插件——


<!–Template for registering a plug-in algorithm
Replace MyPluginAlgorithm with the ServiceName of your algorithm
Replace 00000000-0000-0000-0000-000000000000 with the Guid of your Algorithm
After deploying, you will need to restart the server to load the plug-in
–><ALTER AllowCreate=”true” ObjectExpansion=”ObjectProperties” 
http://schemas.microsoft.com/analysisservices/2003/engine”>
http://schemas.microsoft.com/analysisservices/2003/engine</A>”><OBJECT> <ObjectDefinition> <BR><Server http://www.w3.org/2001/XMLSchema”>http://www.w3.org/2001/XMLSchema</A>”
http://www.w3.org/2001/XMLSchema-instance”>
http://www.w3.org/2001/XMLSchema-instance</A>”>
<Name>.</Name> <ServerProperties> <ServerProperty> 
<!– 用自己的算法名称替换 –>
<Name>MyFirstAlgorithmPlugin</Name> <!– 是否启用算法 –> 
<Value>true</Value> </ServerProperty> <ServerProperty> <!– 用自己的算法名称替换 –> <BR><Name>MyFirstAlgorithmPlugin</Name> 
<!–算法的GUID(在算法类中指定的GUID) –><Value>00000000-0000-0000-0000-000000000000</Value>
</ServerProperty> </ServerProperties></Server> </ObjectDefinition> </Alter>

  通过修改SQLSERVER的配置文件注册算法——

  找到SQLSERVER安装目录下的MSSQL.2OLAPConfigmsmdsrv.ini文件。这个是一个XML格式的文档。文档内容类似于下面的代码:


<ConfigurationSettings><DataMining> <Algorithms> <!– 结点中的字符串应该是算法名称 –> <AlgorithmPlugin> <!– 是否启用算法 –> <Enabled>1</Enabled> <!–算法的GUID (在算法类中指定的GUID)–> <CLSID>00000000-0000-0000-0000-000000000000</CLSID> </AlgorithmPlugin> 

  在以上的配置信息中算法名称是来自于Metadata类的GetServiceName这个方法,即在配置中设置的算法名称要与这个方法的返回值相同。到这里一个基本的算法插件程序就完成了,重启分析服务器后就可以在建立挖掘模型的窗口中看到新的算法出现在算法下拉列表中了。

  从建立算法插件的整个过程来看,除开前后的准备工作和部署主要就是对三个类的重写,而其中最主要的类就是算法类的重写,其它两个类的主要作用是为算法提供元数据信息及结果的描述。在算法类中要实现挖掘模型的样本训练以及预测,这是算法最关键的地方,重写算法类中的ProcessCase方法和Predict方法是算法插件的核心。在了解如何扩展算法后要做的工作就是设计新的算法或将已经完成的算法集成到插件中。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

yin.pu
yin.pu

相关推荐