1、3.1 DMX的发展历史3.2 为什么使用DMX3.3 数据挖掘过程3.4 关键概念3.5 DMX对象3.6 DMX查询语法3.7 预测,第三章 数据挖掘概念与DMX,3.1 DMX的发展历史,1999年,DMX首次在微软和其他厂商编写的OLE DB for Data Mining规范中提出。这一个规范的目标是创建一个与厂商无关的、可编程的接口,这种接口所用到的概念是大多数能够利用这种接口的人们所熟悉的。,当时,目标程序员是用VB开发程序的数据库编程人员,而数据接口是ActiveX Data Objects,他是OLE DB的前端程序,标准语言是SQL,开始着手SQL Server Data
2、Mining的OLAP Services团队决定充分利用开发人员所具有的这些知识,将OLE DB用作应用程序编程接口(API),创建尽可能与SQL相近但仍然满足数据瓦解需要的查询语言,因此DMX应运而生。,随着时光的推移,目标开发人员的范围扩大到了使用C#或者VB.NET,所以OLE DB for Data Mining规范的重要性减弱了。保留下来的是灵活的描述语言,他使得讨论、描述和实施数据挖掘解决方案与关系数据库解决方案一样简单,3.2 为什么使用DMX,虽然自20世纪60年代以来一些数据挖掘技术就已经以各种形式存在,但相对来说并不成熟。对于挖掘模型、模型训练和利用模型进行预测,都没有标准
3、的概念。对于许多人来说,数据挖掘仅仅是一组算法,就像以前人们认为数据库只不过是用来存储数据结构的分层数据结构一样。因此,数据挖掘成为一种高端工具,只有懂得此领域专业术语的专家才能用。,市场上有许多数据挖掘产品,每个产品都以自己特有的方式来描述和构建数据挖掘应用程序,大多数数据挖掘工具包都有它们自己的算法、自己的模型模式浏览和存储格式、自己的数据清理工具乃至自己的报表生成工具。这样的方式将数据挖掘系统与企业操作系统隔离开了,从而增加了实现数据挖掘解决方案的难度和成本。,DMX的目的是为数据挖掘定义统一的概念和统一的查询表达方式,类似于在数据库中SQL语言所起的作用。表达式语言很容易让数据库开发人
4、员理解,而不仅仅只是专家才能理解。表达式语言提供了可讨论数据娃据问题的详细语言,与算法或厂家无关。,3.3 数据挖掘过程,数据挖掘或计算机学习的基本前提是展示一些范例的算法,从这些算法中可以提取模式,以后可使用提取的模式进行审查,或推导出新范例的信息。数据挖掘的难度是以某种方式形成这些范例,使得提取的模式是有用的、可提供信息的和准确的。,3.4 关键概念,属性:,描述一个实体的信息。例如性别、年龄、婚姻状况等,1、数据挖掘时,选择的属性应该与问题有关系,且属性提供的信息应该能够用于数据挖掘算法。,2、创建问题最独特的属性是很有用的。从数据表现的属性中可能推导出无数个属性。,3、属性类型:类别属
5、性(离散)和连续属性,4、属性越多,从属性中探索出信息所需要的范例就越多。,3.4 关键概念,状态:,就是类别属性相关联的一组可能值.如:“婚姻状况”属性的状态有“已婚”和“单身”,数据挖掘算法平等对待每个状态,并不理解这些状态之间隐含的任何关系。,如果概念对问题是重要的,则应该包括这些概念。如果概念对问题并不重要,则应该尽可能简化它们。,在SQL Server数据挖掘中,所有的属性多可能是NULL,3.4 关键概念,事例:,由一组属性和这些属性的相关值组成。就是一个实体,一行数据,更复杂的情况是,要分析属性之间的关系,而这些属性可能存在一事例中,也可能不存在于事例中,事例中的属性的数量事先并
6、不知道。例如购物篮分析,3.4 关键概念,键:,事例键:它指出事例表示的实体的标识。(主键),嵌套键:嵌套行的命名实体。,DMX引用两种不同类型的列作为键,在此关系图中,第一个表(父表)包含客户的信息,并且为每位客户关联了一个唯一标识符。第二个表(子表)包含每位客户的采购信息。子表中的采购信息又通过唯一标识符CustomerKey列与父表关联。关系图中的第三个表显示了这两个表的结合。嵌套表作为特殊列显示在事例表中,该列的数据类型为TABLE。对于任何特定事例行,此列均包含从子表中选出的、与父表相关的行。嵌套表中的数据可用于预测和/或输入。例如,一个模型中可能有两个嵌套表列:一个嵌套表列可能包含
7、客户已购买的产品列表,而另一个嵌套表列则包含有关该客户的兴趣爱好的信息,这些信息可能从调查获得。在这种情况下,您可以使用客户的兴趣爱好作为输入,以分析购买行为并预测可能购买的产品。,3.4 关键概念,输入和输出:,DMX中的即可以输入,也可以输出,还可以同时是输入和输出.,就DMX而言,输入和输出都是在模型训练期间提供给算法.在预测时,输入被提供给算法,并返回输出。,在属性即是输入又是输出的情况下,微软的算法所采用的惯例是绝不使用输出属性来预测他们本身。因此算法采取措施确保正确的分离信息。虽然不同的算法采取不同的措施,但都会涉及神经网络中创建了多少网络,多少聚类被计算等。在单一的模型中有多个输
8、出的能力是DMX的创新,它允许创建非常复杂和非常有趣的场景。,选择和定义正确的输入和输出对于成功地完成数据挖掘解决方案是至关重要的。,Web搜索引擎日志挖掘研究框架.pdf,3.5 DMX对象,DMX作为SQL的扩展,并不直接处理属性和事例。DMX是一种语言,他将你拥有的数据(包括行和列的数据表)转换位数据挖掘算法需要的数据(即事例和属性)。有2种主要的对象可用于清楚地表示这种转换:挖掘结构和挖掘模型。,3.5 DMX对象,挖掘结构定义生成挖掘模型时要依据的数据:它指定源数据视图、列的数量和类型以及分为定型集和测试集的可选分区。单个挖掘结构可以支持多个共享同一个域的挖掘模型。下图说明了数据挖掘
9、结构与数据源以及构成数据挖掘模型之间的关系,挖掘结构:,关系图中的挖掘结构基于包含多个表或视图的数据源,它们按 CustomerID 字段进行联接。一个表包含有关客户的信息,例如地理区域、年龄、收入和性别,而相关嵌套表包含每个客户的多行其他相关信息,例如客户已购买的产品。此关系图显示根据一个挖掘结构可以生成多个模型,并且这些模型可以使用该结构中的不同列。,模型 1 使用 CustomerID、收入、年龄和区域,并根据区域筛选数据。模型 2 使用 CustomerID、收入、年龄和区域,并根据年龄筛选数据。模型 3 使用 CustomerID、年龄、性别和嵌套表,不使用筛选器。由于以上模型使用不
10、同的输入列,并且其中两个模型还通过应用筛选器来限制在模型中使用的数据,因此即使这些模型基于相同数据,其结果也将大不相同。请注意,CustomerID 列在所有模型中都是必需的,因为它是可作为事例键使用的唯一可用列。,3.5 DMX对象,3.5 DMX对象,挖掘模型:,挖掘结构是一个容器和描述符,而挖掘模型是一个对象,它将数据行转换为事例,并使用特定的数据挖掘算法进行计算机学习。,挖掘模型被描述为来自结构的列的子集,这种描述还包括如何将这些列用作属性(是输入还是输出,或同时是输入输出),以及对结构数据进行计算机学习所使用的算法和算法参数。而且,挖掘模型也可以只挖掘结构中的一个数据子集 。对结构数
11、据可随意过滤,以便只挖掘适合于某一特定问题的数据。,3.5 DMX对象,挖掘模型:,数据挖掘模型从挖掘结构中获取数据,然后使用数据挖掘算法分析这些数据。挖掘结构和挖掘模型是单独的对象。挖掘结构存储定义数据源的信息。挖掘模型存储通过数据的统计处理而得到的信息,例如发现的模式,即分析结果。 在处理并分析挖掘结构所提供的数据之前,挖掘模型一直为空。在处理挖掘模型之后,该模型将包含元数据、结果和指回到挖掘结构的绑定。,3.5 DMX对象,挖掘模型:,元数据指定模型的名称和存储模型的服务器以及模型的定义,包括生成模型时所使用的挖掘结构中的列的列表、处理模型时应用的可选筛选器的定义以及用于分析数据的算法。
12、列、筛选器和算法的选择会极大地影响分析结果。例如,如果使用相同的数据创建聚类分析模型和决策树模型,两个模型的模型内容可能大不相同,因为这两个模型使用不同的算法和筛选器,模型中存储的结果因算法而异,但可以包括模式、项集、规则和公式。这些结果可用于进行预测。,模型中存储的绑定指回到挖掘结构中缓存的数据。如果已在结构中缓存数据,但在处理后未清除这些数据,则使用这些绑定可以从结果钻取到支持这些结果的事例。但是,实际数据存储在结构缓存中,而不是模型中,3.6 DMX查询语法,DMX是一种与SQL非常相似的命令语言,3.6.1 创建挖掘结构3.6.2 创建挖掘模型3.6.3 填充挖掘结构,3.6.1 创建
13、挖掘结构,CREATE MINING STRUCTURE People1(CustIDLONGKEY,NameTEXTDISCRETE,GenderTEXTDISCRETE,AgeLONGCONTINUOUS,CarMakeTEXTDISCRETE,CarModelTEXTDISCRETE),关键在最后关键词: KEY、Discrete、continuous,我们称之为“内容类型”内容类型告诉数据挖掘引擎如何对待列-列是分类(即离散)还是连续的,3.6.1 创建挖掘结构,DMX支持的数据类型和内容,3.6.1 创建挖掘结构,DISCRETE,该列包含离散值。例如,性别列是一个典型的离散属性列,
14、这是因为该数据表示一个有限的可数数目的性别类别。离散属性列中的值即使是数值类型,也不意味着是有序数据;这些值是明确独立的,且不可能为小数值。电话区号即为数值离散数据的典型示例,CONTINUOUS,该列包含表示一组连续数值数据的值。与表示有限、可数数据的离散列不同,连续列表示度量数据,且数据可能包含无限数目的小数值。收入列即为连续属性列的示例。以下数据类型支持此内容类型:Date、Double和Long,DISCRETIZED,该列包含表示组或存储桶的值,这些值属于从连续列派生的值。存储桶被视为有序的离散值。有关使数据离散化的详细信息,请参阅离散化方法。以下数据类型支持此内容类型:Date、D
15、ouble、Long和Text。,3.6.1 创建挖掘结构,KEY,该列唯一地标识一行。以下数据类型支持此内容类型:Date、Double、Long和Text。,KEY SEQUENCE 该列是一个特定类型的键,其中的值表示一个事件序列。这些值是有序值,并且不必按等差排列。以下数据类型支持此内容类型:Date、Double、Long和Text。KEY TIME 该列是一个特定类型的键,其中的值表示有序并按时间尺度出现的值。以下数据类型支持此内容类型:Date、Double和Long。,3.6.1 创建挖掘结构,ORDERED 该列包含定义有序集的值。不过,有序集并不表示在该集的值之间存在任何差
16、或量级关系。例如,如果有序属性列包含按照等级顺序从一到五排列的有关技术等级的信息,则技术等级之间的差并不包含什么暗示信息;技术等级五不一定比技术等级一好五倍。有序属性列就内容类型而言是离散的。Analysis Services中所有的数据挖掘数据类型都支持此内容类型。CYCLICAL 该列包含表示循环有序集的值。例如,一周内顺序编号的七天便是循环有序集,因为第一天紧跟第七天。循环列就内容类型而言既有序又离散。Analysis Services中所有的数据挖掘数据类型都支持此内容类型。,3.6.1 创建挖掘结构,1、离散列,CREATE MINING STRUCTURE People2(Cust
17、IDLONGKEY,NameTEXT DISCRETE,GenderTEXTDISCRETE,AgeLONG CONTINUOUS,AgeDiscLONGDISCRETIZED(EQUAL_AREAS,3),CarMakeTEXTDISCRETE,CarModelTEXTDISCRETE),在 SQL ServerAnalysis Services 中创建数据挖掘模型时所用的某些算法需要特定的内容类型才能正常运行。例如,Microsoft Naive Bayes 算法的输入不能为连续列,并且不能预测连续值。另外,有些列可能会因包含的值太多而导致算法不易标识数据中据以创建模型的相关模式。在这些情
18、况下,可以将列中的数据离散化,以便能够使用算法来生成挖掘模型。“离散化”是将值放入存储桶中以便得到有限数目的可能状态的过程。存储桶本身是作为有序且离散的值处理的。数值列和字符串列都可以进行离散化。,离散化数据时,可以使用多种方法。如果数据挖掘解决方案使用关系数据,则通过设置DiscretizationBucketCount属性的值可以控制对数据分组所使用的存储桶数。默认存储桶数为 5。 如果数据挖掘解决方案使用联机分析处理 (OLAP) 多维数据集中的数据,数据挖掘算法将使用以下公式自动计算要生成的存储桶数,其中n是列中数据非重复值的数目:Number of Buckets = sqrt(n)
19、 如果不希望由 Analysis Services 计算存储桶数目,则可使用DiscretizationBucketCount属性来手动指定存储桶的数目。下表说明了可在 Analysis Services 中用于离散化数据的方法。,3.6.1 创建挖掘结构,3.6.1 创建挖掘结构,2、嵌套表,嵌套表(由Table数据类型指出)允许实现全新的数据挖掘情形,3.6.1 创建挖掘结构,3、分成测试集和训练集,CREATE MINING STRUCTURE People4(CustIDLONGKEY,NameTEXTDISCRETE,GenderTEXTDISCRETE,AgeLONGCONTINU
20、OUS,CarMakeTEXTDISCRETE,CarModelTEXTDISCRETE) WITH HOLDOUT(30 PERCENT OR 10000 CASES),挖掘结构也允许自动将数据源数据分成测试集和训练集。,可以指定用于测试的数据的百分比,也可以指定事例数,还可以二者同时指定。,例子指出30%的数据或最多10000个事例用于测试,3.6.2 创建挖掘模型,挖掘模型与挖掘结构的不同之处在于,挖掘模型中列被标识为是输入列还是输出列,而且指定了算法以及该算法需要的参数。挖掘模型可以包含挖掘结构的任何列子集,只要被包含的标包含该表的键值即可。也就是说,挖掘模型必须包含挖掘结构的键以及任
21、何嵌套表的键。,向挖掘结构添加模型的最简单方法是默认方法,即指定名称和算法,不指定列,ALTER MINING STRUCTURE People1ADD MINING MODEL PeopleClustersUSING Microsoft_Clustering,3.6.2 创建挖掘模型,大多数情况下需要列列表,因为必须指定哪些列是输出列。,指定某列是输入列还是输出列的选项是PREDICT和PREDICT_ONLY,没有用法标记的任何列都可以被认为输入列。,ALTER MINING STRUCTURE People2ADD MINING MODEL PredictGender-Tree(Cust
22、ID,Gender PREDICT,Age,CarModel) USING Microsoft_Decision_Trees,以下程序展示了决策树模型定义,它根据人的年龄和此人所驾汽车的款式来预测人的性别。,3.6.2 创建挖掘模型,1、嵌套表,ALTER MINING STRUCTURE People3ADD MINING MODEL PredictGenderNested-Trees(CustID,Gender PREDICT,Age,Purchases(Product,Quantity,OnSale),Movie Ratings(Movie,Rating) USING Microsoft
23、_Decision_Trees(COMPLEXITY_PENALTY=0.5),根据某人的年龄、所购商品的数量、这些商品是否为特供商品,以及此人如何评价选购的影碟来预测此人的性别,ALTER MINING STRUCTURE People3ADD MINING MODEL PredictPurchases-Trees(CustID,Gender,Age,Purchases PREDICT(Product) USING Microsoft_Decision_Trees,3.6.2 创建挖掘模型,1、嵌套表,根据客户的性别、年龄和购买的其他商品来预测他购买了什么商品。,3.6.2 创建挖掘模型,1
24、、复杂的嵌套场景,包含一个可预测列的一个嵌套表,这个嵌套表是一个输入,列也是一个输入。该模型根据年龄和性别以及所购其他产品的数量来预测所购产品的数量。,此模型根据年龄、性别以及购物篮中所购的其他商品来预测所购商品的数量,因为表是输入,包含的一个值列也是一个输入所以无值属性是不必要的,因此不生成无值属性,数量是一个输出,但表仍标记为输入,因为没有值列可以将行的存在归于输入,所以为表示这些行的嵌套键创建无值属性,3.6.2 创建挖掘模型,2、复杂的嵌套场景,根据年龄、性别以及所购的其他商品来预测可能购买了哪些商品,根据性别和年龄来预测所购商品的数量,案例中不能预测所购物品的数量,所以必须创建无值属
25、性作为输出,因为用法标记之间没有差别,所以案例中不创建无值属性,3.6.2 创建挖掘模型,3、过滤器,正如模型可以使用结构中列的子集一样,模型也可以通过在添加模型时定义过滤器而使用数据的子集。事例可以使用任意过滤器字句来过滤,此子句可以包含事例级和嵌套级列,也可以过滤嵌套表的内容。,3.6.3 填充挖掘结构,创建数据源,填充数据,3.6.3 填充挖掘结构,DMX使用SHAPE语法的子集来创建分层行集,1、填充嵌套表,3.6.3 填充挖掘结构,1、填充嵌套表,SHAPE在SQL Server数据挖掘中的实现方案要求,所有行集都按照与它们相关联的列来排序。这是为了确保性能和可伸缩性,,使用了SHA
26、PE的后果之一是输入集中的每个嵌套表都包含表示事例表外键的一个列。但是,此列在挖掘结构中不存在。,为适应SHAPE的这一要求,引入关键字SKIP,它指出存在于源数据中而又不用来填充结构的那些列。,3.6.3 填充挖掘结构,2、查询结构中的数据,3.6.3 填充挖掘结构,3、查询模型数据,/ (b) Populate the new modelINSERT INTO ClusterDrillthroughGO/ (c) Get possible gendersSELECT DISTINCT Gender FROM ClusterDrillthroughGO/ (d) Get range of A
27、gesSELECT DISTINCT RangeMin(Age), Age, RangeMax(Age) FROM ClusterDrillthroughGO/ (e) Get the patterns found in the modelSELECT * FROM ClusterDrillthrough.CONTENTGO/ (f) Get cases in cluster 1SELECT * FROM ClusterDrillthrough.CASES WHERE IsInNode(001),3.7 预测,3.7.1、预测连接,INSERT INTO People2 (CustID, Na
28、me, Gender, Age, AgeDisc, CarMake, CarModel)OPENQUERY(Chapter3Data, SELECT Key,Name,Gender, Age,Age,CarMake,CarModel FROM People),3.7 预测,3.7.2 预测查询语法,次语句将模型PredictGender-Bayes应用到指定的查询返回的没一行,并根据Age和CarModel输入,从中返回姓名和最可能的性别值。,3.7 预测,1、嵌套源数据,并不是模型描述的所有输入都需要从源数据提供,预测期间源查询中未提供得任何输入都认为是MISSING,如何对待缺失的数据是由
29、各个算法决定的,3.7 预测,2、实时预测,应用程序使用模型根据内存数据(例如用户输入)执行的动态预测,DMX针对实时预测使用一种特殊形式的预测查询,称为单例查询。单例查询将源数据直接包含在查询文本中,3.7 预测,3、退化预测,即使没有源数据,仍然可以对模型进行预测。执行没有源数据的预测与执行只有一行数据但所有输入或缺失的预测在语义上是等价的,但每种算法可以自由地返回各自的结果。一般来说,算法将返回对所有人而言最可能的值,3.7 预测,3.7.3 预测函数,DMX提供了支持预测场景的各种函数,基本函数Predict是多态的,其行为取决于提供的是标量(事例级)还是表列引用。在很多情况下,如果只
30、想预测事例 级列的值 ,则根本就不需要使用Predict。选择可预测列的行为与预测该列是一样的。也就是说,只要Gender是一个可预测列,则Select Gender与Select Predict(Gender)是等价的,PredictHistogram是最全面的事例级列预测函数。该函数返回一个表次表包含标量列预测可用的所有信息。,3.7 预测,3.7.3 预测函数,SELECT Histogram AS Label, PredictHistogram(CarModel) AS Hist FROM FilterByAge,3.7 预测,3.7.4 嵌套表上的预测,根据过去购买的物品、购物篮中的
31、物品或者仅仅根据客户的个人特性来提供推介物品。,推介预测用PredictAssociation()函数执行。函数操作一张可预测的嵌套表,返回结果是排好序的一个列表。,3.7 预测,3.7.4 嵌套表上的预测,3.7 预测,3.7.4 嵌套表上的预测,3.7 预测,3.7.5 预测嵌套值列,预测嵌套表中的列值相对来说比较罕见,但是在需要这么做的时候,它是非常有用的。,例如:要跟踪一栋大楼内所有调温器的温度。在这种情况下,事例是测量温度的时间,它包含一个嵌套表,嵌套表包含每个调温器以及此调温器当前的读数。预测任务是在已知其他调温器读数的情况下,预测特定调温器的温度。这一操作需要预测嵌套表中的值列。,