Microsoft神经网络算法技术参考

Microsoft神经网络使用 多层感知器 网络,也称为 Back-Propagated 增量规则网络,由最多三层神经元或 感知器组成。 这些层是输入层、可选的隐藏层和输出层。

多层 Perceptron 神经网络的详细讨论超出了本文档的范围。 本主题介绍算法的基本实现,包括用于规范化输入和输出值的方法,以及用于减少属性基数的特征选择方法。 本主题介绍可用于自定义算法行为的参数和其他设置,并提供有关查询模型的其他信息的链接。

Microsoft神经网络算法的实现

在多层 Perceptron 神经网络中,每个神经元接收一个或多个输入并生成一个或多个相同的输出。 每个输出都是神经元输入之和的简单非线性函数。 输入从输入层中的节点转发到隐藏层中的节点,然后从隐藏层传递到输出层:层中的神经元之间没有连接。 如果没有包含隐藏层(如逻辑回归模型中所示),则输入直接从输入层中的节点转发到输出层中的节点。

神经网络中有三种类型的神经元是使用Microsoft神经网络算法创建的:

  • Input neurons

输入神经元为数据挖掘模型提供输入属性值。 对于离散输入属性,输入神经元通常表示输入属性中的单个状态。 如果训练数据包含该属性的 null 值,则这包括缺失值。 具有两个以上的状态的离散输入属性为每个状态生成一个输入神经元,如果训练数据中有任何 null 值,则为缺失状态生成一个输入神经元。 连续输入属性生成两个输入神经元:一个神经元用于缺失状态,一个神经元用于连续属性本身的值。 输入神经元为一个或多个隐藏神经元提供输入。

  • Hidden neurons

隐藏的神经元从输入神经元接收输入,并为输出神经元提供输出。

  • Output neurons

输出神经元表示数据挖掘模型的可预测属性值。 对于离散输入属性,输出神经元通常表示可预测属性的单个预测状态,包括缺失值。 例如,二进制可预测属性生成一个描述缺失或现有状态的输出节点,以指示该属性是否存在值。 用作可预测属性的布尔列生成三个输出神经元:一个神经元用于真实值,一个神经元用于假值,一个神经元用于缺失或现有状态。 具有两个以上的状态的离散可预测属性为每个状态生成一个输出神经元,一个输出神经元用于缺失或现有状态。 连续可预测列生成两个输出神经元:一个神经元用于缺失或现有状态,一个神经元用于连续列本身的值。 如果通过查看一组可预测的列生成超过 500 个输出神经元,Analysis Services 会在挖掘模型中生成一个新网络来表示其他输出神经元。

神经元接收来自其他神经元或其他数据的输入,具体取决于它所在的网络层。 输入神经元从原始数据接收输入。 隐藏的神经元和输出神经元从神经网络中其他神经元的输出接收输入。 输入在神经元之间建立关系,关系充当特定事例的分析路径。

每个输入都有一个赋值,称为 权重,用于描述该特定输入对隐藏神经元或输出神经元的相关性或重要性。 分配给输入的权重越大,输入的值就越相关或重要。 权重可以是负数,这意味着输入可以抑制特定神经元,而不是激活。 每个输入的值乘以权重,以强调特定神经元的输入的重要性。 对于负权重,将值乘以权重的效果是降低其重要性。

每个神经元都有一个简单的非线性函数,称为 激活函数,用于描述特定神经元对神经网络层的相关性或重要性。 隐藏神经元使用 双曲正切 函数(tanh)作为激活函数,而输出神经元则使用 sigmoid 函数进行激活。 这两个函数都是非线性连续函数,允许神经网络为输入和输出神经元之间的非线性关系建模。

训练神经网络

训练使用Microsoft神经网络算法的数据挖掘模型涉及几个步骤。 这些步骤受到为算法参数指定的值的影响很大。

该算法首先从数据源中评估和提取训练数据。 保留训练数据的百分比(称为 保留数据)用于评估网络的准确性。 在整个训练过程中,每次对训练数据进行一次迭代后,都会立即评估网络。 当准确性不再增加时,训练过程将停止。

SAMPLE_SIZEHOLDOUT_PERCENTAGE参数的值用于确定从训练数据中采样的案例数,以及留作保留数据的案例数。 HOLDOUT_SEED 参数的值用于随机确定被搁置以作为保留数据的具体个案。

注释

这些算法参数不同于HOLDOUT_SIZE和HOLDOUT_SEED属性,这些属性应用于挖掘结构以定义测试数据集。

接下来,该算法确定挖掘模型支持的网络的数量和复杂性。 如果挖掘模型包含一个或多个仅用于预测的属性,该算法将创建表示所有此类属性的单个网络。 如果挖掘模型包含一个或多个用于输入和预测的属性,则算法提供程序会为每个属性构造一个网络。

对于具有离散值的输入和可预测属性,每个输入或输出神经元分别表示单个状态。 对于具有连续值的输入属性和可预测属性,每个输入或输出神经元分别表示属性的值的范围和分布。 任一情况下支持的最大状态数取决于 MAXIMUM_STATES 算法参数的值。 如果特定属性的状态数超过 MAXIMUM_STATES 算法参数的值,则选择该属性的最常用或最相关的状态,最多允许的最大状态数,其余状态将分组为缺失值,以便进行分析。

然后,该算法在确定要为隐藏层创建的初始神经元数时,使用 HIDDEN_NODE_RATIO 参数的值。 可以将 HIDDEN_NODE_RATIO 设置为 0,以防止在算法为挖掘模型生成的网络中创建隐藏层,以将神经网络视为逻辑回归。

算法提供者以迭代方式评估网络中所有输入的权重,方法是采用之前保留的训练数据集,并将保留数据中每个案例的实际已知值与网络的预测进行比较,这一过程称为批处理学习。 算法评估整个训练数据集后,该算法将检查每个神经元的预测值和实际值。 该算法计算错误程度(如果有),并调整与该神经元的输入关联的权重,在称为 反向传播的进程中从输出神经元向后工作到输入神经元。 然后,该算法对整个训练数据集重复此过程。 由于该算法可以支持许多权重和输出神经元,因此使用串联渐变算法来指导训练过程来分配和评估输入的权重。 有关串联渐变算法的讨论超出了本文档的讨论范围。

特征选择

如果输入属性的数目大于 MAXIMUM_INPUT_ATTRIBUTES 参数的值,或者如果可预测属性数大于 MAXIMUM_OUTPUT_ATTRIBUTES 参数的值,则使用特征选择算法减少挖掘模型中包含的网络的复杂性。 特征选择可减少与模型最相关的输入或可预测属性的数量。

所有 Analysis Services 数据挖掘算法都自动使用功能选择来改进分析和减少处理负载。 用于神经网络模型中特征选择的方法取决于特性的数据类型。 为了参考,下表显示了用于神经网络模型的特征选择方法,还显示了用于逻辑回归算法的功能选择方法,该算法基于神经网络算法。

算法 分析方法 注释
神经网络 有趣程度评分

香农熵

贝伊西亚与 K2 Prior

贝叶斯·狄利克雷特模型(默认情况下使用均匀先验)
神经网络算法可以使用基于熵和基于贝叶斯的评分方法,只要数据包含连续列。

违约。
逻辑回归 有趣程度评分

香农熵

贝伊西亚与 K2 Prior

贝叶斯·狄利克雷特模型(默认情况下使用均匀先验)
由于无法将参数传递给此算法来控制特征选举行为,因此使用默认值。 因此,如果所有属性都是离散的或离散化的,则默认值为 BDEU。

控制神经网络模型特征选择的算法参数是MAXIMUM_INPUT_ATTRIBUTES、MAXIMUM_OUTPUT_ATTRIBUTES和MAXIMUM_STATES。 还可以通过设置HIDDEN_NODE_RATIO参数来控制隐藏层的数量。

评分方法

评分 是一种规范化,在训练神经网络模型的上下文中,这意味着将值(如离散文本标签)转换为可以与其他类型的输入进行比较并在网络中加权的值。 例如,如果一个输入属性是 Gender,并且可能的值是“男性”和“女性”,另一个输入属性是“收入”,并且具有可变值范围,则每个属性的值不能直接比较,因此必须编码为通用刻度,以便计算权重。 评分是将此类输入规范化到数值的过程:具体而言,对概率范围进行规范化。 用于规范化的函数还有助于在统一刻度上更均匀地分布输入值,以便极端值不会扭曲分析的结果。

神经网络的输出也进行编码。 如果输出(即预测)有单个目标,或者用于预测且不用于输入的多个目标,模型将创建一个网络,并且可能没有必要规范化值。 但是,如果多个属性用于输入和预测,模型必须创建多个网络;因此,所有值都必须规范化,并且输出也必须在输出退出网络时进行编码。

输入的编码基于对训练事例中的每个离散值求和,并将该值乘以权重。 这称为加权总和,传递给隐藏层中的激活函数。 "“z”分数用于进行编码,如下所示:"

离散值

μ = p - 状态的先前概率

StdDev = sqrt(p(1-p))

连续值

数值 present= 1 - μ/σ

无现有值 = -μ/σ

对值进行编码后,输入将经过加权求和,网络边缘作为权重。

输出的编码使用 sigmoid 函数,该函数具有使它非常适用于预测的属性。 一个这样的属性是,无论原始值是如何缩放的,无论值是负值还是正值,此函数的输出始终是介于 0 和 1 之间的值,它适合估计概率。 另一个有用的属性是,sigmoid 函数具有平滑效果,因此,当值远离拐点时,该值的概率将向 0 或 1 移动,但缓慢。

自定义神经网络算法

Microsoft神经网络算法支持多个参数,这些参数会影响生成的挖掘模型的行为、性能和准确性。 还可以通过设置列上的建模标志,或通过设置分布标志来指定如何处理列中的值来修改模型处理数据的方式。

设置算法参数

下表介绍了可用于Microsoft神经网络算法的参数。

隐藏节点比率 (HIDDEN_NODE_RATIO)
指定隐藏神经元与输入和输出神经元的比例。 以下公式确定隐藏层中神经元的初始数量:

HIDDEN_NODE_RATIO * SQRT(总输入神经元 * 总输出神经元)

默认值为 4.0。

保留百分比
指定用于计算留出误差的训练数据中事例的百分比,该误差在训练挖掘模型时用作停止条件的一部分。

默认值为 30。

HOLDOUT_SEED
指定一个数字,该数字用于在算法随机确定保留数据时对伪随机生成器进行种子设定。 如果此参数设置为 0,则算法会根据挖掘模型的名称生成种子,以确保在重新处理期间模型内容保持不变。

默认值为 0。

最大输入属性
确定在采用特征选择之前可以提供给算法的最大输入属性数。 将此值设置为 0 会禁用输入属性的功能选择。

默认值为 255。

最大输出属性
确定可在使用特征选择之前提供给算法的最大输出属性数。 将此值设置为 0 会禁用输出属性的功能选择。

默认值为 255。

最大状态数
指定算法支持的每个属性的最大离散状态数。 如果特定属性的状态数大于为此参数指定的数字,则算法将该属性的最常见状态用于该属性,并将剩余状态视为缺失。

默认值为 100。

样本量
指定要用于训练模型的事例数。 该算法使用此数字或由HOLDOUT_PERCENTAGE参数指定的未包含在留出数据中的案例总数的百分比,以较小的值为准。

换句话说,如果HOLDOUT_PERCENTAGE设置为30,算法将使用此参数的值或等于案例总数的70%的值,以其中较小者为准。

默认值为 10000。

建模标记

支持以下建模标志与Microsoft神经网络算法一起使用。

不为空
指示该列不能包含 null。 如果 Analysis Services 在模型训练期间遇到 null,则会出现错误。

适用于数据挖掘结构列。

MODEL_EXISTENCE_ONLY (if translation should be avoided to preserve technical accuracy)
指示模型应仅考虑属性是否存在值,或者是否缺少值。 确切的值并不重要。

适用于挖掘模型列。

分发标志

支持将以下分布标志与Microsoft神经网络算法一起使用。 标志仅用作模型的提示;如果算法检测到不同的分布,它将使用找到的分布,而不是提示中提供的分布。

正常
指出应将列中的值视为表示正态分布,即高斯分布。

均匀
指示列内的值应被视为统一分布;也就是说,任何值的概率大致相等,并且是值的总数的函数。

日志正常
表示列内的值应被视为根据 对数正态 曲线分布,这意味着值的对数是正态分布的。

要求

神经网络模型必须至少包含一个输入列和一个输出列。

输入列和可预测列

Microsoft神经网络算法支持下表中列出的特定输入列和可预测列。

内容类型
输入属性 连续、循环、离散、离散化、键、表和有序
可预测属性 连续、周期性、离散、离散化和有序

注释

支持循环和有序内容类型,但算法将它们视为离散值,并且不执行特殊处理。

另请参阅

Microsoft神经网络算法
用于神经网络模型的挖掘模型内容(Analysis Services - 数据挖掘)
神经网络模型查询示例