神经网络回归
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
使用神经网络算法创建回归模型
模块概述
本文介绍如何使用机器学习 Studio 中的 "神经网络回归" 模块 (经典) ,通过可自定义的神经网络算法创建回归模型。
尽管神经网络广泛用于深度学习和建模的复杂问题(如图像识别),但它们可以轻松地适应回归问题。 如果有任何统计模型类使用自适应权重,并且这些类可以逼近自身输入的非线性函数,则可以将其称为神经网络。 因此神经网络回归适用于更传统的回归模型无法适应解决方案的问题。
神经网络回归是一种监督式学习方法,因此需要一个“带标记的数据集”(其中包含一个标签列)。 由于回归模型预测数值,因此标签列必须是数值数据类型。
您可以通过将模型和标记的数据集作为 输入来定型 模型或 调整模型超参数,从而对模型进行定型。 然后即可使用训练的模型来预测新输入示例的值。
如何配置神经网络回归
可以广泛地自定义神经网络。 本节介绍如何使用以下两种方式创建模型:
-
如果接受默认的神经网络体系结构,请使用“属性”窗格设置控制神经网络行为的参数,如隐藏层中的节点数、学习比率和规范化。
如果不熟悉神经网络,请先从本节开始。 模块支持许多自定义和模型优化,无需深入了解神经网络。
-
如果想要添加额外的隐藏层,或完全自定义网络体系结构、连接和激活功能,请使用此选项。
如果你对神经网络已有一定程度的了解,最好选择此选项。 使用 Net # 语言 定义网络体系结构。
使用默认体系结构创建神经网络模型
将 " 神经网络回归 " 模块添加到 Studio 中的试验 (经典) 。 可以在“机器学习”、“初始化”下的“回归”类别中找到此模块 。
通过设置“创建训练程序模式”选项,指示如何训练模型。
单个参数:如果已知如何配置模型,请选择此选项。
参数范围:如果不确定最佳参数,请选择此选项。 然后,指定一系列值,并使用 调谐模型超参数 模块循环访问这些组合并找到最佳配置。
在 " 隐藏层规范" 中,选择 " 完全连接的大小写"。 此选项使用默认的神经网络体系结构创建模型,这种网络体系结构对于神经网络回归模型具有以下属性:
- 网络只有一个隐藏层。
- 输出层完全连接到隐藏层,并且隐藏层完全连接到输入层。
- 隐藏层中的节点数可由用户设置(默认值为 100)。
由于输入层中的节点数取决于训练数据中的功能数,因此在回归模型中,输出层只能有一个节点。
对于“隐藏节点数”,请键入隐藏节点的数目。 默认为一个隐藏层,其中包含 100 个节点。 (如果使用 Net# 定义自定义体系结构,则不可用此选项。)
对于“学习比率”,请键入一个值,用于定义更正之前每次迭代要执行的步骤。 学习比率的值越大,模型的汇聚速度就越快,但它可以超过本地最小值。
对于“学习迭代数”,请指定算法处理训练事例的最大次数。
对于 "初始学习权重直径 ",键入一个值,该值确定学习过程开始时的节点权重。
对于“动力”,请键入一个要在学习过程中应用的值,作为之前迭代中的节点的权重。
对于 规范化器的类型,请选择以下要用于功能规范化的方法之一:
装箱规范化器:装箱创建大小相等的组,然后对每个组中的每个值进行规范化,使其除以组总数。
高斯规范化器:高斯规范化重新缩放每个特征的值的平均值为0,方差为1。 这是通过计算每个特征的平均值和方差来完成的,然后,对于每个实例,都要减去平均值并除以) 标准偏差 (方差的平方根。
最小值-最大值规范化器:最小值规范化:线性重新缩放每个功能的间隔为 [0,1]。
移动每个特征的值以重缩放为 [0,1] 区间,使最小值为 0,然后除以新的最大值(这是初始最大值和初始最小值之间的差异)。
不规范化:不执行规范化。
选择“无序播放示例”选项,以更改迭代之间的事例顺序。 如果取消选择此选项,则每次运行试验时,都将按完全相同的顺序处理事例。
对于“随机数种子”,可以选择键入一个值,将其用作种子。 如果你想要确保每次运行相同的试验都获得相同的结果,则指定种子值会很有用。
选择 " 允许未知分类级别 " 选项可为未知值创建分组。 对于已知值,该模型可能不太准确,但对新的 (未知) 值提供更好的预测。
如果取消选择此选项,该模型只会接受训练数据中包含的值。
连接培训数据集和培训模块之一:
运行试验。
定义自定义体系结构
将 " 神经网络回归 " 模块添加到试验中。
通过设置“创建训练程序模式”选项,指示如何训练模型。
单个参数:如果已知如何配置模型,请选择此选项。
参数范围:如果不确定最佳参数,请选择此选项。 然后,指定一系列值,并使用 调谐模型超参数 模块循环访问这些组合并找到最佳配置。
在 隐藏层规范中,选择 " 自定义定义脚本"。 如果要使用 Net # 语言定义自定义神经网络体系结构,则必须选择此选项。
选择 自定义定义脚本 选项后,将显示 " 神经网络定义 " 文本框。 您可以使用 Net # 脚本来定义神经网络的自定义体系结构,包括隐藏层的数量、它们的连接和高级选项(如指定层之间的映射)。
对于“学习比率”,请键入一个值,用于定义更正之前每次迭代要执行的步骤。 学习比率的值越大,模型的汇聚速度就越快,但它可以超过本地最小值。
对于“学习迭代数”,请指定算法处理训练事例的最大次数。
对于 "初始学习权重直径 ",键入一个值,该值确定学习过程开始时的节点权重。
对于“动力”,请键入一个要在学习过程中应用的值,作为之前迭代中的节点的权重。
对于 规范化器的类型,请选择以下要用于功能规范化的方法之一:
装箱规范化器:装箱创建大小相等的组,然后将每个组中的每个值进行规范化,除以组总数。
高斯规范化器:高斯规范化重新缩放每个特征的值的平均值为0,方差为1。 这是通过计算每个特征的平均值和方差来完成的,然后,对于每个实例,都要减去平均值并除以) 标准偏差 (方差的平方根。
最小值-最大值:最小值规范化:线性重新缩放每个功能的间隔为 [0,1]。
移动每个特征的值以重缩放为 [0,1] 区间,使最小值为 0,然后除以新的最大值(这是初始最大值和初始最小值之间的差异)。
不规范化:不执行规范化。
选择“无序播放示例”选项,以更改迭代之间的事例顺序。 如果取消选择此选项,则每次运行试验时,案例的处理顺序完全相同。
对于“随机数种子”,可以选择键入一个值,将其用作种子。 如果你想要确保每次运行相同的试验都获得相同的结果,则指定种子值会很有用。
选择"允许 未知分类级别 为未知值创建分组"选项。 测试数据集中任何未知值都映射到此未知类别。 使用此选项可能会稍微降低模型对已知值的精确性,但为未知值的新值 (更好的) 预测。
如果取消选择此选项,则模型只能对训练数据中包含的值进行预测。
连接训练模块和训练模块之一:
警告
如果将参数范围传递给 训练模型,则它只会使用参数范围列表中的第一个值。
如果将一组参数值传递给优化模型超参数模块,则当它需要每个参数的一系列设置时,它会忽略这些值,并且使用学习器的默认值。
如果选择" 参数 范围"选项并输入任何参数的单个值,则指定的单个值将在整个扫描过程中使用,即使其他参数在一系列值中更改。
运行试验。
结果
在训练完成后:
若要查看模型参数的摘要以及从训练中学习的特征权重以及神经网络的其他参数,请右键单击"训练模型"或"优化模型超参数"的输出,然后选择"可视化"。
要保存已训练模型的快照,请右键单击“已训练模型”输出,选择“另存为已训练模型”。 此模型不会在同一试验的连续运行中更新。
若要对标记的数据集执行交叉验证,请将未训练的模型连接到 交叉验证模型。
示例
有关此算法在试验中的使用方式的示例,请参阅以下Azure AI 库:
- 比较多个回归量:演示如何使用多个回归算法并比较其结果。
这些试验在 Net# 上提供了更多帮助。 试验相关,从基本配置到高级配置:
技术说明
本部分包含实现详情、使用技巧和常见问题解答。
有关 Net 的更多信息#
在 机器学习 Studio (经典) 中,可以使用 Net# 语言自定义神经网络模型的体系结构。 Net# 语言支持的自定义项包括:
- 指定隐藏层的数量和每个层中的节点数
- 指定层之间的映射
- 定义卷积和权重共享捆绑包
- 选择激活函数
神经网络模型由其图形结构定义,包括以下属性:
- 隐藏层数
- 每个隐藏层中的节点数
- 层连接方式
- 使用哪个激活函数
- 图形边缘的权重
重要
用户可指定图形的整体结构以及激活函数。 但是,无法指定边缘上的权重,并且必须在对输入数据训练神经网络时学习这些权重。
通常,网络具有以下默认值:
- 第一层称始终是输入层。
- 最后一层始终是输出层。
- 输出层中的节点数应等于的类的数目。
你可以定义任意数量的中间层(有时称为隐藏层,因为它们包含在模型内,并不直接显示为端点)。
Net # 参考指南解释了相关语法,并提供了示例网络定义。 其中说明了如何使用 Net# 添加隐藏层,以及定义彼此交互的各个层。
例如,以下 auto
脚本使用 关键字,该关键字自动为输入层和输出层设置功能数,并使用隐藏层的默认值。
input Data auto;
hidden Hidden auto from Data all;
output Result auto from Hidden all;
有关其他脚本示例,请参阅 Net# 神经网络规范语言指南。
提示
由于许多超参数和自定义网络拓扑的引入,神经网络的计算成本可能很高。 虽然在许多情况下神经网络生成的结果比其他算法更好,但获取此类结果可能需要对超参数进行大量扫描(迭代)操作。
模块参数
名称 | 范围 | 类型 | 默认 | 说明 |
---|---|---|---|---|
隐藏层规范 | 列表 | 神经网络拓扑 | 完全连接用例 | 指定一个或多个隐藏层的体系结构 |
初始学习权重直径 | >=double.Epsilon | Float | 0.1 | 指定学习过程初期的节点权重 |
学习速率 | [double.Epsilon;0.01] | Float | 0.005 | 指定学习过程中每个步骤的大小 |
动量 | [0.0;1.0] | Float | 0.0 | 指定在学习到节点来自以前的迭代过程中应用的权重 |
神经网络定义 | 任意 | StreamReader | 当选择“自定义的定义脚本”时,每条线来定义层,节点和行为的自定义神经网络上键入有效的脚本表达式 | |
规范化器的类型 | 列表 | 规范化方法 | 最小-最大值规范化器 | 选择要应用到学习示例的规范化类型 |
隐藏节点数 | 任意 | 字符串 | 100 | 键入隐藏层中的节点数。 对于多个隐藏层,请键入逗号分隔的列表。 |
学习迭代数 | >=1 | Integer | 100 | 指定学习时的迭代数 |
随机排列示例 | 任意 | 布尔 | 是 | 选择此选项可以更改学习迭代之间的实例顺序 |
随机数种子 | 任意 | Integer | 指定用于生成随机数的数字种子。 留空将使用默认种子。 此参数可选 |
|
允许未知的分类级别 | 任意 | 布尔 | 是 | 指示是否应为未知类别创建附加级别。 如果测试数据集包含的类别不在训练数据集中,则这些类别将映射到此未知级别。 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
未训练的模型 | ILearner 接口 | 未训练的回归模型 |