Microsoft 神经网络算法 (SSAS)
在 Microsoft SQL Server 2005 Analysis Services (SSAS) 中,Microsoft 神经网络算法通过构造多层感知器网络创建分类和回归挖掘模型。与 Microsoft 决策树算法相类似,当给定可预测属性的每个状态时,Microsoft 神经网络算法可以计算输入属性的每个可能状态的概率。之后,可以根据输入属性,使用这些概率预测被预测属性的结果。
示例
Microsoft 神经网络算法对分析复杂输入数据(如来自制造或商业流程的数据)很有用;对于那些提供了大量定型数据,但使用其他算法很难为其派生规则的业务问题,这种算法也很有用。
在以下情况下,建议使用 Microsoft 神经网络算法:
- 营销和促销分析,如评估直接邮件促销或一个电台广告活动的成功情况。
- 根据历史数据预测股票升降、汇率浮动或其他频繁变动的金融信息。
- 分析制造和工业流程。
算法的原理
Microsoft 神经网络算法使用由三层神经元(即感知器)组成的多层感知器网络,该网络也称为反向传播 Delta 法则网络。这些层分别是输入层、可选隐藏层和输出层。在一个多层感知器网络中,每个神经元接收一个或多个输入,产生一个或多个相同的输出。每个输出都是对神经元的输入之和的简单非线性函数。输入只是从输入层中的节点传递到隐藏层中的节点,最后传递到输出层。同一层中的神经元之间没有连接。(如果没有隐藏层,则输入从输入层中的节点传递到输出层中的节点。)有关多层感知器神经网络的详细探讨不属于本文档的范围。
使用 Microsoft 神经元网络算法构造的挖掘模型可以包含多个网络,这取决于用于输入和预测的列的数量,或者取决于仅用于预测的列的数量。一个挖掘模型包含的网络数取决于挖掘模型使用的输入列和预测列包含的状态数。
在使用 Microsoft 神经网络算法创建的神经网络中,存在三种神经元类型:
- 输入神经元
输入神经元提供数据挖掘模型的输入属性值。对于离散输入属性,输入神经元通常代表输入属性的单个状态,其中包括缺少的值。例如,一个二进制输入属性生成一个输入节点,该节点说明缺少的或现有的状态,并指示该属性是否存在值。用作输入属性的 Boolean 列可生成三个输入神经元:一个神经元用于 True 值,一个神经元用于 False 值,还有一个神经元用于缺少或现有的状态。具有两个以上状态的离散输入属性可为每个状态生成一个输入神经元,并为缺少的或现有的状态生成一个输入神经元。一个连续的输入属性可生成两个输入神经元:一个是针对缺少的或现有的状态的神经元,一个是针对连续属性自身的值的神经元。输入神经元可向一个或多个隐藏神经元提供输入。 - 隐藏神经元
隐藏神经元接收来自输入神经元的输入,并向输出神经元提供输出。 - 输出神经元
输出神经元代表数据挖掘模型的可预测属性值。对于离散输入属性,输出神经元通常代表可预测属性的单个预测状态,其中包括缺少的值。例如,一个二进制可预测属性可生成一个输出节点,该节点说明缺少的或现有的状态,以指示该属性是否存在值。用作可预测属性的 Boolean 列可生成三个输出神经元:一个神经元用于 True 值,一个神经元用于 False 值,还有一个神经元用于缺少或现有的状态。具有两种以上状态的离散可预测属性可为每个状态生成一个输出神经元,并为缺少的或现有的状态生成一个输出神经元。连续可预测列可生成两个输出神经元:一个是针对缺少的或现有的状态的神经元,一个是针对连续列本身的值的神经元。如果通过检查可预测列集生成了 500 个以上的输出神经元,则 Analysis Services 将在挖掘模型中生成一个新的网络,用于代表超出部分的输出神经元。
神经元可接收多个输入:对于输入神经元,神经元接收来自原始数据的输入;对于隐藏神经元和输出神经元,神经元接收来自神经网络中其他神经元的输出的输入。输入在神经元之间建立了关系,而这些关系可用作分析特定事例集时的路径。
为每个输入都分配了一个称为“权重”**的值,该值用于说明特定的输入对于隐藏神经元或输出神经元的相关性和重要性。分配给输入的权重值越大,则该输入与算法在确定该输入是否成功分类一个特定事例时所收到的神经元的相关性就越高,重要性也就越大。另请注意,权重可以是负值,表示输入可能抑制而不是激活特定神经元。输入值与权重相乘可以强调特定神经元的输入。(对于负权重值,输入值与权重相乘可降低重要性。)
相应地,每个神经元都分配有一个称为“激活函数”**的简单非线性函数,用于说明特定神经元对于神经网络层的相关性或重要性。隐藏神经元使用双曲正切函数作为其激活函数,但输出神经元使用 S 函数 (Sigmoid) 作为其激活函数。这两个函数都是非线性连续函数,允许神经网络在输入和输出神经元之间建立非线性关系模型。
为神经网络定型
在为使用 Microsoft 神经网络算法的数据挖掘模型定型时,涉及到若干个步骤。这些步骤与为该算法的可用参数指定的值紧密相关。
该算法首先根据数据源处理并提取定型数据。定型数据的百分比(称为“维持数据”**)保留用于度量生成的模型的结构的准确性。在定型过程中,在每次迭代定型数据后,根据维持数据处理模型。当模型的准确性不再提高时,定型过程便会停止。SAMPLE_SIZE 和 HOLDOUT_PERCENTAGE 参数的值用于确定定型数据中作为示例的事例数以及供维持数据备用的事例数。HOLDOUT_SEED 参数用于随机确定供维持数据备用的单个事例。
该算法下一步是确定挖掘模型支持的网络的数目和复杂性。如果挖掘模型包含一个或多个仅用于预测的属性,该算法将创建一个代表所有这些属性的单一网络。如果挖掘模型包含一个或多个同时用于输入和预测的属性,则该算法提供程序将为每个这样的属性创建一个网络。如果输入属性数或可预测属性数分别大于 MAXIMUM_INPUT_ATTRIBUTES 参数或 MAXIMUM_OUTPUT_ATTRIBUTES 参数的值,则将使用功能选择算法来降低挖掘模型中包含的网络的复杂性。功能选择可以将输入属性或可预测属性的数目减少到与该模型在统计上最相关的数目。
对于具有离散值的输入和可预测属性,每个输入或输出神经元各自表示一个单一状态。对于具有连续属性值的输入属性和可预测属性,每个输入或输出神经元分别代表属性值的范围和分布。每种情况下支持的最大状态数取决于 MAXIMUM_STATES 算法参数的值。如果特定属性的状态数超过 MAXIMUM_STATES 算法参数的值,则尽可能选择该算法最普遍或相关的状态,剩下的状态作为缺少的值分为一组,用于分析。
然后,该算法使用 HIDDEN_NODE_RATIO 参数的值来确定要为隐藏层创建的神经元的初始数目。可以将 HIDDEN_NODE_RATIO 设置为 0,以避免在该算法为挖掘模型生成的网络中创建隐藏层,以便将神经网络作为逻辑回归处理。
算法提供程序通过接受之前保留的定型数据集并将维持数据中的每个事例的实际已知值与网络的预测进行比较,即通过一个称为“批学习**”的进程来同时迭代计算整个网络的所有输入的权重。该算法处理了整个定型数据集后,将检查每个神经元的预测值和实际值。该算法将计算错误程度(如果有错误),并调整与神经元输入关联的权重,并通过一个称为“回传”**的过程从输出神经元返回到输入神经元。然后,该算法对整个定型数据集重复该过程。该算法支持多个权重和输出神经元,因此这个渐变的算法用于引导定型过程来分配和计算输入权重。有关渐变算法的探讨不属于本文档的范围。
使用算法
神经网络模型必须包含一个键列、一个或多个输入列以及一个或多个可预测列。
Microsoft 神经网络算法支持特定输入列内容类型、可预测列内容类型和建模标志,这些类型和标记如下表所列。
输入列内容类型 |
Continuous、Cyclical、Discrete、Discretized、Key、Table 和 Ordered |
可预测列内容类型 |
Continuous、Cyclical、Discrete、Discretized 和 Ordered |
建模标志 |
MODEL_EXISTENCE_ONLY 和 NOT NULL |
分布标志 |
Normal、Uniform 和 Log Normal |
所有 Microsoft 算法均支持一些通用的函数。但是,Microsoft 神经网络算法还支持下表所列的其他函数。
|
有关对所有 Microsoft 算法都通用的函数列表,请参阅数据挖掘算法。有关如何使用这些函数的详细信息,请参阅数据挖掘扩展插件 (DMX) 函数参考。
使用 Microsoft 神经网络算法创建的模型不支持钻取或数据挖掘维度,因为挖掘模型中节点的结构不必与基础数据直接对应。
Microsoft 神经网络算法支持多个参数,这些参数可以影响生成的挖掘模型的性能和准确性。下表对各参数进行了说明:
参数 | 说明 |
---|---|
HIDDEN_NODE_RATIO |
指定隐藏神经元相对于输入和输出神经元的比率。以下公式可确定隐藏层中神经元的初始数目: HIDDEN_NODE_RATIO * SQRT(Total input neurons * Total output neurons) 默认值为 4.0。 |
HOLDOUT_PERCENTAGE |
指定定型数据中用于计算维持错误的事例的百分比,定型挖掘模型时的停止条件中将用到此百分比。 默认值为 30。 |
HOLDOUT_SEED |
指定一个数字,用作在算法随机确定维持数据时伪随机生成器的种子。如果该参数设置为 0,算法将基于挖掘模型的名称生成种子,以保证重新处理期间模型内容的一致性。 默认值为 0。 |
MAXIMUM_INPUT_ATTRIBUTES |
确定在应用功能选择前,可应用于算法的输入属性的最大数。如果将此值设置为 0,则为输入属性禁用功能选择。 默认值为 255。 |
MAXIMUM_OUTPUT_ATTRIBUTES |
确定在应用功能选择前,可应用于算法的输出属性的最大数。如果将此值设置为 0,则为输出属性禁用功能选择。 默认值为 255。 |
MAXIMUM_STATES |
指定算法支持的每个属性的离散状态的最大数。如果特定属性的状态数大于为该参数指定的数,则算法将使用该属性最普遍的状态并将剩余状态作为缺少的状态处理。 默认值为 100。 |
SAMPLE_SIZE |
指定用来给模型定型的事例数。该算法使用此数或 HOLDOUT_PERCENTAGE 参数指定的包含在维持数据中的事例总数的百分比,取两者中较小的一个。 换而言之,如果 HOLDOUT_PERCENTAGE 设置为 30,则该算法将使用此参数的值或总事例数的 70% 的值,取两者中较小的一个。 默认值为 10000。 |
请参阅
概念
数据挖掘算法
数据挖掘中的功能选择
使用数据挖掘工具
使用 Microsoft 神经网络查看器查看挖掘模型