微软Sql server analysis service数据挖掘技术
最新在一个项目中要求用到微软SSAS中的数据挖掘功能,虽然以前做项目的时候也经常用到SSAS中的多维数据集 (就是CUBE),但是始终没有对SSAS中的数据挖掘功能进行过了解。所以借着项目需求这股东风最近了解了下SSAS的数据挖掘,这里先写一篇博客做一个简要的归纳。
说到数据挖掘,我们首先需要知道SSAS数据挖掘能干什么,为什么需要进行数据挖掘。我们先来看一个例子假设我们数据库中现在有一张表叫CustomersBoughtCarsSurvey,这张表记录了公司客户购买车辆的信息。
CREATE TABLE [dbo].[CustomersBoughtCarsSurvey](
[CustomerID] [int] IDENTITY(1,1) NOT NULL,--主键ID为自增int类型
[Name] [nvarchar](50) NULL,--客户姓名
[Age] [int] NULL,--客户年龄
[Sex] [char](1) NULL,--客户性别
[Nation] [nvarchar](50) NULL,--客户所在国家
[City] [nvarchar](50) NULL,--客户所在城市
[YearlySalary] [float] NULL,--客户年收入
[BoughtCar] [bit] NULL,--客户是否购买了汽车
CONSTRAINT [PK_CustomersBoughtCarsSurvey] PRIMARY KEY CLUSTERED
(
[CustomerID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
现在这张表里面假如有10000行记录,其中这10000记录中[CustomerID],[Name],[Age],[Sex],[Nation],[City],[YearlySalary]这几列都是有值的,唯独列[BoughtCar]只有4000行数据有记录其余6000行都是null值,原因是在表CustomersBoughtCarsSurvey里面有4000个客户做过了市场调查,所以知道了他们是否购买了汽车,所以这4000个客户在列[BoughtCar]上是有值的,但是有6000个客户还没有做市场调查,所以有6000行数据的[BoughtCar]列都是null。现在我们要做的事情就是通过一个算法来预测这6000个客户中哪些人在未来是有可能买车的?买车的几率有多大?
那么围绕上面这个问题,我们来观察表CustomersBoughtCarsSurvey的结构,我们可以发现其实客户是否购买汽车可能取决于[Age],[Sex],[Nation],[City],[YearlySalary]这几列的值,比如年龄很小的人不大可能会买车,男性买车的可能性比女性更大(只是举个例子没有其它意思。。。),年收入高的人可能比年收入低的人更有可能买车等。那么简单来说就是我们现在需要找到一个算法,根据表CustomersBoughtCarsSurvey中每一行[Age],[Sex],[Nation],[City],[YearlySalary]这几列的值来推断列[BoughtCar]的值是1还是0,如果是1出现的概率是高还是低?如果推断出来的某个结果是1而且概率大于80%那么该客户买车的可能性就是极高的,对于公司来说应该重点关注该客户。
所以现在我们的问题就变成了我们需要一个函数逻辑,根据列[Age],[Sex],[Nation],[City],[YearlySalary]的值来推断出列[BoughtCar]的结果,用一个数学公式来表达就是
[BoughtCar]=Function([Age],[Sex],[Nation],[City],[YearlySalary])
而在SSAS中的数据挖掘模型就能够将上面这个公式付诸于实现,上面公式中的Function就是一个函数逻辑,这函数逻辑在SSAS中就是数据挖掘的九大模型算法:
- Microsoft 决策树分析算法
- Microsoft 聚类分析算法
- Microsoft Naive Bayes 算法
- Microsoft 时序算法
- Microsoft 关联规则分析算法
- Microsoft 顺序分析和聚类分析算法
- Microsoft 神经网络分析算法
- Microsoft 线性回归分析算法
- Microsoft 逻辑回归分析算法
这九大模型有位博主做了详细的介绍,我也正在学习之中,这里推荐下:大数据时代:深入浅出微软数据挖掘算法系列。
选定了上面九大模型的某一个挖掘模型,那么下一步要做的就是对挖掘模型进行数据训练,来提高挖掘模型对数据预测的准确性,通俗来说数据训练就是让上面公式中Function函数的逻辑更佳正确,能够更精准的得出公式等号左边[BoughtCar]的值。在本文的例子中我们前面说过表CustomersBoughtCarsSurvey中有4000行数据的列[BoughtCar]是有值的,这4000行数据就是参加做过市场调研的客户,我们要通过这4000行数据来做数据训练,提高数据挖掘模型算法的精度,然后来预测剩下6000行数据中列[BoughtCar]的值。
数据训练的过程大致是这样的,将训练数据分为两部分,第一部分的数据拿出来寻找规律得出一个算法,然后根据这个算法去计算另一部分数据的值,然后和真实值进行比较,得出算法的准确性如何。在我们的例子中就是将表CustomersBoughtCarsSurvey中4000行[BoughtCar]有值的数据拿出来做数据训练,将4000行中30%的数据作为第一部分数据拿来做逻辑分析得出算法,然后将得出的算法去计算4000行数据中剩下70%数据的[BoughtCar]的值,然后和真实值进行比较,得出准确率,如果准确率可以接受我们的挖掘模型就构造完成了,我们可以将表CustomersBoughtCarsSurvey中那6000行[BoughtCar]没有值的数据通过挖掘模型去得出[BoughtCar]的值。如果准确率太低无法接受,那说明4000行数据去做数据训练还是不够,需要公司市场调研部去调研更多客户准备更多[BoughtCar]列有值的数据去做数据训练,或者从九大模型中选择其它的挖掘模型看预测的准确率是否能够提高。这个过程可以用下面这张图来表示。
了解了数据训练的概念之后,我们来看看怎么在SSAS中怎么建立数据挖掘结构和挖掘模型,在SSAS中数据挖掘结构是挖掘模型的容器,挖掘结构定义了挖掘模型要用到哪些数据列,一个挖掘结构可以包含多个挖掘模型。下图演示了如何在SSAS中建立挖掘结构。
建立挖掘结构的时候可以顺便建立一个挖掘模型,下图中我们在建立挖掘结构的同时建了一个决策树算法的挖掘模型。
然后我们要选择的是挖掘结构要用到哪些表,一个挖掘结构要选择一张事例表(下图中case列),如果一张事例表的列无法满足挖掘结构的需求,还可以选择若干个和事例表相关联的表作为嵌套表(下图中Nested列)。本例中我们就只选择了一张事例表CustomersBoughtCarsSurvey(注意下图选取的表中的数据会用来做数据训练,而前面我们说了我们做数据训练的数据应该是那4000行[BoughtCar]列有值的数据,所以实际上最好的做法是在数据库中新建一个视图筛选出[BoughtCar]列有值的数据行,然后在下图中选择该视图作为事例表,但是本例中我们为了简单起见就直接选用CustomersBoughtCarsSurvey表为挖掘结构的事例表了)。
接着我们要为刚才选择的决策树模型定义输入列和预测列,在挖掘模型中至少要选择一列作为键值列,键值列唯一标示挖掘模型中的一行数据就像数据库表中的主键一样,本例中我们的键值列是CustomerID(下图中Key列)。然后输入列相当于就是我们前面提到公式中函数Function的参数,所以我们选择了[Age],[Sex],[Nation],[City],[YearlySalary]作为输入列(下图中Input列),预测列就是我们上面公式中等号左边的返回值,所以我们选择了列BoughtCar作为预测列(下图中Predictable列)。当然一个列既可以是输入列,也可以是预测列,这样的情况就相当于是一个数据需要传入一个函数进行数据加工后作为返回值,所以这种情况数据既是输入列又是预测列。
然后我们要选择需要用多少数据来做算法分析,就相当于在前面数据训练部分中提到的需要拿一部分数据得出挖掘模型的算法,前面我们提到了在4000行[BoughtCar]列有值的数据中的30%来得出挖掘模型算法,所以下图中我们配置了测试数据比例为30%(30%也是默认值)。
最后我们为定义的挖掘结构和挖掘模型起一个名字,整个定义过就结束了。
建立好挖掘结构后我们可以将其部署到SSAS服务器上,然后查看当前挖掘模型的算法的准确率,下图中我们本例建立的挖掘模型的准确率只有16.67%非常低,一个重要的原因就是我们用于数据训练的数据量太少了。增加数据训练的数据量后这个数字会有明显改善。
最后我们可以在建立的挖掘模型上调用DMX语句做数据预测,下图中我们使用图形化设计器来构造数据预测查询,左边的结构是挖掘模型列,右边的表结构表示的是我们要预测的数据行(相当于是我们本文前面提到的6000行[BoughtCar]列无值的数据行)。中间的连线表示的是挖掘模型的输入列和预测数据结构列的映射关系,通过这个映射关系可以将预测数据的数据列传入挖掘模型的输入列得出预测列的值,我们可以手动编辑这个映射关系。
当然我们也可以不使用设计器自己手动写DMX语句做查询
最后我们可以通过查询得到三行列[Bought Car]值本来为null的数据行,通过挖掘模型计算出来预测值:
友情提醒:如果挖掘结构的基础表中没有数据,数据挖掘在处理的时候会报错
请注意,如果你在SSAS中定义的挖掘结构基础表无数据,比如本例中如果数据库表CustomersBoughtCarsSurvey中有0行数据,那么挖掘结构Customers Bought Cars Survey在处理的时候会报如下错误:
错误 (数据挖掘): “Customers Bought Cars Survey”对象中没有事例。钻取存储区是空的,这可能是因为 ProcessType 枚举设置为 ProcessClearStructureOnly,也可能是因为 DMX DELETE 语句已清除该存储区。
原因就是挖掘结构的基础表CustomersBoughtCarsSurvey中没有数据,目前还没有在SSAS中找到相关设置能够让挖掘结构基础表无数据时处理不报错,这是微软SSAS一个很蛋疼的设定。。。
微软Sql server analysis service数据挖掘技术的更多相关文章
- SQL Server Analysis Services 数据挖掘
假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多 电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的 ...
- SQL Server Analysis Services 数据挖掘(1)
来源: http://technet.microsoft.com/zh-cn/library/dn633476.aspx 假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多 电 ...
- 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(七)
假如你有一个购物类的网站,那么你如何给你的客户来推荐产品呢?这个功能在很多电商类网站都有,那么,通过SQL Server Analysis Services的数据挖掘功能,你也可以轻松的来构建类似的功 ...
- Sql Server Analysis Service 处理时找到重复的属性键、找不到属性键错误(转载)
这是两个非常常见的SSAS处理异常,网上也能找到很多文章讲解决办法,但很少见关于异常原因的分析,先来看看第一个" OLAP 存储引擎中存在错误: 处理时找到重复的属性键",一个维度 ...
- Sql Server Analysis Service 转换为UnknownMember的正确设置 (转载)
转载: http://www.cnblogs.com/OpenCoder/p/4754447.html#commentform 在SSAS中事实表数据被归类到为UnknownMember 的时候分为两 ...
- Sql server analysis service 通过IIS连接时的最大连接数问题
做过SSAS项目的大部分人都应该知道SSAS是可以通过在IIS上建立代理站点的方式来建立远程连接的,这样可以绕过连接到SSAS时需要在同一个域环境下通过域用户来验证的问题,这样即使连接到SSAS的客户 ...
- Sql Server Analysis Service 转换为UnknownMember的正确设置
在SSAS中事实表数据被归类到为UnknownMember 的时候分为两种情况: 第一种情况,在SSAS里面事实表中的外键是null,这种情况SSAS在建事实表和维度时ErrorConfigurati ...
- 基于SQL Server 2008 Service Broker构建企业级消息系统
注:这篇文章是为InfoQ 中文站而写,文章的地址是:http://www.infoq.com/cn/articles/enterprisemessage-sqlserver-servicebroke ...
- [转帖]微软 SQL Server 2008/R2 停止支持
微软 SQL Server 2008/R2 停止支持 微软停止支持 SQLSERVER 2008R2 https://t.cj.sina.com.cn/articles/view/3172142827 ...
随机推荐
- ORA-01000:超出打开游标的最大数(C#)
在做一个windows服务,通过查询文本不断的插入数据的功能.测试一直没有问题,到实际环境中跑起来后程序退出,查看日志发现报的这个错误 ORA-01000:超出打开游标的最大数 经过上网查询发现是由于 ...
- .NET基础加强,找工作之前可以看看这些............
.NET基础知识加强: 1 变量命名规则:骆驼命名法:第一个字母小写之后的首字母大写,[对于方法名和类名首字母大写]→培养良好的命名规范. 2 构造函数:没有返回值,方法名和类名相同,每个类中都有 ...
- E: 软件包*需要重新安装,但是我无法找到相应的安装文件。(ubuntu14.04)
ubuntu安装搜狗输入法官方下载的安装包时,电脑有点卡我给强制关闭了,然后重启打开软件管理中心,直接闪退! 之后不能安装任何软件(包括命令). 显示: E: 软件包Sougou Pinyin需要重新 ...
- 图像分割之(二)Graph Cut(图割)
zouxy09@qq.com http://blog.csdn.net/zouxy09 上一文对主要的分割方法做了一个概述.那下面我们对其中几个比较感兴趣的算法做个学习.下面主要是Graph Cut, ...
- Android界面实现----PagerTabStrip绚丽的滑动标签
在ViewPager这种可以滑动的控件上,总是有很多的文章可以做.Android自带的控件,实现一个指示器,这个控件,就是support-v4包里面的PagerTabStrip控件. 首先,我们先看一 ...
- C# 键盘钩子类
键盘钩子类代码如下 class globalKeyboardHook { #region Constant, Structure and Delegate Definitions /// <su ...
- Shell cmd set note
查看启动信息 dmesg [ 0.000000] Initializing cgroup subsys cpuset[ 0.000000] Initializing cgroup subsys cpu ...
- 给三个int,判断是否可构成三角形算法
哎,今天跟同事讨论算法,有一个女生给我出了这样一个题目,bool Test(int a,int b,int c)感觉很简单,实际呢?自己考虑的不够全面.在得到了提示之后呢,也还是找不到很好的解决方案. ...
- [转]MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
本篇文章是对MySQL数据库引擎介绍.区别.创建和性能测试进行了详细的分析介绍,需要的朋友参考下 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...
- centos python nginx uwsgi
先更新系统,并安装编译环境等等. yum update yum install python python-devel libxml2 libxml2-devel python-setuptools ...