假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的功能。
前几篇中,简要的介绍如何建立挖掘模型并且编写程序用简单的DMX查询挖掘模型从而实现预测,然后简要介绍如何在Excel中独立地进行预测分析。此篇讲简单介绍如何通过DMX语句创建挖掘结构和挖掘模型,并且训练模型,然后进行预测查询。
在分析服务中涉及到很多门查询语言,首先,SQL语言是我们最熟悉不过的了。在分析服务中,可以通过 SQL来为多维数据集建立分区,或者在数据挖掘中指定训练数据或者预测数据。其次,MDX,可以用它来查询多维数据集。然后就是本文所介绍的DMX,它主要面向分析服务中的数据挖掘部分,通过它可以建立挖掘结构和挖掘模型,以及训练数据和做预测查询。
在微软的文档及示例还有很多图书著作中,通过DMX的方式通常被分为三个步骤:
- 建立挖掘结构
- 建立挖掘模型
- 训练数据
- 预测查询
在现有的一个分析服务数据库进行如上操作之前,还需要手动创建分析服务数据库并且手动建立数据源连接,在SQL中我们知道是由CREATE DATABASE的,但是在分析服务实例下不可以(只能通过XMLA),所以这里需要手动创建。具体方法:
首先,打开SQL Server Management Studio。连接到分析服务。
右键单击Databases节点选择New Database。
给数据库起名DMTest,身份模拟选择指定用户名和密码。这里为了示例能够顺利运行,建议输入登录机器的管理员密码。当然实际生产环境不建议这么做,需要根据具体的权限分配在这里给定指定的用户。
数据库建立完毕,可以在对象浏览器里看到刚刚建立的数据库。
接下来打开SQL Data Tools,点击File->Open->Analysis Services Database…
这个功能可以打开一个正在运行的分析服务数据库。
服务器输入本地localhost或者一个"点",数据库选择刚才在分析服务实例下建立的SSAS数据库DMTest。
点击OK后可以看到分析服务数据库的结构被加载到项目中。这里需要留意的一点是,不同于离线打开,这种方法是在线打开,在这里做的任何修改保存后,都是直接同步到服务器上。
以下步骤跟第一步差不多,这里简单略过。
创建数据源连接。
指定模拟信息。
为数据源起名:DSAW。
可以在解决方案浏览器下看到新建立的数据源连接。
以上SSAS数据库的数据源连接家里完毕。需要注意的是,跟往常不同,这里只需要创建数据源连接就可以了,不需要创建数据源视图。
关闭SQL Data Tools,回到Management Studio中。选择工具栏中的DMX图标,新建一个DMX查询。
可以发现DMX的查询界面跟MDX的比较像。
接下来,输入下面的语句。这条语句用来创建挖掘结构。
CREATE MINING STRUCTURE [Market Basket] (
OrderNumber TEXT KEY,
[Products] TABLE (
[Model] TEXT KEY
)
)
运行完毕后可以看到新建立好的挖掘结构。
然后,为挖掘结构添加挖掘模型。每个模型都需要指定挖掘算法,比如对于商品推荐问题,选用的是关联规则。在创建挖掘模型的同时,还需要用PREDICT指定需要预测的元素。
ALTER MINING STRUCTURE [Market Basket]
ADD MINING MODEL [Default Association]
(
OrderNumber,
[Products] PREDICT (
[Model]
)
)
Using Microsoft_Association_Rules
留意Using后面的部分,这里指定了模型是关联规则模型。
运行完毕后可以在挖掘结构下的挖掘模型。
挖掘模型是位于挖掘结构之下的,同一个挖掘结构可以拥有不同的挖掘模型,拥有多个挖掘模型的好处在于,对于同一个问题,可以应用不同的挖掘模型然后评估哪一个挖掘模型的预测最准确。
接下来需要做的就是训练模型,用到的是INSERT语句。由于订单和订单商品是个嵌套关系,所以留意下面语句的SHAPE和APPEND,以及语句中的RELATE将事例表和嵌套表关联到一起:
INSERT INTO MINING STRUCTURE [Market Basket]
(
[OrderNumber],[Products] (SKIP, [Model])
)
SHAPE {
OPENQUERY([DSAW],'SELECT OrderNumber
FROM vAssocSeqOrders ORDER BY OrderNumber')}
APPEND
(
{OPENQUERY([DSAW],'SELECT OrderNumber, Model FROM
dbo.vAssocSeqLineItems ORDER BY OrderNumber, Model')
}
RELATE OrderNumber to OrderNumber
) AS [Products]
点击运行后系统会根据指定的训练数据处理挖掘结构,处理时间的长短通常由样本数据的大小,以及算法参数决定。
训练完毕后,可以右键点击挖掘结构浏览一下刚才建立的挖掘模型。
在Rules标签下,可以看到系统生成了多少条规则。
Itemsets下可以查看数据项集。
以及依赖关系网络,这个是一个很直观的工具,项之间的关联可以很直观的看出,并且可以通过左面的滑块查看项之间的关联程度。
以上,数据挖掘结构就建立好了,可以看到建立的结构跟第一篇中介绍的通过工具向导的方式是一样的。也就是说,在不通过图形界面的操作之下,也可以像在数据引擎中创建各种对象。
至此,熟悉SQL语句的朋友看DMX可能感觉再亲切不过了,DMX中除了加了几个关键字以及跟算法模型相关的参数外,基本结构似乎都似曾相识。
本篇中用到的示例DMX查询全部来自于微软的教程,关于DMX更详细的信息,大家可以参考教程地址:
http://technet.microsoft.com/zh-cn/library/bb895168(v=sql.100).aspx
关于文中提及到的DMX语句的更多详细信息,大家都可以去参考上面这个地址。
这个DMX教程中包括了自行车购买者,购物篮以及时序预测,虽然没有覆盖全部挖掘算法,但是足以为大家提供参考了。
关于如何把数据挖掘应用到项目中,请参考本系列的第二篇和第三篇。
关于数据挖掘算法的参考,可以参考这个地址:
http://technet.microsoft.com/zh-cn/library/ms175595(v=sql.100).aspx
关于DMX的参考:
http://technet.microsoft.com/zh-cn/library/ms132058(v=sql.100).aspx
以下附加几条测试查询。
测试查询一:
SELECT FLATTENED
PredictAssociation([Default Association].[Products],INCLUDE_STATISTICS,3)
FROM
[Default Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Touring Tire' AS [Model]
) AS [v Assoc Seq Line Items]) AS t
结果:
测试查询二:
SELECT
PREDICT([Default Association].[Products],INCLUDE_STATISTICS,3)
From
[Default Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Mountain Bottle Cage' AS [Model]
UNION SELECT 'Mountain Tire Tube' AS [Model]
UNION SELECT 'Mountain-200' AS [Model]) AS [Products]) AS t
结果: