SQL Server 2005中数据挖掘算法扩展方法 |
|||||
本文标签:SQL Server 2005 数据挖掘 算法 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,参考脚本如下(根据机器具体设置而定):
如果第一行脚本不能正确运行的话,算法插件是不能被SQLSERVER分析服务器识别的 。另外两行脚本就是将算法程序集注册到GAC 。 接下来的几个步骤主要是继承一些基类的工作,包括AlgorithmMetadataBase类、AlgorithmBase类和 ICaseProcessor接口和AlgorithmNavigationBase类 。首先在AlgorithmPlugin中新建一个类文件并命名为 Metadata,为这个类添加ComVisible、MiningAlgorithmClass(typeof(Algorithm))和Guid属性 (Algorithm是下面要创建的算法类),并为Guid属性指定一个GUID编码 。这个类要继承于AlgorithmMetadataBase类 。现 在要做的事情就是覆盖基类的方法 。下面是所有需要覆盖的方法(对于较简单的实现写在表格中): 方法名实现(参考)备注
用于指定算法适用的规模,这个值不会被服务器使用而是显示在模式行集中,为用户提供算法的一些相关信息 。 GetTrainingComplexity return MiningTrainingComplexity.Low 用于指定算法训练适用的复杂度,这个值不会被服务器使用而是显示在模式行集中,为用户提供算法的一些相关信息 。 GetPredictionComplexity return MiningPredictionComplexity.Low 用于指定预测复杂度,这个值不会被服务器使用而是显示在模式行集中,为用户提供算法的一些相关信息 。
现在创建第二个类,命名为Algorithm.cs 。这个类要继承于AlgorithmBase并实现ICaseProcesses接口,这是实现算法最重要的一个类,主要的算法处理都在这个类中进行 。这个类要有一个成员变量TaskProgressNotification trainingProgress 。这个类包含了算法主要的处理逻辑 。下面是要实现的方法:
方法名:
方法名(构造方法):AlgorithmNavigator
注意以上的路径一定要与自己机器的设置匹配 。成功运行上面的脚本后算法插件就被注册到计算机之中,但要在分析服务器中使用这个算法还有一项工 作,就是把在分析服务器中注册这个算法 。在分析服务器中注册算法有两种方式,一种是通过发送XMLA代码到分析服务器来注册;另一种是通过修改 SQLSERVER的配置文件来注册算法插件 。下面先说第一种: 通过XMLA方式注册算法插件——
通过修改SQLSERVER的配置文件注册算法—— 找到SQLSERVER安装目录下的MSSQL.2\OLAP\Config\msmdsrv.ini文件 。这个是一个XML格式的文档 。文档内容类似于下面的代码:
在以上的配置信息中算法名称是来自于Metadata类的GetServiceName这个方法,即在配置中设置的算法名称要与这个方法的返回值相同 。到这里一个基本的算法插件程序就完成了,重启分析服务器后就可以在建立挖掘模型的窗口中看到新的算法出现在算法下拉列表中了 。 从建立算法插件的整个过程来看,除开前后的准备工作和部署主要就是对三个类的重写,而其中最主要的类就是算法类的重写,其它两个类的主要作用是为算法提供元数据信息及结果的描述 。在算法类中要实现挖掘模型的样本训练以及预测,这是算法最关键的地方,重写算法类中的ProcessCase方法和Predict方法是算法插件的核心 。在了解如何扩展算法后要做的工作就是设计新的算法或将已经完成的算法集成到插件中 。 |