来源: http://technet.microsoft.com/zh-cn/library/dn633476.aspx

假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多

电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的功能。

将分为三个部分来演示如何实现这个功能。

  1. 构建挖掘模型
  2. 为挖掘模型编写服务接口
  3. 开发简单的前端应用

此篇介绍如何使用SQL Server Analysis Services基于此问题来构建简单的挖掘模型。

关于数据挖掘,简单的就是说从海量数据中发现信息的一个过程。如果说商业智能分为三个层次:告诉你发生了什么,为什么会发生,将来会发生什么。那么,数据挖掘绝对算是商业智能中最高的一个层次,告诉你将来会发生什么,也就是预测。而预测的基础就是根据海量的历史数据,结合一定的算法,以概率为基础,告诉你一条新数据某条属性的趋势。

数据挖掘的模型很多,贝叶斯,时间序列,关联规则等都是常用的模型,根据不同的问题特征可以套用不同的模型算法。比如此篇提到的商品推荐,就是典型的适合用关联规则来解决。在数据挖掘中典型的啤酒和尿布的问题,大体上就是基于这个方法。

创建挖掘模型项目

笔者注:如果你是一个c#或者相关的应用程序开发人员,以下的内容看起来可能会有些陌生,笔者建议此部分跟着文章中介绍的步骤来做就可以,相关细节我会尽量以开发人员的角度去解释。后面有适合开发人员逻辑的一些介绍可以帮助你更好的理解数据挖掘项目。

打开SQL Server Data Tools,点击File->New->Project

选择项目类型:

Analysis Services Multidimensional and Data Mining Models

为项目添加数据源。

如图,在Solution Explorer中,右键单击Data Sources,选择New Data Source:

这里用到的数据源是微软官方示例库Adventure Works DW 2012,是Data Warehouse的示例库。

关于如何获取并且部署这些示例库,可以参考此篇下面的文章列表。

然后,添加数据源视图,在Solution Explorer中右键Data Source Views,选择New Data Source View。

在Relational data source中,选择刚才建立的数据源名称:

点击下一步。

这个界面中选择用到的表。根据微软官方教程以及示例数据,只选择vAssocSeqLineItems和vAssocSeqOrders两个视图就可以。

如果要用关联规则来解决问题,那么你的数据就要符合一定的结构。而具体的结构要求就可以参考这两个视图。

vAssocSeqOrders是订单主表,里面记录了基本的订单信息,一条订单一行记录。

vAssocSeqLineItems是订单相信信息表,里面记录了每条订单里都包含了哪些商品。

两张表逻辑上通过OrderNumber关联,我们关注的字段是Model,这里面记录了商品名称。

选择好用到的表之后,可以直接点击完成结束数据源视图的设置。

这两个视图是没有逻辑关系的,但这里需要指定一下。

方法就是在数据源视图里,拖拽vAssocSeqLineItems里的OrderNumber字段到vAssocSeqOrders的OrderNumber字段。完成后可以看到一个从vAssocSeqLineItems视图指向vAssocSeqOrders的箭头。

到这里数据源视图设置完毕。

下面建立基于关联规则的挖掘模型。在Solution Explorer中,右键单击Mining Structures,选择New Mining Structure。

第一个界面,使用已经存在的关系数据库或者数据仓库,所以直接下一步。

然后在这个界面中指定挖掘结构要采用的挖掘模型。点击下拉框,选择Microsoft Association Rules,也就是关联规则。点下一步。

这里指定数据源视图,默认选择刚才建立的就可以,直接点击下一步。

这一步比较关键,理解起来也比较绕。这里主要是要指定事例表和嵌套表。在这里,记录订单基本信息的是事例表,而记录订单里有哪些产品的表为嵌套表。

在这个模型当中,我们要清楚的是,我们的事例单位,是一条条订单,而不是订单里的一个个产品。如果每次在建立模型的过程中无法区分哪个应该是事例表哪个应该是嵌套表的话,那么可以回头来先想下这个问题。

指定完毕事例表和嵌套表,点击下一步。

这里指定在分析模型中如何使用这些列。首先指定键列为OrderNumber和Model,然后再把Model列指定为输入列和可预测列。因为这里就是要根据已经选择的商品来预测客户将会购买什么商品。

按如图所示的方法指定完毕后,点击下一步。

选择列的类型,这里根据系统自动判断的类型选择就可以,直接点击下一步。

然后这个界面中主要是用来指定测试数据集的多少。默认是30%,也就是在数据中,保留30%的数据来验证建立好的挖掘模型的正确性。此篇不对其做过详细的介绍,所以先设置成0,然后直接点击Finish完成模型设置向导。

可以看到建立好的挖掘结构。

模型建立好了之后,需要将其部署到一个分析服务的实例上去,然后将其处理。

这里直接右键点击Solution Explorer根目录的项目名称,然后右键菜单中选择Process。

系统会提示服务器内容已过期,VS的判断是只要你的Source Code比目标服务器的版本新,那么都会报这个out of date错误,即使目标服务器上根本没有这个库。所以这里选择Yes。

第一次 部署可能会弹出这个提示框让你指定可以方位数据源链接的账户,这里通常直接敲本地管理员的账户就 ok。

出现这个界面,直接点击Run处理挖掘模型。

然后系统会自动去做很多工作,这里的细节你可以不去关心。(当然在其不报Error的情况下)

处理完成之后,挖掘模型就建立好了。后续的实现商品推荐的功能,就是基于此模型来实现的。

这里再介绍一个概念,叫DMX,也许你从没听说过,但你一定知道SQL,简单的来说SQL就是用来查表得,那么DMX就是用来查数据挖掘模型的。

它跟SQL一样,也是SELECT FROM的结构。具体的语法信息大家有兴趣的可以去参考微软的SQL Server联机数据库。在此篇中,下面会给出一个简单的DMX查询,大家只要基本知道它是干什么的就可以了。

DAX示例查询:

SELECT FLATTENED

PredictAssociation([Association].[v Assoc Seq Line Items],INCLUDE_STATISTICS,3)

FROM

[Association]

NATURAL PREDICTION JOIN

(SELECT (SELECT 'Touring Tire' AS [Model]

) AS [v Assoc Seq Line Items]) AS t


这个语句的大体意思就是,购买了产品Touring Tire的用户当中,根据历史信息,还有可能会购买哪些产品。

那么我们来看查询结果:

Model SUPPORT PROBABILITY ADJUSTEDPROBABILITY
Touring Tire Tube 1397 0.860385925 0.783460119
Sport-100 6171 0.267877412 0.489939538
Patch kit 3010 0.244040863 0.567612365

然后我们来简单解释下相关列的信息:

SUPPORT-支持度,所处行的项支持度,这里跟传统的支持度有些不同,这里,比如第一行,指的是有多少个订单中包含了产品Touring Tire Tube。

在数据仓库中,我们可以用SQL语句来验证下这个结果

SELECT COUNT(1)

FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems]

WHERE [Model]='Touring Tire Tube'


返回的结果就是1397。

PROBABILITY-概率

购买Touring Tire的订单中又包含Touring Tire Tube的个数。再简单点说就是概率中的P(A|B)的问题了。

那么我们还是来验证下第一行的计算结果,同时购买Touring Tire Tube和Touring Tire的订单数量:

SELECT T1.[OrderNumber]

FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems] T1

INNER JOIN

(

SELECT T2.[OrderNumber]

FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems] T2

WHERE T2.[Model]='Touring Tire Tube'

) TZ ON T1.OrderNumber=TZ.OrderNumber

WHERE T1.[Model]='Touring Tire'


我们可以看到查询返回的结果数量是758行。

然后再计算下订单中只包含Touring Tire的数量:

SELECT [OrderNumber]

FROM [AdventureWorksDW2012].[dbo].[vAssocSeqLineItems]

WHERE [Model]='Touring Tire'


返回的记录行数是881行。

用758除以881,得到的数字正好是0.860385925。

这个概率正好反映了这样一个事实,就是购买Touring Tire的客户会有很大的可能性购买Touring Tire Tube,所以当客户购买Touring Tire之后系统自动的向其推荐Touring Tire Tube准没错。

也许你已经看出了那条DMX语句的一些门道,当然,有些关键字你暂时可以不用去关心,必要的时候可以参考微软的文档。那么扩展一下,比如,客户买了指定的两样产品,那么我根据这两样已选的产品应该推荐给客户什么呢?

SELECT FLATTENED

PredictAssociation([Association].[v Assoc Seq Line Items],INCLUDE_STATISTICS,3)

FROM

[Association]

NATURAL PREDICTION JOIN

(SELECT (SELECT 'Touring Tire' AS [Model]

UNION SELECT 'Touring Tire Tube' AS [Model]

) AS [v Assoc Seq Line Items]) AS t


看到熟悉的UNION语句了吧,好吧,相信你不懂DMX的话你也看出这条语句的规律了,这些就够了,后续文章中将会在c#逻辑代码中根据这条基本的语句来动态的来拼DMX语句。

以上数据挖掘模型的建立部分到此完毕,这是通常一个商业智能项目中底层架构的基本部分。

SQL Server Analysis Services 数据挖掘(1)的更多相关文章

  1. 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(七)

    假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的功 ...

  2. SQL Server Analysis Services 数据挖掘

    假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多 电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的 ...

  3. SQL Server Analysis Services SSAS Processing Error Configurations

    转载:https://www.mssqltips.com/sqlservertip/3476/sql-server-analysis-services-ssas-processing-error-co ...

  4. 全半角空格导致的Sql Server Analysis Services处理错误(转载)

    问题描述 某维度表的字符串列同时出现两条记录,A记录以半角空格(英文空格)结束,B记录以全角空格(中文空格)结束,除此之外其他部分均相同.Analysis Service处理的时候抛出“Key not ...

  5. 微软Sql server analysis service数据挖掘技术

    最新在一个项目中要求用到微软SSAS中的数据挖掘功能,虽然以前做项目的时候也经常用到SSAS中的多维数据集 (就是CUBE),但是始终没有对SSAS中的数据挖掘功能进行过了解.所以借着项目需求这股东风 ...

  6. Sql Server Analysis Service 处理时找到重复的属性键、找不到属性键错误(转载)

    这是两个非常常见的SSAS处理异常,网上也能找到很多文章讲解决办法,但很少见关于异常原因的分析,先来看看第一个" OLAP 存储引擎中存在错误: 处理时找到重复的属性键",一个维度 ...

  7. SQL Server Reporting Services本机模式下的权限管理

    SQL Server Reporting Services在安装配置后,缺省只给BUILTIN\Administrators用户组(实际上只有本机的Administrator用户)提供管理权限.所以所 ...

  8. SrsDataConnector The SQL Server Reporting Services account is a local user and is not supported.

    这次使用OS+SQL的镜像还原系统后安装了CRM 2015,主要流程是 安装IIS/AD,SSRS ,CRM2015.自带的SQL中SSRS没有安装完全,需配置一下. 这一切都满顺利的,最后在安装 S ...

  9. 充分利用 SQL Server Reporting Services 图表

    最近在查SSRS的一些文章,看到MSDN在有一篇不错的文章,许多图表设置都有说明,共享给大家.. 其中有说明在SSRS中如果去写条件表达写和报表属性中的“自定义代码”,文章相对比较长,需要大家耐心的查 ...

随机推荐

  1. 乐视手机1S正式发售,乐视商城官网抽风遭网友吐槽

    乐视手机1S正式发售,乐视商城官网抽风遭网友吐槽 10月27日,乐视召开的新品发布会上正式推出千元金属新机乐1s,售价1099元.今天11月3日上午10:00,乐1s在乐视商城.京东商城首发开卖,现货 ...

  2. qut训练题解-2016-9-4个人赛

    题目链接:http://acm.hust.edu.cn/vjudge/contest/131124#overview 贴了链接这里就不上原题的描述了. A: B: 分析:这里用到简单的拓扑排序的算法. ...

  3. Using QEMU for Embedded Systems Development

    http://www.opensourceforu.com/2011/06/qemu-for-embedded-systems-development-part-1/ http://www.opens ...

  4. IAAS云计算产品畅想-公有云主机产品优势

    关于云计算的优势介绍真是太多太多了,但是说实话准确性欠妥. 云计算也是有很多细分的: 公有云.私有云.混合云 IAAS.PAAS.SAAS 园区云.行业云(医疗云.教育云等等) 说起优点来,绝对不能一 ...

  5. 如何更改应用在app store的名称

    如何修改应用在app store 的名称,我修改了plist里面的bundle display name,现在安装后在设备上会显示修改后的名称,可是app store里面还是原来的名称. 何把app ...

  6. CSU1312:榜单(模拟)

    Description ZZY很喜欢流行音乐,每周都要跟踪世界各地各种榜单,例如Oricon和Billboard,现在给出每周各个单曲的销量请给出每周的TOP5以及TOP5中各个单曲的浮动情况. 量的 ...

  7. 开源 免费 java CMS - FreeCMS2.1 会员站内信

    项目地址:http://www.freeteam.cn/ 站内信 1.1.1 写信 从左側管理菜单点击写信进入. 输入收信人.标题.内容后点击发送button. 1.1.2 收件箱 从左側管理菜单点击 ...

  8. unity3D与网页的交互

    由于项目需要,要求用unity来展示三维场景,并在三维中能够方便的查询数据库等.一开始尝试在unity中直接连接数据库,当时连的xml,然而每次发布成网页后都会出现路径找不到等问题,所以迫不得已采用了 ...

  9. iOS 使用Charts框架 折线,柱状,K线,饼状,雷达全攻略

    我是前言: 大约几个月前我在某平台写了一篇文章, 文中简单地介绍了Charts两种图表的样式的使用, 不过有种意犹未尽的感觉, 利用周末的空闲时间再次看了看, 有了新的收获, 今天发出来,分享给大家, ...

  10. java获取计算机硬件参数

    public class HardWareUtils { /**   *   * 获取主板序列号   *   *   *   * @return   */ public static String g ...