神经网络的输出也会进行编码。 如果输出是单一目标(即预测),或者是仅用于预测而不用于输入的多个目标,模型将创建单一网络,似乎没有必要规范化输出值。 但是,如果有多个属性用于输入和预测,则模型必须创建多个网络;因此,所有值都必须规范化,输出也必须在退出网络时进行编码。
输入的编码基于对定型事例中的所有离散值进行求和以及对这些值乘以其权值。 这称为“加权和”
,它会传递给隐藏层的激活函数。 编码使用 z-score,如下所示:
μ = p
- 状态的先前概率
StdDev = sqrt(p(1-p))
存在值 =
1 - μ/σ
不存在值 =
-μ/σ
对值进行编码后,将会对输入进行加权求和,权值为网络边缘。
对输出的编码使用 Sigmoid 函数,其所具有的特性使其对预测非常有益。 其中一个特性是,无论原始值如何计量,也无论值为正为负,此函数的输出始终在 0 和 1 之间,正好适合于计算概率。 另一个非常有用的特性是,Sigmoid 函数有平滑的效果,值离转折点越远,值的概率会越趋近 0 或 1,但缓慢得多。
自定义神经网络算法
Microsoft 神经网络算法支持多个影响生成的挖掘模型的行为、性能和准确性的参数。 您还可以通过对列设置建模标志来修改模型处理数据的方式,或者通过设置分布标志来指定列中值的处理方式。
设置算法参数
下表介绍可用于 Microsoft 神经网络算法的参数。
HIDDEN_NODE_RATIO
指定隐藏神经元相对于输入和输出神经元的比率。 以下公式可确定隐藏层中神经元的初始数目:
HIDDEN_NODE_RATIO * SQRT(总输入神经元 * 总输出神经元)
默认值为 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 神经网络算法一起使用。
NOT NULL
指示该列不能包含 Null。 如果 Analysis Services 在模型定型过程中遇到 Null 值,将会导致错误。
适用于挖掘结构列。
MODEL_EXISTENCE_ONLY
指示该模型应仅考虑是否存在属性值或是否缺失值。 不考虑值具体为多少。
适用于挖掘模型列。
支持以下分发标志与 Microsoft 神经网络算法一起使用。 这些标志仅用作对模型的提示;如果算法检测到不同的分布,算法将使用所发现的分布,而不使用提示中提供的分布。
指示应将列中的值视为表示正态分布(或称高斯分布)。
Uniform
指示应将列中的值视为均匀分布;即,任何值的概率都基本相等,且为值的总数的函数。
Log Normal
指示应将列中的值视为按对数正态
曲线分布,即值的对数为正态分布。
神经网络模型必须包含至少一个输入列和一个输出列。
Microsoft 神经网络算法支持下表中列出的特定输入列和可预测列。