Weka中BP神经网络的实践(参数调整以及结果分析)

本来想的是以理论和实践相结合,前面讲讲神经网络,后面简单讲下在weka中怎么使用BP神经网络,可惜最后时间不够。因为是讲稿,讲的要比写的多,所以很多地方口语化和省略比较严重,大家凑合着看吧。 实践部分讲稿正文:

Weka是什么? Weka是由新西兰怀卡托大学用Java开发的数据挖掘常用软件,Weka是怀卡托智能分析系统的缩写。Weka限制在GNU通用公众证书的条件下发布,它几乎可以运行在所有操作系统平台上,包括Linux、Windows、Macintosh等。

Weka中BP神经网络的实践: Weka中的神经网络使用多层多层感知器实现BP神经网络。让我们看看weka自带的帮助文件是怎么描述的:

BP神经网络在weka中是分属这个部分的weka.classifiers.functions.MultilayerPerceptron 其是一个使用了反向传播(backpropagation)的分类器。

你可以手工构造这个网络,用算法创建它,或者两者兼备。 这个网络可以在训练的过程中被监视和修改。 网络中的节点是Sigmoid的,除了当类别(class)是数值属性(numeric)的,这时输出节点变成了unthresholded linear units。

注:sigmoid如下图

关于里面参数的配置如下图

下面我们来看各个参数的具体意义: GUI 弹出一个GUI界面。其允许我们在神经网络训练的过程中暂停和做一些修改(altering)

  • 按左键添加一个节点(node)(节点将被自动选择以保证没有其他的节点被选择)
  • 选中一个节点:左键单击
  • 连接一个节点:首先选中一个起始节点,然后点击一个结束节点或者空白区域(这将创建一个新节点并与起始节点连接)。在连接后节点的状态将保持不变。
  • 删除连接:选择一个连接的节点并且右键单击另一个节点
  • 删除节点:右键单击一个节点
  • 取消选择:左键单击节点或者在空白区域右键单击
  • 标签(label)提供的原始输入(raw input)在左边
  • 红色的节点是隐层(hidden layers)
  • 橙色的节点是输出节点(output nodes)
  • 在右边的标签展示的是输出节点表示的类别。要注意的是对于一个数值属性的类别来说,输出节点将自动的做成一个unthresholded的线性单元

更改神经网络只能在网络没有启动(running)的时候做,这条规则也适用于学习速率(learning rate)和其他在控制面板上的区域。

  • 您可以在任何时候结束网络
  • 网络在一开始是自动暂停的
  • 有一个关于网络up了和error的运行时提示。注意的是这个错误值(error value或者误差值吧)是基于网络的计算值的变化的
  • 一旦网络训练完毕它会再次停止并且等待结果是否被接受还是继续训练

注意的是如果没有设置GUI,这个网络将不需要任何的交互(interaction) autoBuild 添加网络中的连接和隐层 debug 设置为True分类器将输出额外的信息到控制台(console) decay 这将导致学习的速率的降低。其将初始的学习速率除以迭代次数(epoch number)去决定当前的学习速率。这对于停止神经网络背离目标输出有帮助,也提高了general performance。要注意的是衰退的学习速率不会显示在GUI中。如果学习速率在GUI中被改变,这将被视为初始的学习速率。 hiddenLayers 定义神经网络的隐层。这是一个正整数的列表。1 for each hidden layer.用逗号分隔。如果没有隐层就在这里输入0。这只被用于自动构建是设置了的。也有通用符 'a' = (attribs + classes) / 2, 'i' = attribs, 'o' = classes , 't' = attribs + classes learningRate Weights被更新的数量 momentum 当更新weights时设置的动量 normalizeAttributes 将正则化(normalize)属性。这个能提高网络的performance。其并不依赖于class是不是数值属性的。其也会正则化名词性(nominal)的属性(当他们被nominal to binary filter run过后),这样名词性属性是在-1和1之间 normalizeNumericClass 将会正则化class如果其实数值属性的。这也可以提高网络的performance,其将class正则化到-1和1之间。注意的是这仅仅是内部的,输出会被转换回原始的范围。 reset 这将允许网络用一个更低的学习速率复位。如果网络偏离了答案其将会自动的用更低的学习速率复位并且重新训练。只有当GUI没有被set的时候这个选项才是available的。 注意的是如果这个网络偏离了并且没有被允许去reset其将在训练的步骤失败并且返回一个错误信息 seed Seed用于初始化随机数的生成。随机数被用于设定节点之间连接的初始weights,并且用于shuffling训练集 trainingTime 训练的迭代次数。如果设置的是非0那么这个网络能够终止的比较早 validationSetSize Validation set的百分比,训练将持续直到其观测到在validation set上的误差已经一直在变差,或者训练的时间已经到了 如果validation set设置的是0那么网络将一直训练直到达到迭代的次数 validationThreshold 用于终止validation testing。这个值用于决定在训练终止前在一行内的validation set error可以变差多少次 经过上面大家对于所有的参数有了一个大概的了解。 下面我们做一个简单的实验,也让大家有个直观的认识。 我们使用的是比较简单的Iris的数据集,其数据集简要描述如下: “iris以鸢尾花的特征作为数据来源,数据集包含150个数据集,分为3类,每类50个数据,每个数据包含4个属性,是在数据挖掘、数据分类中非常常用的测试集、训练集 三类分别为:setosa, versicolor, virginica 数据包含4个独立的属性,这些属性变量测量植物的花朵,比如萼片和花瓣的长度等.” 使用orange canvas做出来的统计如下:

我们设置其为十次十折(cross-validation folds 10) 初始的网络如图

简单起见我们让其自动训练了,其分类结果的输出如下(篇幅起见只写出一部分): === Classifier model (full training set) === Sigmoid Node 0 Inputs Weights Threshold -0.8317075956319961 Node 3 0.03364022925166845 Node 4 2.8158475746401312 Node 5 -2.9282184592731384 这以部分主要显示各个神经元的一些weight和threshold。可以看到这里对应的是右上角的黄色节点,其weight分布对应的node3 4 5是左边的红色隐层节点的weight Sigmoid Node 3 Inputs Weights Threshold 0.050063835158229715 Attrib sepallength -0.22160556669500697 Attrib sepalwidth -0.03621419764855014 Attrib petallength -0.3759501432512545 Attrib petalwidth -0.5363064140945599 这个显示的是对应的是左边绿色输入向量的weight === Stratified cross-validation === === Summary === Correctly Classified Instances 146 97.3333 % Incorrectly Classified Instances 4 2.6667 % Kappa statistic 0.96 Mean absolute error 0.0327 Root mean squared error 0.1291 Relative absolute error 7.3555 % Root relative squared error 27.3796 % Total Number of Instances 150 这一部分显示的是其各个evaluation的指标,可以看到分类效果还是不错的。 后面还有一些TP FP 准确率 召回率 F-Measure和ROC Area等指标的展示,以及 === Confusion Matrix === a b c <-- classified as 50 0 0 | a = Iris-setosa 0 48 2 | b = Iris-versicolor 0 2 48 | c = Iris-virginica 在这个矩阵我们可以看出Iris-versicolor Iris-virgca之间有些混淆

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2016-01-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

【深度学习】图片风格转换应用程序:使用CoreML创建Prisma

WWDC 2017让我们了解了苹果公司对机器学习的看法以及它在移动设备上的应用。CoreML框架使得将ML模型引入iOS应用程序变得非常容易。 ? 大约一年前,...

4008
来自专栏WeaponZhi

使用 Octave 来学习 Machine Learning(一)

阅读本篇大概需要 5 分钟。 前言 各位小伙伴如果是通过 Coursera 上吴恩达的机器学习视频来学习的话,一定听到过 Octave 的大名了,吴恩达强烈推荐...

4467
来自专栏Jack-Cui

Caffe学习笔记(三):cifar10_quick_train_test.prototxt配置文件分析

运行平台: Ubuntu14.04     在上篇笔记中,已经记录了如何进行图片数据格式的转换和生成txt列表清单文件。本篇笔记主要记录如何计算图片数据的均值和...

2478
来自专栏Python小屋

Python绘制时间序列数据的时序图、自相关图和偏自相关图

时序图、自相关图和偏相关图是判断时间序列数据是否平稳的重要依据。 本文涉及的扩展库numpy、pandas、statsmodels一般可以使用pip进行在线安装...

2264
来自专栏IT派

如何用 OpenCV、Python 和深度学习实现面部识别?

这篇文章首先将简单介绍下基于深度学习的面部识别的工作原理,以及“深度度量学习”(deep metric learning)的概念。接下来我会帮你安装好面部识别需...

743
来自专栏人工智能LeadAI

TF.Learn 手写文字识别

minist问题 计算机视觉领域的Hello world 给定55000个图片,处理成28*28的二维矩阵,矩阵中每个值表示一个像素点的灰度,作为feature...

3426
来自专栏用户2442861的专栏

人脸检测dlib, mtcnnx对比,FDDB测试对比

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haluoluo211/article/d...

753
来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

13行代码实现最快速最高效的积分图像算法。

  研究图像到一定程度的人,应该都对积分图像有所了解,大家在百度或者google中都可以搜索到大量的相关博客,我这里不做多介绍。用积分图也确实能解决很多实际的问...

2598
来自专栏企鹅号快讯

教你快速使用OpenCV/Python/dlib进行眨眼检测识别!

摘要: 图像识别的新思路:眼睛纵横比,看看大牛如果用这种思路玩转识别眨眼动作! ? 今天我们来使用面部标志和OpenCV 检测和计算视频流中的眨眼次数。为了构建...

31510
来自专栏大数据挖掘DT机器学习

Tensorflow深度学习LSTM实现的小说撰写预测damo

最近,在研究深度学习方面的知识,结合Tensorflow,完成了基于lstm的小说预测程序demo。 lstm是改进的RNN,具有长期记忆功能,相对于RNN,增...

3545

扫描关注云+社区