网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > SQL语法 > 正文

SQL_Server_2008之ETL技术详解

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

【网学网提醒】:网学会员为大家收集整理了SQL_Server_2008之ETL技术详解提供大家参考,希望对大家有所帮助!


    第
    使用SQLServer进行数据挖掘
    4
    章
    本章将回顾AnalysisServices工具集,同时介绍有效创建挖掘模型和分析挖掘模型的技巧。在学习本章之前,读者应该已经熟悉了第3章介绍的模型构建的概念,而且对挖掘结构、挖掘模型、挖掘模型列、事例表和嵌套表的概念也有了较深入的理解。对于初学者来说,本章可以帮助他们入门,对于有一定SQLServer数据挖掘经验的用户来说,本章可以为他们提供一些技术,以帮助他们最有效地发挥该工具集的作用。但是这并不意味着本章可以取代产品的帮助文档中优秀的帮助和教程。更确切地说,本章讲述如何使用AnalysisServices提供的通用工具,特别是用于数据挖掘的工具。本章将通过用户界面来讲述如何使用AnalysisServices的功能,并提供详细的操作步骤来示范如何创建一组挖掘模型。本章还将穿插介绍相关的一些概念。如果您偏离这些操作太远,则可以重新开始操作,也可以从本书的Web站点(wiley/go/data_mining_SQL_2008)上获得完整的项目文件,以便随时使用。本章将会使用附录A描述的MovieClick数据库来举例说明工具的用法。本章将学习:●使用BusinessIntelligenceDevelopmentStudio(BIDevStudio)●理解即时模式和脱机模式●创建及修改数据源、数据源视图和数据挖掘对象●浏览数据和评估模型
    4.1
    BIDevStudio介绍
    在使用SQLServer数据挖掘功能的过程中,大部分时间将会花费在商业智能应用程序开发工具集(BusinessIntelligenceDevelopmentStudio,BIDevStudio)上。BIDevStudio环境已经集成到MicrosoftVisualStudio(VS)框架中,为商业智能操作提供了完整的开发环境。在使用VisualStudio时,数据挖掘项目是一组项目中的一部分,这组项目也称为解决方案。数据挖掘项目与应用程序所要求的其他项目可以组合到一个解决方案中。例如,数据库管理员(DatabaseAdministrator,DBA)可能创建一个IntegrationServices项目,这个项目从联机事务处理(OLTP)系统中提取数据,并且把这些数据转换为适合于数
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    据挖掘的形式。然后,分析员可以创建一个AnalysisServices项目,这个项目包含浏览事务数据和分析事务数据的模型。最后,应用程序开发人员可以创建一个Web服务和Web站点,在终端用户应用程序和商业化的服务中嵌入这些模型。所有这些项目都可以包含在一个解决方案中,这个解决方案包含所有相互合作完成的工作。而且,这些工作的所有方面都可以通过源控制系统中完整的版本历史来获得。
    4.1.1用户界面
    BIDevStudio主要是为应用程序开发
    人员设计的,有一个实现解决方案的非结构化方法,该方法与传统的数据挖掘工具完全不一样。该方法和BIDevStudio开发环境的复杂性,使得那些熟悉其他数据挖掘工具集的用户感到害怕。然而,开始使用这个工具时,要处理VisualStudio中内置的无数选项和窗口,一旦经历这一段的磨练之后,要创建和分析一个挖掘模型就是非常简单的事。熟悉BIDevStudio的第一步是理解用户界面各个部分中哪些部分是重要的,并且理解各个部分的作用。图4-1列出了BIDevStudio的典型窗口布局,其中对各个重要的元素做了标注。
    窗口选项卡BI菜单设计选项卡解决方案资源管理器
    输出窗口
    设计窗口
    属性窗口
    图4-1
    BIDevStudio
    100
     第4章使用SQLServer进行数据挖掘
    BIDevStudio最重要的部分如下所示。●解决方案资源管理器:解决方案资源管理器窗口用于管理解决方案和项目。在这个窗口中可以创建和管理所有的对象。要在项目中增加一个对象,可以右击项目名,然后选择“添加新项”,或者右击一个特定文件夹,然后选择“新建”。进行上述操作之后,将会启动一个对话框或向导,创建特定的对象了。●窗口选项卡:通过窗口选项卡可以在设计器窗口之间快速切换。每一个当前打开的文件或者对象都有一个选项卡。如果打开的对象的数目超过了选项卡区域能够容纳的数目,则可以使用选项卡右边的滑动条来浏览其他的窗口。●设计窗口:设计窗口是编辑和分析对象的地方。创建一个新的对象或者在解决方案资源管理器中双击一个对象,将会打开该对象的特定设计窗口,以修改该对象,与该对象交互。●设计选项卡:许多对象都有不同的方面,可以对它们进行编辑或者与它们交互。这些方面在设计器窗口中是通过选项卡来给出的。●属性窗口:属性窗口是一个上下文相关的窗口,它显示当前选择项的属性。属性窗口在VisualStudio中很常见,适用于该开发环境中所执行的任何类型的操作。例如,如果在解决方案资源管理器中选择一个对象,则在属性窗口中将会显示所选对象的属性(比如对象ID、文件名等等)。如果在数据挖掘设计器窗口中选择某一列,则在属性窗口中将会显示列的属性(比如名称和数据类型)。如果所选的项没有属性,则属性窗口将是空的。●BI菜单:BI菜单位于主菜单栏的“调试”菜单和“工具”菜单之间,从中可以找到特定于AnalysisServices对象的上下文相关的菜单。例如,如果打开数据源视图(DataSourceView,DSV)编辑器,则“格式”菜单和DSV菜单将会在这个区域中显示。●输出窗口:当构建和部署
    项目时,输出窗口将显示相关的信息。如果项目有错误,则可以在输出窗口中查看关于该错误的描述。注意:要使操作环境更适合自己的数据挖掘任务,可以按照所喜欢的形式重新组织工作空间。单击并且拖动任何窗口的标题栏,可以显示窗口悬浮的图标,以帮助悬浮和停靠窗口。甚至可以将这些窗口彼此叠放,这样,可选择的选项卡将会显示在窗口的下面。在集成开发环境中选择不同的选项时,可能会显示额外的窗口。可以关掉当前不再使用的窗口——不要担心,如果需要它们,总是可以从视图菜单中打开它们。如果想使那些窗口易于使用,而且在屏幕空间上运行短暂时间,则可以在窗口的标题栏中单击图钉图标,这样,当不使用这个窗口时,该窗口将会自动隐藏。
    101
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    4.1.2脱机模式和即时模式
    BIDevStudio有两种工作模式:脱机模式和即时模式。具体使用哪一种工作模式有时基于个人的爱好,有时基于个人的需要。每一种模式都有各自的优点和缺点,重要的是,在使用BIDevStudio时需要理解这两种模式的区别。1.即时模式对数据挖掘用户来说,工作在即时模式下是很自然的。在即时模式下工作时,就直接并持续地连接到AnalysisServices服务器。当打开一个对象(比如挖掘结构)时,是从服务器中打开该对象。当改变了对象并且要保存它时,该对象将直接在服务器上改变。在即时模式下,BIDevStudio项目是一个到服务器上的数据库的链接。在解决方案资源管理器中,可以看到数据库中的当前所有对象。如果关闭这个项目,然后重新打开它,将会自动重新连接到该数据库。如果上次打开该项目时数据库中的对象已经改变了,则再一次打开它时,还能够看到这些改变。虽然这种模式很直观,也很容易理解,但是在使用时有一些因素还是应该注意的。最重要的是,它是真正的“即时”。如果有一个现成的工作模型,需要修改并保存该模型,那么,这种改变立即进行,并且该模型会变成是未处理的,任何针对该模型的查询都无法执行。除此之外,如果已经打开一个对象,其他用户也可以修改它。如果已经修改了一个对象并且试图保存它,将会看到一个警告,因为保存对象时会覆盖其他用户已经做出的修改。只有关闭对象并且重新打开它时,在服务器上的对象改变才能在项目中反映出来。在数据库中新建或者删除一个对象后,只有在关闭项目并且重新打开它时才能看得到所进行的改变。即时模式相对于脱机模式来说,一个最大的优点是安全性高。如果在即时模式
    下工作,则该模式允许在单一数据库限定的范围工作,同时允许拥有数据库管理员权限的用户创建和修改对象。下一节将会讲述为什么使用脱机模式要求用户是服务器管理员。2.在即时模式下使用BIDevStudio要在即时模式下开始使用BIDevStudio,则按照下面步骤进行操作:(1)启动BIDevStudio。(2)在“文件”菜单中选择“打开”,然后选择AnalysisServices数据库,如图4-2所示的对话框将会出现。(3)在对话框的相应输入框中输入要连接的服务器名和数据库名。(4)单击“确定”按钮。如果有服务器管理员的权限,则也可以在服务器上创建新的数据库,所需的操作是选择“创建新数据库”单选按钮,然后指定服务器名和数据库名。
    102
     第4章使用SQLServer进行数据挖掘
    图4-2
    即时模式下连接到数据库的对话框
    3.脱机模式在脱机模式下工作时,项目包含的文件存储在客户机上。在这种环境下修改对象时,所作的修改以XML文档的格式存储在硬盘上。在将一个模型或者对象部署到目标服务器之前,所创建的模型和其他对象不会存储在服务器上,而是存储在客户机上。这样就允许数据挖掘开发人员或者分析员在将模型部署到真正的服务器之前进行一些操作,设计和测试该模型。也可以将这些文件放到源控制系统中,以便跟踪对象元数据的改变,并且在一个开发团队中实现共享。在解决方案资源管理器中右击一个对象,然后选择“查看代码”,就可以查看和编辑这些文件的源代码。当部署一个项目时,BIDevStudio会对项目中的对象进行验证,并且会创建一个部署脚本,将脚本发送到服务器。部署的基本单位是整个项目,代表整个AnalysisServices数据库。当部署一个项目时,这些工具能够部署增量更改。然而,如果在服务器上有一个与项目设置中的数据库同名的数据库,或者如果要部署来自不同计算机的项目,则该部署将会完全覆盖已有的数据库。幸运的是,在覆盖已有数据库之前会弹出一个警告对话框。因为数据库是在部署时创建的,所以,只有服务器管理员才能将脱机模式下的项目部署到服务器上。4.在脱机模式下使用BIDevStudio要在BIDevStudio中开始使用脱机模式,按照下面步骤进行操作:(1)启动BIDevStudio。(2)首先从“文件”菜单中选择“新建”菜单,然后选择“项目”,将会显示如图4-3所示的“新建项目”对话框。103
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    (3)(4)(5)(6)(7)
    在“项目类型”窗格中打开“其他语言”节点。选择“商业智能项目”。从“模板”窗格中选择AnalysisServices项目。指
    定项目的名称,然后单击“确定”按钮。首先选择“生成”菜单,然后选择“部署”,将项目部署到服务器,创建数据库。
    图4-3
    “新建项目”对话框
    默认情况下,项目会部署在localhost服务器,也就是说,该服务器与工具在同一台计算机上。为了改变目标服务器,首先选择“项目”,然后选择“属性”,以启动“配置属性管理器”对话框。在这个对话框中,可以创建不同的部署配置,还可以为每一个可能的配置指定目标服务器和数据库的名称,如图4-4所示。
    图4-4
    项目属性对话框
    在部署的过程中需要注意的其他重要属性是处理选项和部署模式。默认情况下,部署功能自动处理已经创建的对象,或者由于项目的改变而变得无效的对象。处理选项属性控104
     第4章使用SQLServer进行数据挖掘
    制处理行为。同样,默认情况下只将来自这些工具的增量更改部署到服务器上。如果其他客户已经改变了该数据库,或者在服务器上有一个同名数据库,则默认的部署方式会导致错误。部署模式属性可以控制这种行为。注意:可以设置一个属性来改变默认的部署服务器,默认的部署服务器是每次创建一个新的脱机项目时设置的。如果要改变默认的部署服务器,则需要选择“工具”菜单上的“选项”选项,进入“选项”对话框。在“选项”对话框中,依次选择“商业智能设计器”|“AnalysisService设计器”|“常规”,然后将默认的目标服务器属性设置为选定的服务器。这个设置只对新创建的项目起作用,所以仍然需要手动修改之前创建的项目。5.切换项目模式有时需要从一种模式切换为另一种模式,例如,要在另一台计算机上快速更新一个以前部署的项目时,或者要将一个数据库的对象元数据保存到源控制中时。进行这种切换是比较容易的。最容易的切换是将脱机模式切换为即时模式。只要按如下步骤操作:首先打开“文件”菜单,选择“打开”|“AnalysisServices数据库”,然后选择以前部署的数据库。相反,如果要将即时模式切换为脱机模式,需要在“新建项目”对话框中创建一个新的项目,并且选择“导入AnalysisServices2008数据库”,如图4-3所示。该操作将启动一个向导,在向导中可以指定服务器和源数据库的名称,并且可以将元数据提取到一个新的项目中。需要指出的是,如有必要,仍然需要设置部署选项来指出目标服务器和数据库的名称。注意:查看解决方案资源管理器中项目的名称,可以确定当前是在即时模式下还是在脱机模式下。如果当前是即时模式,则项目名称后面的圆括号中会有服务器的名称
    。除此之外,所有的窗口选项卡都会有文本(Online)跟在对象名字的后面。
    4.1.3创建数据挖掘对象
    打开数据库或者项目之后,不管选择哪一种操作模式,在AnalysisServices项目里执行的操作都是相似的。如果要进行数据挖掘,则需要指定和描述源数据,然后创建挖掘结构和挖掘模型。
    4.2
    设置数据源
    AnalysisServices中的两个对象——数据源和数据源视图(DSV)——是数据的接口。数据源实际上是一个连接字符串,用于描述数据的位置,然而,DSV是一个抽象层,DSV能够修改查看数据源的方式,甚至定义一个模式,在以后的某个时候切换实际数据源。本
    105
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    节讨论如何设置这些对象,以便在数据挖掘中使用。
    4.2.1数据源
    数据源是一个非常简单的对象。它只包含一个连接字符串和一些描述如何连接的附加信息。但是,数据源的两个问题可能会成为我们学习的绊脚石,如果不理解它们,则在以后学习的过程中很可能会受到挫折。由于允许在客户端上创建对象,因此这两个问题都将出现,当部署对象时,该对象不能正常工作。第一个问题是数据位置。与大多数数据挖掘产品不一样,SQLServer数据挖掘是一个基于服务器的解决方案。这意味着在设置数据源时,不但客户端(这个客户端是指创建模型的工具所在的计算机)能够访问该数据源,而且服务器(这个服务器是用来处理模型的地方)也能访问该数据源。例如,如果根据C:\MyDocuments\Northwind.mdb中的Access数据库构建了一个模型,那么,除非这个文件位于服务器的同一个位置,否则模型将无法处理。即使这个文件恰好存在,也有可能出问题,因为没有办法知道这个文件是否与本地版本包含同样的数据或者同样的模式。通常,当对本地数据进行挖掘时,应该使用SQLServer集成服务(SSIS)把当前的数据移到SQLServer数据库中,然后使用BIDevStudio构建挖掘模型。第二个问题是安全性。理解用户凭证是非常重要的,用户凭证用来控制从AnalysisServices中访问数据。当设置连接时,可以选择使用集成的安全性,也就是说,使用账户凭证来访问数据。也可以考虑选择使用简单的安全性,即要求使用一个指定的用户名和口令来访问数据。只要源数据库支持集成的安全性,Microsoft通常推荐使用集成的安全性。则当连接数据库时,不管源数据库支持什么方法,数据源对象都包含附加信息,这些附加信息能够准确地告诉AnalysisServices要使用或者模拟哪一种安全凭证。创建一个数据源对象有4种不同的模拟选项。●使用当前用户的凭证对于通过
    查询语句来访问的数据源而言,这种方法是最安全的。选择该选项,AnalysisServices就使用当前的用户凭证访问远程的数据。但是,在许多的实现方案中,AnalysisServices必须将凭证委派给源数据库计算机。为了让委派能够正常工作,需要域管理员对其进行配置。参考有关Kerberos的WindowsServer文档可以了解这个问题的更多信息。这种方法不能用于在处理AnalysisServices对象时用到的数据源,因为这种方法将会导致不同数据的访问,这取决于是由谁来处理对象。●使用帐户当不选择“使用当前用户的凭证”选项时,“使用帐户”选项是次优选择。“使用帐户”允许指定账户凭证,这个账户凭证将会在访问数据源时使用。凭证包含一个用户名和口令,存储在AnalysisServices上,所有对这些数据的访问都使用这个凭证。如果不选择委派,则这个方法是最安全的。●使用服务帐户“使用服务帐户”选项使得所有对这些数据的访问都使用这个账户,该账户也是106
     第4章使用SQLServer进行数据挖掘
    AnalysisServices的账户。使用这种方法主要用于测试,而不用于产品。通常,AnalysisServices应该尽可能地在拥有最少权限的账户下运行。●默认值“默认值”选项是指使用不同的凭证,具体依赖于如何访问数据源。如果是为了数据处理而进行访问,则应使用服务账户凭证访问数据。如果是为了数据查询而进行访问,则应使用当前用户凭证访问数据。创建MovieClick数据源要创建一个指向MovieClick数据库的数据源,则按如下步骤进行:(1)按照附录A中的描述下载MovieClick数据库,然后安装它。(2)在解决方案资源管理器或者对象资源管理器中右击“数据源”文件夹,然后选择“新建数据源”,以启动数据源向导。(3)跳过介绍页,在第二页中单击“新建连接”按钮,启动“数据链接”对话框。(4)输入用于安装数据库的服务器名称,指定安全设置,然后选择MovieClick数据库。(5)单击“确定”按钮,退出“数据链接”对话框,单击“下一步”,转到模拟信息页。(6)输入用户名和口令(当访问MovieClick数据库时,AnalysisServices将会使用该用户名和口令),然后单击“完成”按钮,关闭向导。
    4.2.2使用数据源视图
    数据源视图(DataSourceView,DSV)是数据在客户端的一个抽象视图,这也是建模工作开始的地方。在DSV中,可以选择、组织、浏览以及(在某种意义上来说)操作数据源中的数据。其实,DSV是告诉AnalysisServices希望如何查看数据源中的数据。因为对象存在于AnalysisServices服务器中,而不是关系数据源中,所以即使对关系数据库服务器只
    有读的权限,也可以执行这种类型的操作。为数据挖掘目的而创建一个DSV时,要确定的最重要的表是事例表。事例表包含要分析的事例。除此之外,还需要引入一些关系表,比如嵌套表或者查找表,这些表包含事例的附加信息。1.创建MovieClick数据源视图要从MovieClick数据源中创建一个DSV,则按如下步骤进行:(1)在解决方案资源管理器或者对象资源管理器中右击“数据源视图”文件夹,然后选择“新建数据源视图”,以启动数据源视图向导。(2)跳过介绍页,然后在选择数据源向导页中,MovieClick数据源会默认被选中;单击“下一步”继续。(3)名称匹配页对于导入的数据源不起作用,所以单击“下一步”继续。这一页只有当源数据库中的关系没有指定时才会显示,并且允许基于表的键列来选择如何自动创建关系。因为导入的MovieClick数据库既没有关系也没有键,所以它使用的算法不起作用。107
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    (4)在选择表和视图向导页中,单击>>按钮,将“可用对象”列表中的所有表移到“包含的对象”列表中。(5)单击“下一步”按钮继续,然后单击“完成”按钮,退出DSV向导,以显示DSV设计器。(6)右击MovieGenre表的Movie列,并选译“设置逻辑主键”。(7)将一个关系从Movies表的Movie列拖动到MovieGenre表的Movies列。连接之后,在设计器窗口中单击右键,然后选择“排列表”,把表排列整齐,更便于观看。完成这些操作之后,DSV应该如图4-5所示。
    图4-5
    完整的MovieClick数据源视图
    DSV设计器最初显示的是包含在数据源中的表和这些表之间的关系。如果已经熟悉了数据,并且这些数据现在适合于进行数据挖掘,就可以开始创建挖掘模型。但是,如果这些条件没有达到(通常是这样),则可以使用DSV设计器来浏览数据,并且将这些数据改为108
     第4章使用SQLServer进行数据挖掘
    模型所需要的形式。最初,可以在模式中对表和列进行简单的注释,以便于理解。也可以为这些对象添加描述信息,甚至可以改变对象的名称,使它更便于理解和支持。例如,如果有一个表NWSFY03,可以把它重命名为FiscalYear03NorthwestSales,或者将列014重命名为Quantity。只要选择对象,然后在属性窗口中输入描述和友好的名称即可。除此之外,如果在源数据库中还没有指定表之间的关系,则可以在这里指定。只需从一个表的外键列,将一条关系线拖到另一个表的主键列,就可以完成关系的指定。所有这些修改只发生在DSV中,并且不会以任何方式影响源数据。注意:如果事例表和嵌套表之
    间的关系不存在于关系数据库中,则必须在DSV中指定该关系,否则将无法将嵌套表添加到模型中。除了可以利用DSV对模式进行注释外,DSV还允许创建命名计算、命名查询和视图,并且在数据透视图(pivotchart)中交互式地浏览数据。2.使用命名计算在DSV中,命名计算列是表中附加的虚列。这个功能可以在自己的数据中挖掘派生信息,而不需要改变源数据。命名计算列包含一个名称、一个包含计算的SQL表达式和一个可选的描述。计算可以是任何有效的SQL表达式。如果对SQL表达式不熟悉,则可以学习下面的一些表达式类型,这些表达式在许多数据挖掘项目中都会用到。(1)算术操作标准的SQL支持+、-、×、/和%(取模)。例如,可以利用下面的公式来创建一个名为Profit的命名计算列:
    [SalesPrice]–[ItemCost]
    (2)数学函数数学函数是非常有用的,特别是当列中的数据不遵循统一分布时。在所有的SQL函数中,ABS、LOG、SIGN和SQRT用得特别多。下面有两个示例。●要以对数的方法来规范化一个以指数级别增加的变量,可以使用如下函数:
    LOG([SalesQuantity])
    ●要创建一个标志,来指出实际费用是高于预算还是低于预算,可以使用如下函数:
    SIGN([ActualExpenses]–[BudgetedExpenses])
    (3)组合表达式通常,想要测试的假设条件依赖于一个变量,这个变量是已有两个变量的组合。例如,可能对一个人是否结婚或者是否有孩子不感兴趣,但是这两个属性的组合可能提供很有价值的信息。针对这种情况的一个组合表达式如下所示:
    109
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    [MaritalStatus]+''+[HasChildren]
    (4)CASE表达式在数据挖掘中,CASE表达式是一种非常灵活的方式,用于创建有意义的变量。CASE表达式允许根据对一个或者多个条件的评估来指派结果。运用CASE可以达到下面的目的:改变值的标签,手动离散化列,减少有效状态的个数,将一个属性从一个嵌套表中转换为一个事例级属性。下面是几个范例。●要改变值的标签,可以使用下面的表达式:
    CASE[Category]WHEN1THEN'Food'WHEN2THEN'Beverage'WHEN3THEN'Goods'ENDCASE
    ●要手动离散化列,可以使用下面的表达式:
    CASEWHENWHENWHENELSEEND[Age][Age][Age]'Over<20THEN'Under20'<=30THEN'Between20and30'<=40THEN'Between30and40'40'
    ●要减少有效状态的个数,可以使用下面的表达式:
    CASE[MaritalStatus]WHEN'Married'THEN[MaritalStatus]WHEN'NeverMarried'THEN[MaritalStatus]ELSE'Other'END
    ●要将一个属性从一个嵌套表转换到事例表,可以使用下面的表达式:
    CASEWHENEXISTS(SELECT[Movie]FROM[Movi
    es]WHERE[Movie]='StarWars'AND[Movies].[CustomerID]=[Customers].[CustomerID])THEN'True'ELSE'False'END
    例如,要将一个嵌套表的属性转换为一个事例级属性时,就要执行这个操作。需要指出的是,如果依旧希望在模型中使用嵌套表,则必须使用一个命名查询来过滤来自嵌套表的属性,如下一节所述。3.在Customers表上创建一个命名计算要创建一个命名计算来离散化并减少NumBedrooms列中的状态,则进行下面的操作:(1)右击Customers表,然后选择“创建命名计算”,则会显示一个对话框。110
     第4章使用SQLServer进行数据挖掘
    (2)在对话框中输入计算列名Bedrooms,然后输入描述,后面这项输入是可选的。(3)最后输入下面的表达式:
    CASEWHENWHENWHENELSEEND[NumBedrooms]=1THEN'One'[NumBedrooms]<=3THEN'TwoorThree'[NumBedrooms]>=4THEN'Fourormore''None'
    (4)关闭对话框。当关闭上面的对话框时,DSV设计器会验证表达式。如果输入的表达式有错误,将会弹出一个对话框。一旦成功地创建了一个计算列,则可以右击该表,然后选择“浏览数据”来查看计算结果。4.使用命名查询由于命名计算列是一个DSV表中附加的虚列,所以命名查询是数据源的一个虚拟视图,通过它可以改变正在挖掘的数据,而不会改变原始的数据。即使可以对源数据进行修改,DSV中直接创建命名查询既快又容易,在并且允许在使用模型的地方同时保存这些视图,数据库不会被这种一次性对象“污染”。“创建/编辑命名查询”对话框提供了一种标准的查询构建器用户界面,这个构建器用来辅助创建查询,对于复杂的连接查询很有用。注意,命名查询只能作用于数据库对象,不能作用于其他的DSV对象。对于数据挖掘来说,有用的典型查询是过滤和连接。对挖掘结构列使用内置的case过滤可以完成简单的行过滤,但更高级的过滤情况则需要使用命名查询,如下面这些范例所示。●要从嵌套表中过滤掉不常见的项,可使用这种命名查询:
    SELECT[CustomerID],[Movie]FROM[Movies]WHERE[Movie]IN(SELECTDISTINCT[Movie]FROM[Movies]GROUPBY[Movie]HAVINGCOUNT([Movie])>20)
    ●要从一个外表(foreigntable)中连接信息,可使用这种命名查询:
    SELECTCustomers.*,Education.[EducationLevel]FROMCustomersJOINEducationONCustomers.[EducationId]=Education.[EducationId]
    5.基于Customers表创建一个命名查询我们要基于DSV中的Customers表创建一个命名查询,该Customers表只包含拥有房子的客户。因为这个表包含一个命名计算,所以必须将命名计算手动添加到这个查询中。(1)在Customers表中双击Bedrooms命名计算,打开“命名计算”对话框,
    然后复制111
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    其中的SQL文本。(2)在DSV设计器中右击,然后选择“新建命名查询”。(3)输入查询名Homeowners,然后输入描述,描述也可以不输入,是可选的。(4)单击“添加表”按钮,选择Customers表,然后关闭“添加表”对话框。(5)在Customers表上选择*(AllCustomers)复选框。(6)增加计算列:a.在查询窗口中Customers.*的后面输入一个逗号,然后将剪贴板中的内容粘贴到Column列的第二行。b.在粘贴文本之后,输入asBedrooms。查询将被扩展,Customers.*将会被Customers表的所有列替换。(7)对拥有房子的客户进行过滤:a.在网格控件中,找到Column列中包含[HomeOwnership]的行。b.在Output列的第二行中去除复选标记。c.在条件列中输入=‘Own’。(8)进行完上述操作之后,查询最后应如图4-6所示。单击“确定”按钮关闭这个对话框。
    图4-6
    Homeowners命名查询
    像其他的DSV表一样,现在,通过浏览数据,可以从上下文菜单中看到该命名查询。
    112
     第4章使用SQLServer进行数据挖掘
    注意:这一例子主要起示范作用,因为基于列值的简单过滤器如结构中的模型过滤器一样容易构建。6.组织DSV当创建了一个命名查询时,任何在原表上的已有关系都不会出现在新创建的表上。这意味着,如果还要用这些关系,则必须重新创建它们:对于表之间的每一条关系,从外键拖动一条线到主键就可以创建这些关系了。DSV中创建完很多交叉的关系线时,在这个图将很难读懂,如图4-7所示。
    图4-7
    DSV设计器中包含许多关系的DSV
    使用DSV图可以解决上述问题。DSV设计器允许创建许多图,这些图允许选择DSV表的子集,然后重新排列它们以方便查看。要创建这些图,只要单击“新建关系图”按钮,对这个图进行命名,然后从左边的列表中将表拖向它。也可以通过右击一个已经在视图中的表,然后选择“显示相关表”来显示相关的表,这样就可以把相关的表添加到视图中。在添加了表之后,可以在设计器视图中单击右键,然后选择“排列表”,这样就可以清除这些表的当前布局。
    113
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    注意:命名查询和命名计算依赖于关系数据库服务器的处理能力。处理生成的查询所需的附加资源会对挖掘模型的初始处理时间产生影响。如果这种时间上的增加过于严重,并且需要频繁地重复这些查询,那么应该考虑在关系数据库服务器上物化这些视图。7.浏览数据在任何数据挖掘项目中,都有一部分是学习和理解数据的本质。通过OfficeWeb组件
    (OfficeWebComponent,OWC)中的控件,DSV设计器提供了浏览数据的功能,并且有4种不同的方式。在DSV中右击一个表,然后选择“浏览数据”,就可以通过以下方式来浏览数据:表、数据透视表、简单图和数据透视图。默认情况下,浏览数据组件会从数据中采样5000个数据点。浏览数据窗口左上角的选项按钮允许将这个设置改为最大值20000数据点,这取决于OWC控件的限制。表格式视图允许对数据进行简单的浏览。通过多种不同的方式重新布局、分片或者聚集数据等,可以更巧妙地使用数据透视表,以更好地理解数据。例如,当浏览Customers表的数据透视表时,通过前面创建的Bedrooms列,将可以看到Age的平均值及其标准差(参见图4-8)。之所以看到这些信息,是因为我们正在浏览的是DSV表,而不是原始数据中实际存在的源表。也可以使用完全一样的方式在DSV中浏览命名查询。
    图4-8
    使用数据透视表浏览数据
    114
     第4章使用SQLServer进行数据挖掘
    图形的浏览方式通过不同的页面提供了简单的柱形图、饼图、条形图和一个数据透视图。使用简单的图,可以看到直方图和各种属性并排的饼图。如果数据是连续的,则图将会把连续的值分成10桶。相反,数据透视图提供了大量的图形控件来分析数据,包括标准折线图、条形图、散点图、柱形图和饼图,还有一些特殊类型的图,比如圆环图和雷达图,如图4-9所示。
    图4-9
    雷达图通过Bedrooms和HomeOwnership显示Age
    数据透视表和数据透视图有很多的配置选项,以便用不同的方式分析数据。这些选项大部分可以通过上下文相关的“命令和选项”对话框进行配置,该对话框可以从上下文菜单或者内嵌的工具栏中打开。数据透视表和数据透视图中的每一选项几乎都是可以改变的,方法是在图形环境下直接选择该对象,或者使用在对话框的“常规”选项卡中的选择框。要讲述OWC的所有功能集,需要一本书的篇幅,精通OWC控件最好的方式是多做练习,有了经验之后,就可以操作这些控件来找到合适的视图。除此之外,因为数据透视表和数据透视图是相互连接的,所以可以在它们之间来回切换,进行编辑,在编辑之后查看所进行的改变是如何影响另一个视图的。对于数据浏览功能来说,数据透视图的另一个附加的重要功能是,它可以通过图形化的方式来创建命名查询。单击工具栏中的“命名查询”按钮,可以使用图的元素定义一个
    115
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    命名查询。例如,在图中,可以只选择这些拥有房子的人(这些人有一间卧室)和出租房
    子的人(有4间或更多卧室),然后将他们添加到查询中。这个命名查询像其他查询一样,可以用作一个浏览数据的来源。注意:虽然浏览数据窗口看起来像其他的文档窗口,但实际上它是像解决方案资源管理器和属性窗口一样的工具窗口。右击“窗口”选项卡,可以将浏览数据窗口变成一个浮动的或可停靠的窗口。也可以在不同的DSV表上打开很多浏览数据窗口,来并排显示图和表。
    4.3
    创建和编辑模型
    一旦组织、修改、选择和理解了要分析的数据,就可以开始创建数据挖掘对象了。第一步是运行数据挖掘向导。使用该向导创建了数据挖掘对象之后,就可以在数据挖掘设计器中细化数据挖掘向导创建的结果。
    4.3.1结构和模型
    第3章曾提过,SQLServerAnalysisServices有两个主要的数据挖掘对象:挖掘结构和挖掘模型。挖掘结构用来定义挖掘问题的域,而挖掘模型是挖掘算法对挖掘结构中的数据的具体应用。挖掘结构包含一组结构列,这些列绑定到数据源,并有数据类型和内容类型,还包括一些可选的标志,这些标志用来控制如何对这些数据进行建模。除此之外,挖掘结构还包含了一组挖掘模型,这些挖掘模型的列都来自于挖掘结构。挖掘模型的定义包括挖掘算法及其相关的参数,还包括来自挖掘结构的列。挖掘结构中的每一个挖掘模型都可以使用不同的算法,或者使用相同的算法但使用不同的参数,或者包含挖掘结构中列的不同子集。对挖掘模型中的每一列,可以指定它在模型中的用法以及特定于算法的建模标志。有这个功能的支持,就很容易对同一数据集测试不同的假定。
    4.3.2使用数据挖掘向导
    数据挖掘向导可以创建两种对象:挖掘结构和挖掘模型,其中挖掘模型是可选的。挖掘结构描述用于挖掘的列和训练数据,挖掘模型是从挖掘结构中选择一些列,然后使用某一个算法,并且为该算法定义每一列的用法。这个向导将这两个对象的创建过程包含在一组简单的步骤中。116
     第4章使用SQLServer进行数据挖掘
    这个向导的步骤包括:(1)选择算法,或者只选择一个结构。(2)选择源表并且指定源表的用法。(3)选择表中的列并且指定这些列的用法。(4)指定测试数据(holdoutdata)、命名结构和模型。这时,就可以直接处理和分析模型的结果了。使用AnalysisServices很容易开始上述操作。向导还允许从多维源(比如联机分析处理(OLAP))中创建模型。OLAP将在第13章中介绍,现在我们只针对关系的(relational)源。向导的使用很简单,因为它的每一个步骤都是基于所提供的输入自动执行的。作为一个数据挖掘人员,理解这些
    步骤和所作的选择何时及如何影响模型是很重要的。向导的第一页是选择定义方法,在此页中,选择创建模型的源是来自于关系源还是来自于多维源,如图4-10所示。虽然最后从一个源创建的模型与从另一个源创建的模型是一样的,但是创建的过程还是有一点不同,所以对于不同的选项有不同的向导过程。而且,某个特定的数据挖掘算法可能不支持从OLAP源创建模型,所以该向导首先会提出这个问题。
    图4-10
    在数据挖掘向导中选择模型定义方法
    向导的第二页是创建数据挖掘结构,在此页中,系统会询问使用哪种数据挖掘技术来创建最初的挖掘模型。算法的列表是由目标服务器的功能决定的,并且或多或少地包含这本书讲述的算法。选择某一算法的理由和相关的过程将会在第15章讲述。如果向导运行时不能连接到服务器,那么可以从SQLServer数据挖掘提供的算法中获得默认的算法列表,如图4-11所示。具体选择什么算法主要取决于试图解决的商业问题。我们将会把每一个算117
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    法的应用放在后续的章节中讲述。
    图4-11
    数据挖掘向导中的创建数据挖掘结构页面
    接下来的两页需要确定待挖掘的数据。首先选择包含表的DSV,然后指定实际的表。当选择表时,必须指定每一个表是事例表还是嵌套表,如图4-12所示。如第3章所述,事例表包含要分析的实体的事例,嵌套表包含每一事例附加的信息(通常是事务信息)。
    图4-12
    在数据挖掘向导中指定表的类型
    注意:有时要决定哪一个表是事例表也比较困难。例如,如果要分析产品如何被一起购买,118
     第4章使用SQLServer进行数据挖掘
    则可以将产品作为事例表。然而,实际上要分析的是由单一客户所购买的一组产品。在这种情况下,该客户变成了含有事务表的一个事例,而该事务表(作为嵌套表)包含产品购买信息。当只有一个事务表时,这个表既可以作为事例表也可以作为嵌套表,这可以通过指定事务ID作为事例键,其他的列作为嵌套表中的列来实现。在数据挖掘向导后面的两页中,指定要使用的列,并且指定数据挖掘算法如何使用每一列。首先,指定结构和模型要使用哪些列,并指定列的用法类型——键、输入和/或可预测。然后为每一列指定数据类型和内容类型。如图4-13所示,如果选中每列最左边的复选框,但未选中“输入”或“可预测”复选框,则相应的列将显示在挖掘结构中,但不显示在初始模型中。当然,如果只创建结构,则不会显示“输入”和“可预测”复选框。
    图4-13
    在数据挖掘向导中指出
    如何使用列和如何指定嵌套键
    必须为模型中的事例表和每一个嵌套表指定一个键。要注意,在DMX中,嵌套表的键不是连接嵌套表与事例表的外键,而是嵌套表中的键。这个向导要求这个关系不能由外键建立,如果用户没有指定一个键,则向导会给用户一个警告。例如,有一个表示客户购物车中的商品的嵌套表,这个表包含行ID、事务ID、产品名、数量和价格,其中行ID是键。在模型中,嵌套表只有产品、数量和价格列,因为行ID对模型不重要,事务ID是事例表的外键。在这个缩减的嵌套表中,能够看到产品的数量和价格,而产品列变成了嵌套表的键。对于键的指定,时序和序列聚类模型有特殊的规则。具体内容请参见第8章和第10章。注意:当确定合适的列作为嵌套键时,需要考虑的一件事情是,数据挖掘算法通过分析事例之间的相似点和不同点来查找模式。如果选择某一列作为嵌套键,那么在这个列中的值只119
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    会出现在单一事例中,于是数据挖掘算法将找不出有关这个列的模式。基于这个逻辑,得出这样的结论:不要将事务ID或行ID作为嵌套键。指定哪些列作为输入列和可预测列取决于具体的商业问题,也依赖于正在测试的假设和所选择的算法。通常,如果指定一列为输入,则表明数据挖掘算法将会用此列来确定标记为可预测或者输出的列。因为每一个算法使用这些信息的方式是不一样的,所以应该熟悉每一个算法具体的语义,这将在以后每个算法章节中详细描述。但是所有这些算法的一个共同点是,如果想通过一个PREDICTIONJOIN语句对模型的列进行选择,则该列必须是可预测的。要预测一个嵌套表,则要选中键列旁的可预测列中的复选框。注意:如果表有很多列,则很难知道选择哪些列作为输入列。通常可以使用所有列,但是这会导致额外的处理开销,而且,根据具体的算法,也可能会使最终模型很难理解。单击向导的“指定定型数据(SpecifytheTrainingData)”页面中的“建议(Suggest)”按钮将会执行一个基于熵(entropy-based)的快速分析,它可以指出哪些列对于所选择的输出列可以提供一些有用的信息,进而可以在最终模型中减少列的数量。要注意,通过这个功能进行分析时,只对事例级列起作用,而且不能保证选择的列会对目标变量有影响,没有选择的列不会对目标变量产生影响。下一步,在向导中将会列出已经选择的列和这些列的数据类型及内容类型,如图4-14所示。指定合适的内容类型对模型的性能和精确度是至关重要的。例如,如果有一
    个字段(比如Income)标记为DISCRETE,则算法将会假定每一个可能的Income值是完全不同的类别,并且可能花费额外的时间进行处理,而无法得到真正有用的信息。相反,如果有一个分类类型的列,分类由标记为CONTINUOUS的整型指定(例如,1-蓝色,2-黄色,3-红色,4-绿色,等等),数据挖掘算法将会假定:可以对这些分类进行数学比较,并计算它们的间隔。此时就会得到古怪的逻辑,比如绿色(4)-红色(3)=蓝色(1)!
    图4-14
    在数据挖掘向导中指定内容类型和数据类型
    120
     第4章使用SQLServer进行数据挖掘
    幸运的是,数据挖掘向导有能力自动检测出一个数值列是分类类型(离散)的列还是连续型的列。在向导的“指定列的内容和数据类型”页中,单击“检测”按钮,该向导就会采样和分析源数据,并且选择一种合适的内容类型。如果选择了连续的内容类型,但是所选择的算法不支持连续的列,则内容类型将会被指定为DISCRETIZED。在设计器中,可以设置离散化参数,如下一节所述。在进入向导的下一步之前,应该确保为每一列都指定了正确的内容类型,如果还没有正确指定,则应该修改。向导的下一页是“创建测试集”页,如图4-15所示,指定测试数据的百分比以及测试数据集中事例数的最大值,这一最大值将按照本章后文介绍的验证方法被随机取消。强烈建议提供测试数据,尤其是对于分类模型和回归模型。目前,BIDevStudio没有提供任何工具用于评估包含可预测嵌套表的模型的准确性,因此为这样的模型指定测试集就毫无意义,除非自己实现准确性方法。
    图4-15
    指定测试集的事例数最多为500
    向导的最后一页如图4-16所示,指定挖掘结构和挖掘模型的名称,并且如果所选择的算法支持钻取功能,则可以启用钻取功能。当完成这些操作之后,向导将会创建包含一个挖掘模型的挖掘结构,并启动数据挖掘设计器。
    121
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    √
    图4-16
    在数据挖掘向导中命名对象
    4.3.3创建MovieClick挖掘结构和挖掘模型
    我们将创建一个挖掘结构和挖掘模型,根据对客户信息的了解,预测有房子的客户拥有多少间卧室。按照下面的操作步骤,使用数据挖掘向导来创建挖掘结构和挖掘模型。(1)在解决方案资源管理器或者对象资源管理器中右击“挖掘结构”文件夹,然后选择“新建挖掘模型”。(2)跳过描述页,进入“选择定义方法”页。由于我们要创建的挖掘模型来自关系数据,所以采用默认的选项,并且单击“下一步”按钮。(3)在“创建数据挖掘结构”页中,如果连接到一个服务器
    ,则会看到可以使用的算法列表。选择“Micrsoft决策树”,然后单击“下一步”按钮。(4)在“选择数据源视图”页中,显示了这个项目或者数据库的DSV。单击“下一步”按钮继续。(5)在“指定表类型”页中,需要指定事例表和嵌套表。因为我们只想分析拥有房子的客户,但又希望挖掘结构能支持范围很广的模型,所以选中Customers命名查询旁的“事例”列中的复选框。因为我们想添加所有的嵌套表,所以选中Actors、Channels、Criteria、Directors、Hobbies、Movies和Technology表旁的“嵌套”列中的复选框,然后单击“下一步”按钮继续。(6)在“指定定型数据”页中,指定在模型中要使用的列和这些列的用法。因为在DSV中已经指定了Homeowners表的键列,所以它被选择为模型的键。因为我们打算预测Bedrooms,所以选中Bedrooms命名计算旁边的“可预测”列。122
     第4章使用SQLServer进行数据挖掘
    (7)我们希望把所有的事例级列都作为输入列,但派生出Bedrooms表的NumBedrooms列除外。选中除CustomerID和NumBedrooms外的所有事例列旁的“输入”列中的复选框。注意:可以使用Shift键一次选中多个列,或者也可以单击“输入”列头部的复选框,然后取消NumBedrooms旁边的复选框。(8)对于每一个嵌套表,我们需要指定嵌套键。因为向导会自动地过滤外键列,所以每一个嵌套表只剩下一列。在每一个嵌套表中的每一列中,选中“键”列的复选框和“输入”列的复选框。单击“下一步”按钮继续。(9)在“指定列的内容和数据类型”页中,单击“检测”按钮,以自动地为每一列分配合适的内容类型。单击“下一步”按钮继续。(10)在“创建测试集”页中,在“测试数据集中的最大事例数”编辑控件中输入500,从而限制测试集中的事例数量。单击“下一步”按钮继续。(11)在向导的结束页中,输入MovieClick作为挖掘结构的名字,输入HomeownerBedrooms作为挖掘模型的名字,然后选中“允许钻取”复选框,最后单击“完成”按钮结束向导。当完成上述向导时,数据挖掘设计器将会打开挖掘结构编辑器。因为目前指定挖掘模型使用挖掘结构中的所有事例,所以模型定义还没有完成。我们将使用数据挖掘设计器来完成这一定义。
    4.3.4使用数据挖掘设计器
    大部分与模型相关的操作都发生在数据挖掘设计器中。它包含编辑、浏览、查询和比较模型的功能,这些功能分布在5个窗格中:●挖掘结构窗格●挖掘模型窗格●挖掘模型查看器窗格●挖掘准确性图表窗格●挖掘模型预测窗格本节只关注挖掘结构窗格和挖掘模型窗格的
    编辑功能,其他的功能将会在本章的4.5节中讲述。1.使用挖掘结构编辑器挖掘结构编辑器允许在挖掘结构中添加或删除列,还允许为每一个挖掘结构列定义属性。对于数据挖掘向导中无法实现的一些建模操作,必须使用挖掘结构编辑器实现。即使由向导生成的挖掘结构已经可以满足需要,在运行完向导之后,最好是检查挖掘结构,以确保它包含了所需要的任何东西。挖掘结构编辑器的3个主要的组件是结构树、数据源视图和属性窗口,如图4-17所示。123
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    单击结构树中的列或者DSV中的列,在属性窗口中将会显示它的属性。从DSV中将列拖动到结构树中,将会向挖掘结构添加列。右击任何一个项几乎都会弹出一个菜单,这个菜单提供了一组可以在该项上执行的一系列操作。可以浏览数据和DSV。注意,如果要编辑DSV,则必须回到DSV设计器中进行操作。
    结构树
    数据源视图
    属性窗口
    图4-17
    数据挖掘设计器中的挖掘结构编辑器
    挖掘结构编辑器允许进行一些操作,而且这些操作在数据挖掘向导中是没有的。下面这些建模任务不能在向导中执行,但可以用编辑器完成。●设置离散化属性:如果所选择的数据挖掘算法不支持连续的属性,则数据挖掘模型向导将会自动地将连续的列内容类型改为DISCRETIZED。然而需要指定离散化的方法,或者指定将属性分成多少桶。为了设置这些属性,单击要修改的列,并且在属性窗口中设置DiscretizationMethod和DiscretiztionBuckets属性。各种可用的离散化方法在第3章已讲述过。●多次将同一列添加到挖掘结构中:因为一个挖掘结构可能包含多个挖掘模型,所以可以用多种不同的方法,对某一特殊的列创建多个模型,目的是查看这一列如124
     第4章使用SQLServer进行数据挖掘
    何影响预测的结果。例如,用下面的方式来比较Age列是如何影响预测结果的,比如把Age列作为连续的值,或者将其离散化为3桶、5桶或者7桶。可以多次将同一个列添加到结构中,只要把DSV中的源列拖到结构树中。每一列都会获得序号递增的名称,可以通过属性窗口改变这个名字。●添加一个在另一个表中查找其值的列:如果数据已经是规范化的,则要挖掘的表可能包含了查找表的外键,而不是希望在模型中出现的真实数据列。使用挖掘结构编辑器,就可以直接将这些列添加到模型中。如果要增加这些列,则只要右击有外键的表,然后选择“显示相关表”就可以了。包含主键的表将会显示在挖掘结构编辑器的DSV中。如果在DSV中没有指定关系,则必须
    返回到DSV编辑器中,并且添加这个关系。从新建的表中,将包含(打算在模型中使用的)数据名的列拖动到结构树中。例如,假设正在挖掘一个Purchases表和另一个Products表,Purchases表有一个ProductID列,Products表的ProductName列与Purchases表的ProductID列相关联。要创建一个使用ProductName列的挖掘结构,只要右击Purchases表,然后选择“显示相关表”,就会调入Products表。然后,就可以单击ProductName列并拖动到结构中。注意:要将一个嵌套表添加到挖掘结构中,最简单的方法是将嵌套表的键拖到结构树中。当删除那个嵌套键时,编辑器会自动创建一个由指定嵌套键的嵌套表。2.向Movies嵌套表添加Genre列本章前面创建DSV时,曾添加了一个查找表来检索每个电影的类型信息。执行下面的步骤,将Genre列添加到挖掘结构中:(1)在挖掘结构编辑器中,右击DSV,选择“显示表”。(2)选择MovieGenres表,单击“确定”按钮。(3)在挖掘结构树中,单击Movies嵌套表的加号,以展开它的子项。(4)将Genre列从DSV的MovieGenres表拖到Movies嵌套表的列子项。注意:如果希望将查找列用作嵌套表的键,则必须编辑结构列的属性。首先必须将查找列的IsKey属性设置为True,然后将内容类型设置为Key。另外还必须正确设置原始键列IsKey和Content属性。3.使用挖掘模型编辑器挖掘模型编辑器包含显示模型和模型的列的一个表,还包含了一个属性窗口,如图4-18所示。这一配置可以快速查看每一列在每一个模型中的用法,并正确地设置属性。
    125
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    图4-18
    BIDevStudio中的挖掘模型编辑器
    用挖掘结构编辑器,可以执行很多在数据挖掘向导中无法完成的任务,包括:(1)在结构中创建多个模型要对同一个挖掘结构创建多个挖掘模型,只要在“挖掘模型”菜单中选择“新建挖掘模型”项,然后屏幕会提示输入挖掘模型的名称,选择要使用的算法,完成上述操作之后,编辑器将会在挖掘结构中创建一个新的挖掘模型。创建一个新的挖掘模型时,如果选择保持已有的挖掘模型的设置,则新创建的挖掘模型将会与上面选择的挖掘模型使用相同的列作为输入,有相同的预测目标,使用与新选择的算法一致的任何附加设置。(2)为每个模型设置算法特有的参数,并在模型列上设置算法特有的建模标志要编辑和设置模型的参数,只要选择挖掘模型本身就可以了。为此,只要选择列头,挖掘模型的属性就能显示在属性窗口中。在该窗口中,可以设置挖掘模型的名称和它使用的算法,过滤挖掘模型看
    到的事例,也可以给模型加上注释,如果算法支持钻取,则还可以启用钻取功能,以及设置算法的参数。对算法的参数进行设置时将会打开一个对话框,这个对话框显示可用参数的默认值及其描述,如图4-19所示。要知道每一个算法参数的含义,请参见后续章节中每一个算法的参数介绍。
    126
     第4章使用SQLServer进行数据挖掘
    图4-19
    Microsoft_Decision_Trees的“算法参数”对话框
    (3)过滤挖掘模型看到的事例或嵌套表中的行此练习构建的模型是关于房屋所有者的,因此必须添加一个过滤器,从模型中去除非房屋所有者,具体操作步骤如下:①单击数据挖掘设计器的“挖掘模型”选项卡,切换到挖掘模型编辑器。②在挖掘模型编辑器中单击BedroomsTree列的列头,选中模型。③在“属性”窗格中,单击Filter属性,并单击省略号(…)按钮,从而显示“过滤器”对话框。④在“过滤器”对话框中,指定挖掘结构列HomeOwnership的值为Own。⑤单击“确定”,操作完成。也可以根据嵌套表的内容来过滤事例。例如,可以只为购买科幻影片的客户构建一个模型。需要注意的是,过滤在挖掘结构列上完成,而不是在挖掘模型列上完成。用于过滤的那些列不必包含在要用作过滤器的模型中。事实上,在很多情况下,用于过滤的那些列不应该包含在要用作过滤器的模型中。在此例中,因为对单一的值HomeOwnership进行过滤,所以未向模型中添加此列的预测值,并可以忽略此列。(4)设置列属性列属性的设置方式与模型属性的设置方式相同,都是通过选择列并使用属性窗格来完成的。但是,因为用法属性常常变化,所以可以在编辑器中直接修改它。设置每一个列的用法时,需要涉及的步骤包括:选择需要的列,指定所选择的列为Input、Predict、PredictOnly或者“忽略”类型。选择Input类似于在数据挖掘模型向导中选择Input列。选择PredictOnly类似于在数据挖掘模型向导中选择Predict列。通常,这一用法意味着,这样的列不能作为其他可预测列的输入列,但更精确的语义应该参考后面每一章中的算法。选择Predict类似于在数据挖掘模型向导中选择Input和Predict列,这意味着这一列既可以作为可预测列,也可以作为其他可预测列的输入列,更精确的语义应该具体参考后面每一章中的算法。将模型的某一列的类型设置为“忽略”类型,则这个模型不包含这一列。127
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    除此之外,也可以在属性窗口中设置具体模型的每一列属性。一般而言,需要修改的属性是某一算法特有的建模标志、
    嵌套表的过滤器和列名。当挖掘结构包含多个列版本,而挖掘模型只包含一个列版本时,一般需要更改列名。例如,如果挖掘结构包含一个Age列和一个离散版的AgeDisc列,而挖掘模型只包含离散版的AgeDisc列,则可以将此挖掘模型列重命名为Age,以便与结构中的其他模型相一致。在编辑器主视图中将会显示出一个别名列。注意:使用Shift和Ctrl键可以选择多个列。这个功能允许一次设置多个列的属性。因为设置一列为“忽略”意味着从模型中删除该列,所以只能在列网格中设置列为“忽略”,而不是在属性窗口中设置。同时,不能在属性窗口中改变任何被忽略列的用法。要将多个列改为“忽略”,或者从“忽略”改为其他类型,只要在列网格中使用Shift或Ctrl键选择这些列,然后按F2键显示一个组合框,在该组合框中可以修改类型。还可以在挖掘模型编辑器中改变挖掘结构列的属性,为此,只需选择列,然后在属性窗口中设置它的属性。在这个编辑器中,还可以使用Shift键、Ctrl键和F2键同时改变多个挖掘结构列的属性,与选择多个挖掘模型列的用法一样。4.创建和修改附加模型我们打算把MovieTrees模型的所有事例级列设置为可预测列,然后将在同一个挖掘结构中创建一个新的挖掘模型,该模型使用Microsoft贝叶斯算法(详见第6章)。具体的操作步骤如下:(1)单击MovieTrees模型的Age列的行来选择表单元。(2)按住Shift键的同时,单击MoiveTrees模型的Bedrooms列,这样就选择了Age和Bedrooms两列的用法。(3)按F2键将弹出一个下拉框,可以在这个下拉框中选择用法的类型。(4)将列的用法改为Predict。所有选择的列的用法都将会改变。(5)使用Ctrl、Shift和F2键选择剩下的事例级列,并将其用法改为Predict。(6)在“挖掘模型”菜单中选择“新建挖掘模型”。(7)在显示的对话框中,输入MovieBayes作为挖掘模型的名字,并选择MicrosoftNaiveBayes作为算法,然后单击“确定”按钮。(8)将会显示一个警告,指出新的算法不支持Age、NumBathrooms、NumChildren和NumTVs列包含的内容类型,并且询问是否想继续。单击YES,新创建模型的这些列会被设置为“忽略”类型。到目前为止,我们的挖掘结构包含两个挖掘模型。新的挖掘模型与第一个挖掘模型相比,设置为Predict的列都是相同的。但是,由于所选择的数据挖掘算法不支持某些列的内容类型,这些列被设置成“忽略”类型,因此,这两个模型中的这些列是不一样的。
    128
     第4章使用SQLServer进行数据挖掘
    4.4
    处理
    第3章讲述了如何使用INSERTINTO语句来训练模型。
    利用工具在服务器上训练模型的过程称为处理。在一次读取数据之后,SQLServer数据挖掘可以并行处理挖掘结构中的所有模型。这是通过创建一个压缩的数据高速缓存来实现的,这个高速缓存用来训练挖掘结构的每一个挖掘模型。这个功能要求有几个处理选项,这些选项用来正确地控制被处理的是什么,以及当完成了这个工作时如何清理。第15章将详细讲述处理的机制。注意:在处理一个新建或者刚编辑的挖掘结构或者挖掘模型之前,必须首先将对象发送到服务器。在即时模式下,只要简单地保存所有操作就可以部署项目。然而,在脱机模式下,必须首先部署项目。为了完成上述操作,只要在“生成”菜单中选择“部署解决方案”就可以了。当使用默认设置时,部署项目将会处理项目中所有的对象。挖掘模型和挖掘结构的处理有3种状态。●经过处理的:经过处理的对象是一个完全处理过的并且可以用来进行预测的对象。●部分经过处理的:部分经过处理的对象是一个不明确的状态,意思是对象的一部分处理了而其他部分还没有处理。对于某些场合,部分经过处理的对象是可以接受的,例如,一个挖掘结构可能包含几个挖掘模型。目前,只想处理其中的一个挖掘模型——这样一来,挖掘结构就变成部分处理的了。●没有经过处理的:没有经过处理的对象是指该对象完全没有包含任何数据。挖掘结构和挖掘模型的处理选项如下所示:●ProcessFull:ProcessFull意味着来自源数据的对象将会被完全重新处理。当挖掘结构设置为这个选项时,则首先处理挖掘结构,然后对挖掘结构中的每一个挖掘模型进行并行处理(在企业版SQLServer中)。当挖掘模型设置为这个选项时,如果挖掘结构还没有处理,则用户只能读源数据。●ProcessDefault:处理一个设置ProcessDefault选项的对象时,服务器将会把任何传给它的对象都变为完全处理的状态。如果该对象已经被处理了,则服务器将不会对它进行任何操作。例如,如果在挖掘结构中编辑一个挖掘模型,并且把挖掘结构设置为ProcessDefault,则服务器无需重新读取源数据,就可以对该模型进行处理。●Unprocess:将某一对象的处理选项设为Unprocess,则意味着它是完全不被处理的,从而删除所有与该对象相关的数据。为一个挖掘结构设置这个选项,将清空所有的高速缓存,并且不会处理它包含的挖掘模型。●ProcessStructure:ProcessStructure只对挖掘结构有效,它使挖掘结构读取并高速缓存源数据,而不处理挖掘结构包含的模型。在执行这一处理之后,在后面执行处理命令ProcessFull和
    ProcessDefault时,则会处理来自缓存的信息。●ProcessClearStructure:对挖掘结构使用这个选项,意味着挖掘结构将会删除缓存的源数据,而不处理包含的挖掘模型,减少了磁盘的读写次数,但是处理挖掘结129
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    构时,下一个处理命令必须重新读数据。除此之外,也会对包含的挖掘模型禁用钻取功能,除非模型被重新处理。
    处理MovieClick挖掘结构
    下面将处理MovieClick挖掘结构。首先在即时模式下执行如下步骤:(1)单击工具栏上的“保存”按钮,保存挖掘结构。(2)从“挖掘模型”菜单中选择“处理挖掘结构和所有模型”,或者在设计器工具栏中单击“处理”按钮。(3)在处理对话框中单击“运行”按钮。现在在脱机模式下执行如下步骤:(1)从“生成”菜单中选择“部署”选项。默认情况下,部署解决方案时会处理所有的对象。(2)如果不是使用默认的设置,则部署解决方案与即时模式是一样的。此时,“处理进度”对话框将会出现,提供有关处理操作的一些状态信息。当处理完成时,可以看到每一个步骤的细节,包括处理时间。
    4.5
    使用模型
    一旦创建和处理了模型,就需要浏览模型,查询模型以及对模型进行比较,以便理解和应用模型所提供的信息。
    4.5.1了解模型查看器
    AnalysisServices提供的每一个用于数据挖掘的算法都有它自己的查看器。对于如何使用每一个算法查看器来解释所创建的模型,在后面的算法章节中会详细讲述。然而,这些查看器有一些共同的功能,这些功能在特定算法的上下文之外进行了较好的描述。“数据挖掘模型查看器”窗格提供了一个下拉控件,可以使用该控件来选择要查看的模型。在选择模型时,该模型会加载到算法特定的查看器中。所有这些查看器都允许查看模型多个方面的信息,各个方面的信息通过查看器上面的选项卡显示。实际的模型视图有两种基本的类型——图和表。每一个图的视图在其嵌入的工具栏中都有基本的缩放和调整大小的功能。还可以通过工具栏或者右击鼠标出现的弹出菜单来复制整个图或者当前显示的部分图。除此之外,还有一些可用于所有图视图的特殊的鼠标处理功能。滚动鼠标中间的滑轮可以对图进行放大和缩小,像按按钮一样按住鼠标中间的滑轮可以显示一个小型浏览器,如图4-20所示。这个功能可以帮助您快速、方便地移到想要查看的视图的任何一个部分。
    130
     第4章使用SQLServer进行数据挖掘
    图4-20
    依赖关系网络视图中的小型浏览器窗口
    表视图支持多种功能。每一个表视图都支持复制的功
    能,也就是说,可以以HTML格式来复制表的内容,以便将其粘贴到Word、Excel、FrontPage或者任何其他支持HTML的应用程序中。在许多视图的头部都包含提示信息,可以单击列头来对列中的信息进行排序。也可以拖动两个列头的边缘改变列的宽度。有一些视图还允许重新组织列的顺序——只需拖放列头。还可以将查看器控件设置为Microsoft一般内容树查看器,来查看任何模型的原始数据。如果安装了第三方提供的针对某些算法的定制可视化工具,也可以使用查看器控件。注意:如果不喜欢查看器中用来显示图形的颜色,可以通过下面的方法来改变它。“工具”从菜单中选择“选项”,将会弹出一个“VisualStudio选项”对话框。往下拖动该对话框的树型控件的滚动条,然后依次选择商业智能设计器/AnalysisServices设计器/数据挖掘查看器,之后可以在弹出的窗格中设置数据挖掘图的颜色。对图形颜色的改变不会从当前打开的查看器中立即反映出来。只有当关闭挖掘模型查看器并且重新打开它时,或者切换到不同模型时,才会注意到颜色改变了。许多查看器都在挖掘图例中显示当前选择的项的统计信息。“挖掘图例”窗口是可停靠的窗口,当某一个查看器需要它显示时,它将自动显示。
    131
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    4.5.2使用挖掘准确性图表
    “挖掘准确性图表”窗格中提供了用来度量所创建模型的质量和精确性的工具。●准确性图表(accuracychart):可以针对模型进行预测,并且将预测的结果与已知的结果进行比较。●利润图(profitchart):可以完成同样的功能,但是它还可以用来指定成本和收入信息,以确定最大回报的精确点。●分类矩阵(classificationmatrix):精确地显示该算法预测的结果正确的次数,并且显示错误的预测是什么。分类矩阵也称为无秩序矩阵。实际上,当训练模型时,最好是保存一些数据放在一边,以用于测试。使用训练时的数据对模型进行测试,将会使模型预测的效果比实际进行预测的效果好。在“创建和编辑模型”一节中提到,2008版的SQLServerDataMining可以指定要存放在挖掘结构中用于准确性测试的数据的百分比。1.选择测试数据要使用准确性图表,则必须指定测试所用的数据源。在准确性图表查看器的第一个窗格中,可以选择用于测试的数据。具体有如下三种选择:●使用挖掘模型测试事例●使用挖掘结构测试事例●指定不同的数据集一般来说,测试数据在结构上应该与训练挖掘模型所用的数据相似,并应该具有与训练数据相同的统计属性。使用准确性图
    表的最简单方法是针对挖掘结构中保存的测试数据。前两种选择(模型测试事例和结构测试事例)使用此测试数据集。第一种选择,即模型测试事例,表示挖掘结构测试数据集中满足模型可能具有的任何过滤器的事例。第二种选择,即结构测试事例,使用所有测试数据集。如果正在评估的模型没有过滤器,则这两种选择使用的是完全相同的数据集(整个挖掘结构测试数据集)。为了对不同的数据集(外部数据集)使用准确性图表,必须从DSV中选择源表或者从其他的数据源中选择源表,并且将它们绑定到挖掘结构中。如果选择的表的列名与挖掘结构中的列名相同,则选择表这一步将会自动处理。一旦选择了事例表和嵌套表,并且将它们绑定了,就可以有选择地过滤事例——当有一个特定的列,这个列可以指出这个事例是用来训练还是用来测试,或者只是简单地验证某个模型如何针对特定的数据集来执行,则事例的过滤可以完成。例如,当客户数超过40时,模型该如何执行?最后,选择正在测试的目标列,并且选择正在测试的值,后者是可选的。默认情况下,准确性图表为挖掘结构中的每一个挖掘模型选择相同的列和值。然而,也可以同时测试不同的列。例如,如果在不同的模型中有不同的离散化方法,则需要比较Age列被分成5个桶和被分成7个桶的预测效果是否一样。
    132
     第4章使用SQLServer进行数据挖掘
    为什么使用外部数据集而不使用测试数据?挖掘结构测试选项(模型测试事例和结构测试事例)是一种很好的方法,可以在训练挖掘模型时评估挖掘模型的准确性。但是,当新的数据有效时,基本模式可能会发生变化。可能需要根据最新数据定期评估现有模型的性能,以便确定模型仍然准确,可以使用;还是需要重新训练,以挖掘最新的模式。如果模型训练的数据采样过密,则我们可能也想使用针对外部数据集的准确性图表。欺诈检测和故障预报模型常常对训练数据采样过密,这些训练数据中的欺诈或故障过多。针对挖掘结构的测试集(同样采样过密)来评估这样一个模型的准确性,可以了解未检测出的故障(漏报,或II类错误)数量,但并不能准确地表示模型产生的错误警告(误报,或I类错误)。2.准确性图表图的类型依赖于所选择的目标是连续的还是离散的,以及是否选择一个目标值来进行预测。后面一种情况是很常见的,因此我们将解释前面一种情况。当选择一个离散的目标并且指定一个目标值时,将会看到一个标准的提升图(liftchart)。标准的提升图将会为选择的每一个模型提供一条曲线,以及两条附加的线:一
    条是理想曲线,一条是随机曲线。如果使用给定了观众百分比的模型,则曲线中每一个点的坐标代表目标观众百分比。图4-21展示了一个标准的提升图。在此图中,上面的线意味着,理想的模型将会使用18%的数据来获得100%的目标。这仅仅意味着18%的数据指出所需要的目标——这没有什么深奥的。下面的线是随机线。随机线通常是45°角的线。这意味着,如果想为每一个事例随机地猜测它的结果,则将使用50%的数据来获得50%的目标。其他模型线代表着挖掘模型。所有模型都会在随机线的上面。当看到一个模型的线盘旋在随机线周围时,这意味着目前在训练数据中没有丰富的信息来挖掘有关该目标的模式。以图4-21为例,决策树模型使用40%的数据可获得90%的目标信息,而贝叶斯模型使用70%的数据也只能获得90%的目标信息。因此,在此例中,决策树模式的性能优于贝叶斯模型。解释标准提升图(针对特定目标值)的一种简单方法是假想用模型来指导市场营销活动。在此情况下,将模型为所选择的目标值生成的预测视为客户对市场营销活动的响应预测。由于目的是得到尽可能多的响应,所以自然要对可能的客户按照模型返回的概率进行排序,概率越小,越排在后面。现在假定在客户列表中有1000个客户,其中有160个客户(如图4-21中所示,16%)将对市场营销活动做出积极的响应。当根据响应概率对客户进行排序时,理想模型会将此160个客户放在顶部。现实生活中的模型则会生成很多不正确的预测,并会将某些响应不积极的客户排在列表中靠前的位置。如果对客户进行排序的依据是图4-21中决策树模型预测的概率,则会发现在前400(40%)个客户中有144(160个目标客户的90%)个客户做出了响应。如果对客户进行排序的依据是贝叶斯模型预测的概率,则会发现在前700(70%)个客户中有相同数量的客户做出了响应。
    133
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    因此,应该使用决策树模型,因为只需要发送较少的市场营销材料就可以得到相同的结果。
    图4-21
    标准提升图
    提升图的图例可用于查找最好的概率阈值,预测中需要使用此阈值。例如,在图4-21中,图例反映了每个挖掘模型前16%的测试客户(或者前16%假想客户之后的客户)的性能。从图中可以看到,在前16%的客户中,有62%的客户是按照决策树模型来排序的,这些客户实际上就是目标客户。根据决策树算法,这些客户是目标客户的概率至少是60.73%,如挖掘图例所示。这一数字就是要得到提升图指定位置的性能所需要的概率阈值。与挖掘模型相关的得
    分反映了相应模型的性能占理想模型性能的比例。因此,得分总是小于等于1,且得分越接近1,性能就越好。3.使用利润图将图的类型切换到利润图,将有利于从成本的角度更好地理解该模型的质量。利润图可以更为直观地反映为解释提升图而模拟的市场营销活动。利润图提示输入初始成本(市场营销活动的初始成本),每一项的成本(每确定一个目标客户所需要的成本),以及每一次成功回复的收入(当模型正确地识别出一个目标客户时所得到的收入)。然后使用已创建的模型绘制一幅图,描绘将获得的收益。这一步能够帮助决定使用哪一个模型,以及决定给多少人发邮件。图4-22所示的利润图是为具有1000个潜在客户的目标客户而构建的。市场营销活动的初始成本是500美元,单项成本是10美元,每次成功预测所得到的收益是50美元。可以指出,如果钱只够给不到13%的人寄信,则应该使用贝叶斯模型。如果有足够的钱可以给大约21%的人寄信,则使用决策树模型会更好一些。更重要的是,它将指出不管有多少钱,都可以通过给排在前21%的人(排序的依据是使用决策树模型预测的可能性)寄信,获得最大的收益。除此之外,该图还可以找出给哪些人寄信。134
     第4章使用SQLServer进行数据挖掘
    图4-22
    带图例的利润图
    单击图将会显示一条竖直的线,每一条线的统计值都将显示在挖掘图例窗口中。在这个例子中,此图指出如果想获得最大收益,就需要给每一个人发邮件,其中有14.60%的人趋向于购买。而如果使用决策树模型,则会有更多的有购买意向。4.多目标准确性图表当选择一个离散的目标变量且不需要指定目标变量的值时,则会产生另一种准确性图表。在这种情况下,将会得到一个修改过的提升图,这个图看起来有点像倒立的标准图。通过所有可能的目标状态,这个图显示了模型的整体性能。在这个图中,一条线的坐标指出,如果使用这个模型,将会有多少预测是准确的。理想的线成45°角,这条线表示,如果已经使用了50%的数据,则应该纠正了约50%,或者如果已经使用了100%的数据,则应该一直在进行纠正。随机猜测线是基于训练数据集中发现的最有可能的状态。例如,如果预测性别,并且有57%的训练数据是女性,则可以假设,通过预测每一个事例的女性比例,将会获得最好的结果。随机猜测线将会在目标变量的百分比处结束,目标变量的百分比等于训练数据集中最有可能的状态的百分比。也就是说,在性别示例中,如果用于测试的数据集的分布与训练数据集一样,则测试线将会在57%处结束,但是如果
    只有30%的测试数据集是女性,则测试线将会在30%处结束。5.使用分类矩阵“挖掘准确性图表”窗格的“分类矩阵”选项卡将显示模型预测正确的次数,以及当预测错误时,给出的答案是什么。当对于一个错误的决策要花费一定的代价时,这种功能将会非常有用。例如,如果要基于客户的信誉度来预测分配给客户的会员卡类型,则把一个本来是铜卡会员的客户进行错误的分类比把他预测为白金卡会员的代价小一些。在这个135
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    视图中,只为每一个模型显示一个矩阵,显示每一对实际值与预测值组合的计数。6.精确散点图最后一种类型的准确性图表严格地作用于连续的值。这个图是一个散点图,为每一个事例比较实际值与预测值。在一个完美的模型中,每一个点将刚好都在45°角这条线上,表示预测值完全与实际值一样。在其他模型线上,点越靠近于45°的线,则模型质量越好。图4-23显示了一个精确散点图。从图中可以看出,该模型对大部分的事例作用效果比较好,只有一个点比较远。精确散点图自动显示,而不像提升图一样只有当选择一个连续的目标变量时才显示(从本书的配套网站wiley/go/data_mining_SQL_2008上,可以得到生成如图4-23所示的散点图所用的模型)。
    预测值
    实际值
    图4-23
    精确散点图
    4.5.3为MovieClick模型创建一个提升图
    下面将创建一个提升图,目标是预测哪些客户会每周去一次电影院。(1)单击挖掘准确性图表的图标,切换到“挖掘准确性图表”窗格。(2)确保“同步预测列和值”选项被选中。(3)选择要分析准确性的挖掘模型。例如,选择BedroomsTree和MoviesBayes模型。(4)在“可预测列名称”列上,选择MaritalStatus模型。(5)在“预测值”列中,选择NeverMarried值。(6)在“挖掘准确性图表”窗格的“选择数据”区域,确保选择要使用挖掘模型测试事例的选项。(7)在窗格的上部单击“提升图”选项卡,切换到图视图。此时一个查询将会发送到服务器,并且显示如图4-21所示的图。注意:可能会发现这样的情况:某个模型提供重要提升,但是很少或者几乎不会正确地对指定的目标进行分类。这是因为标准的提升图实际上不关心模型是否预测正确。提升图排序预测结果,排序是按预测概率从高到低的顺序进行的,这个概率是指对某一目标列的预测。如果在一个模型中对某一目标列的最高概率是25%,则该模型可能无法真实地预测所指定的目标。提升图的结构包含通过排序捕获到的目标事例的数量。因为提升图和利润图只是136
     第4章使
    用SQLServer进行数据挖掘
    概率阈值的反映——在哪些情况下不应该考虑客户,所以最终的预测结果是否正确也没关系。
    4.5.4使用交叉验证
    “挖掘准确性图表”视图最右边的窗格允许对挖掘结构中的模型执行交叉验证(CrossValidation)。前一小节介绍的图表用测试数据集来度量挖掘模型的准确性。多折交叉验证(multifoldcross-validation)技术可以确定模型的训练数据是否合适。交叉验证技术不使用训练期间模型看不到的验证数据集,而是使用模型的全部或部分训练数据。这一技术将训练数据分成很多部分(或者分成很多折——正如多折交叉验证这一名称所示),每一分区(partition)都包含相同的或很相近的训练事例数量。这一技术包括为每一分区构建挖掘模型。这一分区特定的模型是用其他所有分区的数据构建的,并依据当前分区的数据进行验证。所有分区模型的验证结果作为交叉验证过程的运行结果而返回。分区模型的验证是通过计算各种准确性度量来完成的。执行此过程之后,必须检查每一分区模型的准确性结果,并弄清楚如下两件事情:●结果的好坏——如果所有分区模型的准确性结果都很好,则使用整个数据集来训练模型很可能会得到很好的挖掘模型。另一方面,如果所有分区模型的准确性结果都很糟糕,则用整个数据集训练的模型就不可能提供很好的结果。●分区结果的相似程度——如果各个分区的结果是相似的,那么训练集就适合于当前任务。如果各分区模型之间的结果有很大的不同,则训练集中很可能没有足够的数据(结果的差异说明分区的数据分布有很大的不同)。在SQLServer数据挖掘中,交叉验证存储过程的执行针对当前挖掘模型中定义的所有挖掘模型。被存储过程分割和使用的数据集是挖掘结构中的训练数据(因此,测试数据不参与交叉验证)。需要注意的是,模型不需要过程训练就可以工作,因为过程为每个分区创建模型克隆(使用相同的算法和参数)。另外,可以配置存储过程只运行在挖掘结构数据的有限子集。因此,可以使用交叉验证过程来确定哪种算法最适合正在建模的问题,而不必对每种算法训练模型,这样就可以节省时间。为此,执行下面的操作步骤:(1)在BIDevStudio中定义挖掘结构。(2)向挖掘结构中添加多个模型(使用各种算法、参数和过滤配置)。(3)在全部或部分结构训练数据上执行交叉验证存储过程。(4)选择性能最佳的模型。(5)删除其他模型。(6)用挖掘结构中的所有数据训练性能最佳的模型。过程在构建分区时使用分层取样,以确保所有分区在目标列方面具有相似的数据分布。相
    似的数据分布会导致相似的模式。因此,如果各个分区之间的准确性结果差别很大,就意味着抽样产生了差别很大的分布,在训练集不够大时常常会发生这种情况。
    137
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    执行下面这些步骤,使用交叉验证过程来评估MovieClick项目的模型:(1)切换到“挖掘准确性图表”视图的“交叉验证”窗格。(2)选择过程中使用的折数。使用默认值10。(3)选择过程中使用的训练事例数。默认值0意味着所有挖掘结构训练数据都将用在过程中(此过程甚至可能用得更多)。由于此数据集中只有少量数据,所以可以选择默认值。(4)选择目标属性和目标状态,目标状态是可选的。如果对模型的整个准确性不感兴趣,但对属性某种状态的预测准确性感兴趣,则状态是非常有用的。例如,选择MaritalStatus属性。(5)单击“获取结果”按钮,启动过程。过程的执行可能需要花一点时间。此例中的结构包含两个模型(BedroomsTree和MoviesBayes)。交叉验证过程将为每个模型训练10个克隆,每个克隆有90%的结构训练数据,然后评估这些克隆的准确性。图4-24展示了过程结果。注意:BIDevStudio的QueryTimeout属性可能会影响长期运行的查询的执行,例如交叉验证过程。如果查询的执行产生了超时错误,则应该增加查询的超时设置。选择“工具”|“选项”菜单,在“商业智能设计器(BusinessIntelligenceDesigners)”节点下,将“查询超时”属性的值更改为0或更大的数(单位是秒),0表示查询始终不会超时。过程结果按照挖掘结构中的模型进行分组。第一个结果集描述BedroomsTree模型,第二个结果集(需要向下滚动窗口,它才能显示出来)描述MoviesBayes模型。每个模型的结果针对过程考虑的每一个折都包含一组准确性指标以及这些指标的值。图4-24展示了两个这样的指标:Classification—Pass和Classification—Fail。
    图4-24
    交叉验证结果
    138
     第4章使用SQLServer进行数据挖掘
    第一个准确性指标Classification—Pass指出在每个分区由相应的分区模型执行了多少种正确的目标属性(MaritalStatus)。其数量在140~150间不等,平均大约是145,标准偏差将近3。正确种类的绝对数量说明不了多少问题,但与平均值145相比,标准偏差3表明分区的差异一般小于2%,因此,结果似乎相当紧凑。这对BedroomsTree模型来说是好消息——训练数据似乎足够了。第二个指标集Classification—Fail指出在评估期间执行了多少种不正确的目标属性。其数量在24~35间不等,平均大约是29,标准偏差是3.5。与正确种类相比,这些结果并不紧凑
    ,但它们也没有太大的差别。因此,训练数据似乎很适合于手头的分类问题(正确地识别婚姻状况),在整个训练集上训练的模型将生成比不正确分类多得多的正确分类。准确性指标的类型取决于正在评估的每个模型所使用的算法类型(聚类度量不同于分类或回归度量),也取决于目标预测属性的类型(离散目标的准确性度量不同于连续目标的准确性度量)。交叉验证过程执行的所有准确性测试和度量的详细描述,请从联机丛书(或MSDN)中搜索相关信息。
    4.5.5使用挖掘模型预测
    数据挖掘设计器中的“挖掘模型预测”窗格允许构建和编辑预测查询,查看预测结果,将预测结果保存到一个表中。查询生成器有3个视图:“设计”视图、“查询”视图和“结果”视图,可以在工具栏中单击“视图”图标来选择相应的视图。用于构建查询的设计视图与其他产品(比如Access)中的查询设计器类似,所以,如果熟悉那些产品,则可以很快熟悉它。选择输入表的过程与在挖掘准确性图表中选择输入表的过程相似。唯一不同的是,还必须指出正在使用的挖掘模型来自哪个挖掘结构。完成这些操作之后,就可以构建查询了。要构建查询,需要将顶部的模型或者输入表中的列拖放到下面的网格中。除了拖放列之外,网格控件还允许手动指定输出列:单击空单元格,然后从所显示的下拉控件中选择,或者根据需要直接键入。注意:只能从挖掘模型中拖动可预测列。在查询生成器中这些列被标记为菱形。当选择一个预测函数时,在“字段”列的下拉列表框中包含所有的预测函数,这些预测函数是所选择的模型使用的算法支持的。在“条件/参数”列中指定预测函数的参数,这些列将会包含可以使用的参数的描述。查询视图显示由查询生成器创建的查询。根据需要,可以将这些查询复制并粘贴到应用程序中,也可以在此直接对其进行编辑。这个视图非常方便,利用它可以修改查询,特别是可以修改查询生成器不支持的查询结构,如SELECTTOPnFROM139
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    ORDERBYPredictProbability(),使用准确性图表来返回超过指定阈值的结果。注意,对查询所进行的编辑不能在设计视图中反映出来,所以当切换到那个视图时,前面所做的改变将会被覆盖。切换到“结果”视图来执行查询,然后,查询的结果将会显示在一个表中。可以将预测的结果复制到其他的应用程序中,或者单击“保存查询结果”按钮将结果导出到一个数据库的表中。注意:可以将结果导出到一个表中,然后将这个表添加到D
    SV中,用来重复地进行数据挖掘。
    4.5.6针对MovieClick模型执行查询
    下面要执行一个查询,这个查询将预测并且返回一个客户去影院看电影的频率,以及这个客户每个月去影院的概率。执行下面这些步骤:(1)在数据挖掘设计器中选择“挖掘查询生成器”图标,切换到查询生成器。(2)在查询生成器顶部窗格的“选择输入表”窗口中单击“选择事例表”。(3)在显示的对话框中选择Homeowners表,然后单击“确定”按钮。(4)将Homeowners表的CustomerID列拖放到网格上。(5)从挖掘模型中将TheaterFreq列拖放到网格上。(6)在最后一行的源列中,选择“预测函数”。(7)在这一行的“字段”列中,选择PredictProbability。(8)在这一行的“别名”列中,输入ProbMonthly。(9)在挖掘模型中将TheaterFreq列拖放到这一行的“条件/参数”列。(10)编辑这一行的“条件/参数”列,然后将“Monthly”添加到当前已有文本的末尾。(11)使用查询生成器工具栏中的下拉按钮来切换到“查询”视图,查看查询和已经保存了多少输入。(12)切换到“结果”视图,执行查询,之后可以看到查询的结果。该查询在一个单独的线程上执行,并且结果被发送到客户端。这意味着查询在执行时,用户界面一直处在活跃状态,所以可以在此期间取消它的执行或者执行其他的用户界面任务。当完成上述操作时,可以复制预测结果或者将结果保存到一个数据库中。
    4.5.7创建数据挖掘报表
    另外一个访问和发布数据挖掘查询结果的方法是使用SQLServerReportingServices。ReportingServices提供了一个创建定制报表的机制,这个报表通常包含文本和图形,可以通过HTML、e-mail、打印形式和MicrosoftOffice文档发布。基于Web的报表可以是交互式的,通过增加报表参数(这些参数可以修改报表的内容)实现交互式的目的。ReportingServices包含一些选项,用于定期运行报表,对结果进行高速缓存以便加速报表的产生,甚至还可以指定查询,来控制报表的发布。产品文档中有ReportingServices提供的功能的140
     第4章使用SQLServer进行数据挖掘
    详细描述,还有一些关于创建和管理报表的书,因此我们只介绍如何集成数据挖掘的功能。为了将ReportingServices用于数据挖掘,只需利用BIDevStudio创建一个报表服务项目,并指定一个AnalysisServices数据库作为数据源。根据数据库的具体内容,将会出现一个OLAP或者数据挖掘查询生成器,如图4-25所示。在图中单击“切换命令类型”按钮,可以在两个模式之间切换。另外,“设置参数”按钮还允许创建可由ReportingServices设置的参数。“编辑文本”
    按钮允许切换到SQL模式,以便创建QueryBuilder不支持的查询。注意:可以使用CALL语法从用户自定义函数中创建一个报表。为此,必须进入DMX查询生成器,然后切换到SQL模式,从该模式就可以直接输入CALL语句了。当从数据挖掘查询创建一个报表时,可以使用ReportingServices的所有功能。例如,DMX不支持分组操作,但是ReportingServices支持这个操作。针对图4-25描述的查询,可以使用ReportingServices的分组功能来创建一个与之前描述的分类矩阵等价的报告。此报告包含一个矩阵控件,列中是预测值,行中是实际值。单元格数据包含表达式“=CountRow()”。图4-26显示了这样一个报表的结果。
    设置参数切换命令类型
    图4-25
    ReportingServices数据挖掘查询设计器
    141
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    图4-26
    分类矩阵报表
    4.6
    使用SQLServerManagementStudio
    SQLServer2008中的ManagementStudio应该是DBA熟悉的环境—它是SQLServer—2005中新增加的功能,取代了SQLServer2000中的企业管理器(EnterpriseManager)和查询分析器(QueryAnalyzer),对许多管理员来说,它是进行事务处理的工具。SQLServer2005在中,这个环境得到了扩展,覆盖了SQLServer所有的技术。同一个用户界面可以管理关系数据库、OLAP立方体、数据挖掘模型、ReportingServices等等。可以在ManagementStudio中执行的数据挖掘功能包括:●服务器维护●数据库的创建和维护●浏览数据挖掘模型●使用挖掘模型预测生成器来构建查询●使用查询编辑器来构建查询●处理挖掘模型和挖掘结构●分配对象权限●备份和恢复数据库如果要在ManagementStudio中对一个AnalysisServices数据库执行操作,则必须对所修改的数据库拥有DatabaseAdministrator(数据库管理员)权限,但是不需要整个服务器的管理员权限。注意:如果要建立一个数据库,让非服务器管理员的用户基于这个数据库创建挖掘模型,那么有服务器管理员特权的用户必须在SQLManagementStudio中创建一个新的数据库,并且把非服务器管理员的用户设置为这个数据库的管理员。这样,非服务器管理员用户就可以在即时模式下使用BIDevStudio来创建和编辑挖掘模型。如果该用户将此部署数据库的名称更改为为他创建的数据库的名称,则此用户也可以使用脱机模式。但是,需要注意的是,这一方法将会完全覆盖现有数据库,因此,用户必须创建他们自己的管理角色,142
     第4章使用SQLServer进行数据挖掘
    否则将不能在第一次部署数据库之后修改数据库。
    4.6.1了解ManagementStudio用户界面
    ManagementStudio
    的用户界面和BIDevStudio的界面很相似,窗口、菜单、工具栏在这两个工具集中的使用方式也都类似,所以可以定制ManagementStudio的布局,正如在BIDevStudio中定制一样。对于数据挖掘最重要的工具窗口是“已注册的服务器(ServerExplorer)”窗口、“对象资源管理器”窗口和“模板资源管理器”窗口,如图4-27所示。
    SSAS查询按钮SSAS模板
    图4-27
    显示模板资源管理器和显示AnalysisServices图标的ManagementStudio
    4.6.2使用服务器资源管理器
    “服务器资源管理器”窗口允许快速访问常用的一组服务器。要访问AnalysisServices服务器,只要单击所嵌入的工具栏中的立方体图标,如图4-27所示。要执行的大部分工作都在“对象资源管理器”窗口中做了描述,下一节将详细描述“对象资源管理器”窗口。默认情况下,模板资源管理器是隐藏的。如果要使用它,则必须从“视图”菜单中选择显示它。模板资源管理器包含一组语法模板,有了这些模板将很容易创建查询。正如在服务器资源管理器中一样,需要选择所显示的立方体图标(如图4-27所示)才能访问特定于
    AnalysisServices的模板。
    143
     数据挖掘原理与应用(第2版)—SQLServer2008数据库—
    4.6.3使用对象资源管理器
    大多数的数据挖掘管理操作将会发生在对象资源管理器中。大多数的操作都可以通过如下方式执行:展开对象的树结构,选择想访问的对象,然后右击该对象,选择想要进行的操作。在这些操作中,最常用的操作包括:处理、安全管理、备份和恢复数据库。安全管理将会在第15章中讲述,备份和恢复在产品文档中有详细的描述,此处不再赘述。在这个界面中查看对象的属性,将会看到这个对象创建的时间和上次处理的时间。在对象资源管理器中,也可以创建XMLA(XMLforAnalysis)脚本,利用这些脚本可以创建、修改或者删除指定的对象。从上下文菜单中选择“编写挖掘结构脚本为Create列”将会创建一个XMLA脚本,可以把这个脚本放在剪贴板、文件或者“查询编辑器”窗口中。使用XMLA是一种快速而方便的创建对象的方式,要创建不同的对象,只要略微改变对象的描述、对象的标识符,对该对象进行其他的编辑就可以了。在第15章中将详细讲述XMLA。
    4.6.4使用查询编辑器
    查询编辑器是为熟悉DMX语法的高级用户设计的。这个编辑器是一个形式自由的文本编辑器,还支持智能感知功能(IntelliSense),它允许输入和执行即席式(adhoc)查询。于是,可以在这个界面上直接执行这些查询并且分析返回的结果。创建DMX查询有两种方式:●在工具栏单击“新建DMX查询”按钮
    ●从模板资源管理器中打开一个模板当创建一个新的查询窗口时,系统将会提示连接到一个服务器。“连接”对话框不要求提供要连接的数据库名,但在编辑器窗口打开之后,需要在“SQL编辑器”工具栏中选择目标数据库。此时,就可以编写查询了。在这个编辑器中,有VisualStudio所拥有的全部标准编辑功能,比如查找/替换、书签、关键字着色和智能感知。如果要使用智能感知,则首先输入一个关键字,然后按Ctrl+空格组合键,将会显示一个菜单,该菜单中包含了可能的匹配。在同一个文件中可以有多个DMX查询,如果要指明执行某一个查询,则只要在单击“执行”按钮或者按F5键之前选择它就可以了。虽然查询编辑器提供了一定的灵活性,但是要获得这种灵活性,要求用户有一定的DMX知识,目前有一些简单的方法来快速编写查询。其一是使用模板资源管理器,它提供了许多模板语法,只要简单地选择模板就可以了。另一个方法是使用本章前面讲述的查询生成器。右击一个挖掘模型,然后从模型的上下文菜单中选择查询生成器,就可以启动查询生成器。一旦构建了所要的查询,就切换到SQL视图,然后将其中的文本复制到查询编辑器窗口。这个过程会为预测连接语句自动地创建源数据查询,而不需要输入冗长的On子句。注意:也可以将模板资源管理器中的项拖到现有的查询窗口中,这样可以将模板的内容添加到当前的查询中。144
     第4章使用SQLServer进行数据挖掘
    4.7
    本章小结本章小结
    本章学习了用于数据挖掘的工具。BIDevStudio是其中的一个,它有向导和编辑器,在这里通过创建和分析模型(无论是在服务器上还是在脱机项目中)来执行大多数的数据挖掘工作。在这个环境中,通过创建一个数据源、数据源视图(DSV),以及创建一个包含挖掘模型的挖掘结构,来完成一个数据挖掘项目。使用自定义设计器和属性网格可以编辑所有这些对象。除此之外,还可以使用数据挖掘设计器,通过多种定制的查看器来查看模型,以及通过多种准确性图表来评价模型。SQLManagementStudio可以在模型的整个生命周期中对模型进行管理。这个环境提供了用于安全、处理、备份和恢复数据库以及其他管理功能的工具。在BIDevStudio中可用的查看器、准确性图表和挖掘模型预测生成器,在SQLManagementStudio中也可用。除此之外,SQLManagementStudio还有一个形式自由的查询编辑器,其中有一个查询模板库,可以利用这个模板库来创建即席式DMX查询。BIDevStudio和SQLManagementStudio这两个工具可以提供AnalysisServices所需的用户界
    面套件。第5章简要介绍在MicrosoftExcel中创建和管理数据挖掘结构和模型的界面。
    145
    
    
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师