关于算法:SAS使用鸢尾花iris数据集训练人工神经网络ANN模型

85次阅读

共计 4537 个字符,预计需要花费 12 分钟才能阅读完成。

原文链接:http://tecdat.cn/?p=20781 

什么是神经网络?

人工神经网络最后是由钻研人员开发的,他们试图模拟人脑的神经生理学。通过将许多简略的计算元素(神经元或单元)组合成高度互连的零碎,这些钻研人员心愿产生诸如智能之类的简单景象。神经网络是一类灵便的非线性回归,判断模型。通过检测数据中简单的非线性关系,神经网络能够帮忙做出无关理论问题的预测。

神经网络对于存在以下条件的预测问题特地有用:

  • 尚无将输出与输入相干的数学公式。
  • 预测模型比解释模型更重要。
  • 有很多训练数据。

神经网络的常见利用包含信用风险评估,营销和销售预测。

neuralNet 基于多层感知器(MLP),具备以下特色:

  • 有任意数量的输出
  • 在暗藏层和输入层中应用线性组合函数
  • 在暗藏层中应用 S 型激活函数
  • 具备一个或多个蕴含任意数量单位的暗藏层

应用神经网络函数

该  neuralNet 通过最小化的指标函数训练网络。

开发神经网络时,须要做出许多参数抉择:要应用的输出数量,要应用的根本网络体系结构,要应用的暗藏层数量,每个暗藏层的单位数量,要应用的激活函数应用等等。

您可能基本不须要任何暗藏层。线性模型和狭义线性模型可用于多种利用。而且,即便要学习的函数是轻微的非线性,如果数据太少或噪声太大而无奈精确预计非线性,应用简略的线性模型也可能会比应用简单的非线性模型取得更好的成果。最简略的办法是从没有暗藏单元的网络开始,而后一次增加一个暗藏单元。而后预计每个网络的误差。当误差减少时,进行增加暗藏的单位。

如果有足够的数据,足够多的暗藏单元和足够的训练工夫,则只有一个暗藏层的 MLP 能够学习到简直任何函数的准确性。

生成神经网络模型的独立 SAS 评分代码

训练和验证神经网络模型后,能够应用该模型对新数据进行评分。能够通过多种形式对新数据进行评分。一种办法是提交新数据,而后运行模型,通过 SAS Enterprise Miner 或 SAS Visual Data Mining and Machine Learning 应用数据挖掘来对数据进行评分,以生成评分输入。

本示例阐明如何应用  neuralNet操作为 ANN 模型生成独立的 SAS 评分代码。SAS 评分代码能够在没有 SAS Enterprise Miner 许可证的 SAS 环境中运行。

创立和训练神经网络

annTrain 将创立并训练一个人工神经网络(ANN),用于分类,回归的函数。

本示例应用 Iris 数据集创立多层感知器(MLP)神经网络。Fisher(1936)发表的Iris 数据蕴含 150 个观测值。萼片长度,萼片宽度,花瓣长度和花瓣宽度以毫米为单位测量从各三个物种 50 个标本。四种测量类型成为输出变量。品种名称成为名义指标变量。目标是通过测量其花瓣和萼片尺寸来预测鸢尾花的品种。

您能够通过以下 DATA 步骤来将数据集加载到会话中。

 data mycas.iris;
    set sashelp.iris;
 run;

Iris数据中没有缺失值。这是很重要的,因为 annTrain 操作将从模型训练中剔除蕴含缺失数据的察看值。如果要用于神经网络剖析的输出数据蕴含大量缺失值的观测值,则应在执行模型训练之前替换或估算缺失值。因为Iris 数据不蕴含任何缺失值,所以该示例不执行变量替换。

该示例应用  annTrain 来创立和训练神经网络。神经网络依据其萼片和花瓣的长度和宽度(以毫米为单位)的输出来预测预测鸢尾花品种的函数。

 target="species"                                               
    inputs={"sepallength","sepalwidth","petallength","petalwidth"}  
    nominals={"species"}                                            
    hiddens={2}                                                     
    maxiter=1000                                                   
    seed=12345                                                 
    randDist="UNIFORM"                                            
    scaleInit=1                                                 
    combs={"LINEAR"}                                           
    targetAct="SOFTMAX"                                        
    errorFunc="ENTROPY"                                      
    std="MIDRANGE"                                             
    validTable=vldTable 

  1. 应用sampling.Stratified 操作Iris 按指标变量对输出数据进行分区 Species
  2. 将分区批示列增加  _Partind_ 到输出表。该_Partind_ 列蕴含映射到数据分区的整数值。
  3. 创立一个由 30%的表察看值组成的采样分区  Species。残余的 70%的表观测值形成第二个分区。
  4. 指定12345 要用于采样函数的随机种子值。
  5. 命名sampling_stratified 操作创立的输出表(带有新的分区信息列)iris_partitioned。如果内存中存在具备该名称的表,则现有表将被新iris_partitioned 表内容笼罩。
  6. 在源表中指定所有变量,将其传输到采样的表中。
  7. 应用新增加的分区列中的数据创立独自的表,以进行神经网络训练和验证。令训练表trnTable 为表  中所有察看iris_partitioned 值的子集,其中列的整数值  _Partind_ 等于 1。
  8. 应用新增加的分区列中的数据创立独自的表,进行神经网络训练和验证。假如验证表vldTable 是表  中所有察看iris_partitioned 值的子集,其中列的整数值  _Partind_ 等于 0。
  9. annTrain 通过应用trnTable 带有指标变量的表,来创立和训练 MLP 神经网络  Species
  10. 指定四个输出变量用作 ANN 剖析的剖析变量。
  11. 要求将指标变量  Species 视为剖析的名义变量。
  12. 为神经网络前馈模型中的每个暗藏层指定暗藏神经元的数量。例如,hiddens={2} 用两个暗藏的神经元指定一个暗藏层。
  13. 指定在寻求指标函数收敛时要执行的最大迭代次数。
  14. 指定用于执行采样和分区工作的随机种子。
  15. 要求将 UNIFORM 散布用于随机生成初始神经网络连贯权重。
  16. 指定连贯权重的比例因子,该比例是绝对于上一层中的单位数的。scaleInit 参数的默认值为  1。将参数的值设置  scaleInit 为 2 会减少连贯权重的比例。
  17. 为每个暗藏层中的神经元指定 LINEAR 组合函数。
  18. 在输入层中为神经元指定激活函数。默认状况下,SOFTMAX 函数用于名义变量。
  19. 指定误差函数来训练网络。ENTROPY 是名义指标的默认设置。
  20. 指定要在区间变量上应用的标准化。当  std 参数的值为 MIDRANGE 时,变量将标准化到 0 和 1。
  21. 指定要用于验证表的输出表名称。这样能够通过应用optmlOpt 参数来尽早进行迭代过程。
  22. 指定  Nnet_train_model 作为输出表。
  23. 启用神经算法求解器优化工具。
  24. 指定 250 次最大迭代以进行优化,并指定 1E–10 作为指标函数的阈值进行值。
  25. 启用 LBFGS 算法。LBFGS 是准牛顿办法族中的一种优化算法,它通过应用无限的计算机内存来近似 Broyden-Fletcher-Goldfarb-Shanno(BFGS)算法。
  26. 应用频率参数来设置验证选项。当  frequency 参数的值为 1 时,将在每个期间进行验证。当  frequency 为 0 时,将不进行任何验证。

输入显示数据的概述。

输入:列信息

来自 table.columnInfo 的后果

如果在输出表上应用table.fetch 命令,则能够查看输入 2 中显示的示例数据行。

输入 2:已提取的行

来自 table.fetch 的后果

如果simple.freq 在输出表上应用命令,则能够验证三种品种中每种都有 50 个观测值,输出数据表中总共有 150 个观测值,如输入 3 所示。

输入 3:物种频率

来自 simple.freq 的后果

Iris 通过胜利实现输出表的 neuralNet.annTrain 训练过程后,后果将显示训练数据迭代历史记录,其中蕴含指标函数,损失和验证误差列,如  输入 4 中所示。

输入 4:优化迭代历史记录

来自 NeuroNet.annTrain 的后果

在“迭代历史记录”表下方,您应该看到“收敛状态”表。对于胜利的神经网络模型,“收敛状态”应报告“优化已收敛”,如  输入 5 中所示。

输入 5:收敛状态

胜利的模型训练包含输入模型的摘要后果,如输入 6 所示。

输入 6:模型信息

这些后果重申了要害的模型构建因素,例如模型类型;指标变量 神经网络模型输出,暗藏和输入节点的摘要;权重和偏差参数;最终目标值;以及评分验证数据集的误分类误差。

在表格底部,您将看到由验证数据确定的最终误分类谬误百分比。如果将这个神经网络模型用作预测函数,并且您的数据来自与Iris 验证表具备雷同数据分布,则  能够预期 93%–94%的物种预测是正确的。

应用神经网络模型对输出数据进行评分

训练和验证神经网络模型后,能够应用该模型对新数据进行评分。最常见的技术是通过 SAS Enterprise Miner 或 SAS Visual Data Mining and Machine Learning 应用数据挖掘环境来生成评分输入,从而提交新数据并运行模型以对新数据评分。

领有训练的神经网络后,能够应用该神经网络模型和  annScore 操作对新的输出数据进行评分,如下所示:

 table=vldTable
    modelTable="train_model"; 

  1. 辨认训练数据表。训练数据是iris_partitioned 表中的观测值,在分区批示符列(_partind_)中的值为 0。
  2. 确认验证数据表。验证数据是iris_partitioned 表中的察看值,在分区批示符列(_partind_)中的值为 1。
  3. 对训练数据进行评分。提交输出数据,该  数据将由经过训练的神经网络模型评分。因为在此代码块中要评分的数据是模型训练数据,所以您应该冀望评分代码读取所有 105 个察看值,并以 0%谬误分类谬误预测指标变量值。模型训练数据蕴含已知的目标值,因而,在对模型训练数据进行评分时,应冀望其分类谬误为 0%。
  4. 对验证数据评分。该操作将提交输出数据,在 SAS 数据挖掘环境中,由经过训练的神经网络模型对输出数据进行评分。验证数据蕴含已知目标值,但训练算法不会读取验证数据。算法预测验证数据中每个察看值的目标值,而后将预测值与已知值进行比拟。分类误差百分比是通过从 1 中减去正确预测的分类百分比来计算的。较低的分类误差百分比通常示意模型性能更好。

验证数据蕴含 30%的原始输出数据察看值,并按指标变量 Species 分层。原始数据蕴含每个品种的 50 个察看值;验证数据(30%)蕴含三种物种中每一种的比例 15 个观测值,总共 45 个观测值。如果验证数据中的 45 个察看值中有 42 个被正确分类,则该模型的谬误分类误差为 6.67%。


最受欢迎的见解

1.r 语言用神经网络改良 nelson-siegel 模型拟合收益率曲线剖析

2.r 语言实现拟合神经网络预测和后果可视化

3.python 用遗传算法 - 神经网络 - 含糊逻辑控制算法对乐透剖析

4. 用于 nlp 的 python:应用 keras 的多标签文本 lstm 神经网络分类

5. 用 r 语言实现神经网络预测股票实例

6.R 语言基于 Keras 的小数据集深度学习图像分类

7. 用于 NLP 的 seq2seq 模型实例用 Keras 实现神经机器翻译

8.python 中基于网格搜索算法优化的深度学习模型剖析糖

9.matlab 应用贝叶斯优化的深度学习

正文完
 0