创建神经网络结构和模型(数据挖掘中级教程)

若要创建数据挖掘模型,必须先使用数据挖掘向导基于新数据源视图创建一个新的挖掘结构。 在本任务中,您将使用该向导创建一个挖掘结构,同时创建一个基于 Microsoft 神经网络算法的关联挖掘模型。

由于神经网络非常灵活且可以分析输入和输出的多个组合,因此应试用多种处理数据的方式以获得最佳结果。 例如,您可能要自定义数据“装箱”或分组的方式,以满足特定的业务要求。 为此,您将向该挖掘结构中添加一个以不同的方式对数值数据进行分组的新列,然后创建一个使用这个新列的模型。 您将使用这些挖掘模型来进行一些浏览。

最后,在您从神经网络模型中了解到哪些因素对您的业务问题影响最大之后,您需要生成一个单独的预测和记分模型。 需要使用 Microsoft 逻辑回归算法,该算法基于神经网络模型,但经过优化可用于基于特定输入查找解决方案。

创建默认呼叫中心结构

创建默认神经网络挖掘结构和模型

  1. 在 Business Intelligence Development Studio 的解决方案资源管理器中,右键单击**“挖掘结构”,再选择“新建挖掘结构”**。

  2. 在**“欢迎使用数据挖掘向导”页上,单击“下一步”**。

  3. 在**“选择定义方法”页上,确保已选中“从现有关系数据库或数据仓库”,再单击“下一步”**。

  4. 在**“创建数据挖掘结构”页上,确保已选中选项“创建带有挖掘模型的挖掘结构”**。

  5. 单击选项**“您要使用何种数据挖掘技术?”的下拉列表,然后选择“Microsoft 神经网络”**。

    由于逻辑回归模型基于神经网络,因此,您可以重用同一结构,添加新的挖掘模型。

  6. 单击**“下一步”**。

    **“选择数据源视图”**页随即显示。

  7. 在**“可用数据源视图”下选择“呼叫中心”,再单击“下一步”**。

  8. 在**“指定表类型”页上,选中 FactCallCenter 表旁边的“事例”复选框。 单击“下一步”**。

  9. 在**“指定定型数据”页上,选中 FactCallCenterID 列旁边的“键”**。

  10. 选中**“预测”“输入”**复选框。

  11. 选中**“键”“输入”“预测”**复选框,如下表所示:

    表/列

    键/输入/预测

    AutomaticResponses

    输入

    AverageTimePerIssue

    输入/预测

    Calls

    输入

    DateKey

    请勿使用

    DayOfWeek

    输入

    FactCallCenterID

    IssuesRaised

    输入

    LevelOneOperators

    输入/预测

    LevelTwoOperators

    输入

    Orders

    输入/预测

    ServiceGrade

    输入/预测

    Shift

    输入

    TotalOperators

    请勿使用

    WageType

    输入

  12. 在**“指定列的内容和数据类型”页上,验证网格包含如下表中所示的列、内容类型和数据类型,然后单击“下一步”**。

    内容类型

    数据类型

    AutomaticResponses

    Continuous

    Long

    AverageTimePerIssue

    Continuous

    Long

    Calls

    Continuous

    Long

    DayOfWeek

    Discrete

    Text

    FactCallCenterID

    Key

    Long

    IssuesRaised

    Continuous

    Long

    LevelOneOperators

    Continuous

    Long

    LevelTwoOperators

    Continuous

    Long

    Orders

    Continuous

    Long

    ServiceGrade

    Continuous

    Double

    Shift

    Discrete

    Text

    WageType

    Discrete

    Text

  13. 在**“创建测试集”页上,清除选项“测试数据百分比”的文本框。 单击“下一步”**。

  14. 在**“完成向导”页的“挖掘结构名称”**中,键入 Call Center。

  15. 在**“挖掘模型名称”中,键入 Call Center Default NN,再单击“完成”**。

    **“允许钻取”**框处于禁用状态,因为您无法使用神经网络模型钻取数据。

  16. 在解决方案资源管理器中,右键单击刚创建的数据挖掘结构的名称,然后选中**“处理”**。

了解离散化

默认情况下,创建具有数值型可预测属性的神经网络模型时,Microsoft 神经网络算法将该属性视为连续数值。 例如,ServiceGrade 属性在理论上是介于 0.00(应答所有呼叫)和 1.00(挂断所有呼叫)之间的数值。 在此数据集中的值具有以下分布:

服务级别值的分发

因此,处理模型时,输出的分组方式可能会与预期的不同。 例如,使用聚类分析来查找值组的默认模型将 ServiceGrade 划分为诸如 0.0748051948 - 0.09716216215 这样的范围。 尽管此分组在数学上很准确,但此类范围可能对业务用户并没有太大意义。 要以不同的方式对数值进行分组,可以创建数值数据列的一个或多个副本,并指定数据挖掘算法应如何处理这些值。 例如,您可能指定该算法将值划分到不超过五个的数据箱中。

Analysis Services 提供了各种装箱或处理数值数据的方法。 下表说明了以三种不同方式处理输出属性 ServiceGrade 所得到的结果的差异:

  • 将其视为连续数值

  • 聚类分析时用最可能的方法使算法离散化值

  • 指定数值按等面积方法装箱

默认模型(连续)

以聚类分析方式装箱

按等面积装箱

VALUESUPPORT
Missing0
0.09875120
VALUESUPPORT
< 0.074805194834
0.0748051948 - 0.0971621621527
0.09716216215 - 0.1329729729539
0.13297297295 - 0.16749999997510
>= 0.16749999997510
VALUESUPPORT
< 0.0726
0.07 - 0.0022
0.09 - 0.1136
>= 0.1236

在该表中,VALUE 列表明如何处理连续值,而 SUPPORT 列则表明找到了多少个具有该值、范围或值类型的行。 有关装箱选项的详细信息,请参阅离散化方法(数据挖掘)

注意注意

可以在处理完所有数据后,从模型的边际统计信息节点获取这些统计信息。 有关边际统计信息节点的详细信息,请参阅神经网络模型的挖掘模型内容(Analysis Services - 数据挖掘)

或者,不使用数值,而是添加一个单独的派生列,该列将服务等级划分为预定义的目标范围,如 Best (ServiceGrade <= 0.05)Acceptable (0.10 > ServiceGrade > 0.05) 以及 Poor (ServiceGrade >= 0.10)。

创建列的副本并更改离散化方法

在 Analysis Services 数据挖掘中,通过添加包含目标数据的列的副本并更改离散化方法,可以轻松地更改在挖掘结构中装箱数值数据的方式。

下面的过程介绍了如何创建包含目标属性 ServiceGrade 的挖掘列的副本。 可以创建挖掘结构中任何列(包括可预测属性)的多个副本。

然后您将自定义所复制的列中数值的分组,以降低分组的复杂性。 在本教程中,您将使用离散化的等面积方法并指定四个存储桶。 此方法所产生的分组与您的业务用户所希望的目标值十分接近。

注意注意

在初始数据浏览期间,您还将试验各种离散化方法,或者尝试首先对数据进行聚类分析。

创建挖掘结构中某一列的自定义副本

  1. 在解决方案资源管理器中,双击刚刚创建的挖掘结构。

  2. 在“挖掘结构”选项卡中单击**“添加挖掘结构列”**。

  3. 在**“选择列”对话框中,从“源列”的列表中选择 ServiceGrade,然后单击“确定”**。

    一个新的列添加到挖掘结构列的列表中。 默认情况下,这个新的挖掘列具有与现有列相同的名称,并有一个数值后缀,如 ServiceGrade 1。 您可以更改该列的名称,使其更具描述性。 您还将指定离散化方法。

  4. 右键单击 ServiceGrade 1,然后选择**“属性”**。

  5. 在**“属性”窗口中,找到“名称”**属性,然后将名称更改为 Call Center Binned NN。

  6. 出现一个对话框,询问您是否要对所有相关的挖掘模型列的名称进行同样的更改。 单击**“否”**。

  7. 在**“属性”窗口中,找到“数据类型”**部分,然后根据需要展开。

  8. 将属性 Content 的值从 Continuous 更改为 Discretized。

    以下属性现在可用。 按下表所示更改属性值:

    属性

    默认值

    新值

    DiscretizationMethod

    Continuous

    EqualAreas

    DiscretizationBucketCount

    无值

    4

    注意注意

    DiscretizationBucketCount 的默认值实际为 0,这意味着算法将自动确定存储桶的最佳数量。 因此,如果希望将该属性的值重置为其默认值,请键入 0。

  9. 在数据挖掘设计器中单击**“挖掘模型”**选项卡。

    请注意,在您添加挖掘结构列的副本时,该副本的用法标志将自动设置为 Ignore。 其原因在于,当您向挖掘结构中添加列的副本时,您不应将该副本与原始列一起用于分析,否则算法会发现两列之间存在可能掩盖其他关系的密切关联。

向挖掘结构中添加新的挖掘模型

至此您已针对目标属性创建了一个新的分组,现在需要添加一个使用该离散化列的新挖掘模型。 完成后,CallCenter 挖掘结构将有两个挖掘模型:

  • 挖掘模型 Call Center Default NN 将 ServiceGrade 值作为连续范围来处理。

  • 挖掘模型 Call Center Binned NN 将 ServiceGrade 值离散化为四个不同的存储桶。

添加基于新的离散化列的挖掘模型

  1. 在解决方案资源管理器中,右键单击刚创建的挖掘结构,然后选择**“打开”**。

  2. 单击**“挖掘模型”**选项卡。

  3. 单击**“创建相关挖掘模型”**。

  4. 在**“新建挖掘模型”对话框中,在“模型名称”中键入 Call Center Binned NN。 在“算法名称”下拉列表中选择“Microsoft 神经网络”**。

  5. 在新挖掘模型中包含的列列表中,找到 ServiceGrade,将用法从 Predict 改为 Ignore。

  6. 同样,找到e ServiceGrade Binned,将用法从 Ignore 改为 Predict。

通常,您不能比较使用不同可预测属性的挖掘模型。 但是,在 SQL Server 2008 中,您可以为挖掘模型列创建别名。 也就是说,您可以重命名挖掘模型内的 ServiceGrade Binned 列,使它具有与原始列相同的名称。 然后可以在一个准确性图表中直接比较这两个模型,即使数据是以不同的方式离散化的也是如此。

为挖掘模型中的挖掘结构列添加别名

  1. 在**“挖掘模型”选项卡中的“结构”**下选择 ServiceGrade Binned。

    请注意,**“属性”**窗口显示 ScalarMiningStructure 列对象的属性。

  2. 在挖掘模型列 ServiceGrade Binned NN 下方单击与 ServiceGrade Binned 列对应的单元格。

    请注意,**“属性”**窗口现在显示对象 MiningModelColumn 的属性。

  3. 找到**“名称”**属性,将值改为 ServiceGrade。

  4. 找到**“说明”**属性,键入 Temporary column alias。

    **“属性”**窗口应包含以下信息:

    属性

    说明

    Temporary column alias

    ID

    ServiceGrade Binned

    建模标志

      

    名称

    Service Grade

    SourceColumn ID

    Service Grade 1

    用法

    Predict

  5. 在**“挖掘模型”**选项卡中的任意处单击。

    网格进行更新,在列用法旁边显示新的临时列别名 ServiceGrade。 包含挖掘结构及两个挖掘模型的网格应如下所示:

    结构

    Call Center Default NN

    Call Center Binned NN

      

    Microsoft 神经网络

    Microsoft 神经网络

    AutomaticResponses

    输入

    输入

    AverageTimePerIssue

    预测

    预测

    Calls

    输入

    输入

    DayOfWeek

    输入

    输入

    FactCallCenterID

    IssuesRaised

    输入

    输入

    LevelOneOperators

    输入

    输入

    LevelTwoOperators

    输入

    输入

    Orders

    输入

    输入

    ServceGrade Binned

    忽略

    预测 (ServiceGrade)

    ServiceGrade

    预测

    忽略

    Shift

    输入

    输入

    Total Operators

    输入

    输入

    WageType

    输入

    输入

处理模型

最后,为了确保您创建的模型是可比较的,将为默认模型和装箱模型均设置种子参数。 设置种子值可保证每个模型都从同一点开始处理数据。

注意注意

如果不为种子参数指定一个数值,SQL Server Analysis Services 将基于模型的名称来生成一个种子。 由于神经网络模型和逻辑回归模型具有不同的名称,因此您必须设置一个种子值,以确保这两个模型按相同的顺序来处理数据。

指定种子并处理模型

  1. 在**“挖掘模型”选项卡中,右键单击名为 Call Center - LR 的模型所在的列,然后选择“设置算法参数”**。

  2. 在 HOLDOUT_SEED 参数所在的行中,单击**“值”下方的空单元格并键入 1。 单击“确定”**。 对与此结构关联的每个模型重复此步骤。

    注意注意

    选择哪个值作为种子无关紧要,关键是您需要对所有相关模型使用同一个种子。

  3. 在**“挖掘模型”菜单中,选择“处理挖掘结构和所有模型”。 单击“是”**将更新后的数据挖掘项目部署到服务器上。

  4. 在**“处理挖掘模型”对话框中,单击“运行”**。

  5. 单击**“关闭”关闭“处理进度”对话框,然后再次单击“处理挖掘模型”对话框中的“关闭”**。

至此您已创建两个相关的挖掘模型,接下来将浏览数据以发现数据中的关系。

更改历史记录

更新的内容

更新了教程方案,以使用包含数值列的多个副本的单个挖掘结构(其中每个副本列都是以不同的方式离散化的)。

增加了关于如何在数据挖掘模型中使用列别名的说明。

更正了预测和 DDL 语句中的挖掘模型名称以便与更新后的方案匹配。

为新增的 DayOfWeek 列添加了内容类型的数据类型。