Advertisement

How to Train a Neural Network in RapidMiner: From Scrat

阅读量:

作者:禅与计算机程序设计艺术

1.简介

过去十个年头里人工智能领域不断涌现出了大量新兴技术如机器学习深度学习强化学习等其理论基础和技术实现方法经历了日新月异的发展现已成为了当前研究领域的主流方向之一得益于云计算平台与AI开发框架的进步以及训练神经网络模型复杂度的降低和效率提升带来的便利性越来越多的企业与组织开始利用云计算平台构建人工智能系统以实现业务需求自动化与精准化

对于缺乏相关经验或刚入门的新手来说

RapidMiner是一款基于Java语言开发的集成化平台。该软件整合了数据分析与可视化功能。它不仅提供了一个直观的操作界面,在使用起来时能够极大地提升工作效率;该软件支持多种数据源类型(包括关系型数据库、JSON文件以及Excel表格等),能够方便地导入并清洗这些数据;用户可以通过拖放操作来配置算法并执行运算,在某种程度上实现了复杂的数据分析任务;此外,在上述核心功能之外,RapidMiner还集成了许多流行的人工智能技术框架,如TensorFlow框架及其相关技术方案;同时,该软件还内置了许多经典的机器学习算法模型,帮助用户快速构建实用的应用系统;由于其具有良好的易用性和强大的跨平台兼容性,RapidMiner在各行业领域中得到了广泛应用

本文主要通过以下两个实践案例进行阐述:

1.构建一个简单的多层感知机(MLP)神经网络模型;

2.使用RapidMiner平台实现神经网络模型的训练和部署。

第1个案例将从头开始用Python开发一个基本的MLP神经网络分类器,并深入比较其算法实现路径与Keras接口的不同实现路径

第二个案例将介绍如何利用RapidMiner构建一个神经网络分类器,并将其部署至生产环境。该过程涵盖数据准备、模型训练、模型评估和模型推断等关键步骤,并最终提供一个完整的实施流程实例。

2.背景介绍

当下,深度学习技术正在迅速发展成机器学习的重要领域之一.基于大规模数据的深入分析与优化技术,在多个任务中实现了显著提升.应用范围极为广阔的这一技术,涵盖图像识别.文本分类以及无监督学习等多个方向.

ANNs被视为深度学习体系中一个关键组成部分,在机器学习领域具有重要地位。该模型由多个层级组成:包括输入级联模块、包含多个隐含特征提取器的隐藏层次以及负责最终决策的输出模块。每个节点都通过线性加权函数进行计算,并结合激活函数和偏置值进行信息传递。其中许多节点与外界直接相连并发挥作用,在整个神经网络中扮演着重要角色

在实际应用场景中,在一般情况下会首先进行一个具有特定架构的神经网络的构建工作;随后通过利用训练数据集不断优化其权重参数直至达到预期性能水平;完成模型训练后将其权重参数保存为模型文件并应用于其他数据集处理;此外还可以借助反向传播算法计算梯度进而对模型参数进行进一步优化以提升其适应能力

为演示目的,本文基于RapidMiner平台构建神经网络分类器,并应在使用前了解RapidMiner的操作指南。

3.基本概念术语说明

3.1 MLP神经网络

多层感知机主要由人工神经元构成,并以其全连接的特性著称。它被广泛认为是非线性分类任务的重要工具之一。每个MLP都包含多个隐藏层结构,在其基本架构中通常包括三个隐藏层。其架构通常包含三个隐藏层

输入层通常位于网络最外层,并接收外部数据作为输入特征;中间各隐藏层通过多条连接线与前一层相连;每个隐藏单元包含多个神经元节点;最后的输出层则负责整合各隐藏单元的信息并生成最终预测结果。

3.2 损失函数

在神经网络的训练过程中(段落数量不变),我们致力于确定一组合适的参数设置(同义词替换),以便使输出结果与训练样本尽可能吻合(句式变换)。通常情况下(被动语态转换),损失函数能够量化预测结果与真实标签之间的差异程度(词汇替换)。当损失函数值较小时(主动变被动),这表明模型预测结果与实际标签之间存在较小的差异(语序调整)。相反地,在损失函数较大的情况下(对比结构),模型对数据的拟合程度较好;而在损失函数较大的情况下(条件倒置),则意味着模型预测结果偏离实际标签较为明显。我们的目标则是寻求一组参数配置(主谓一致),使得整个系统的损失函数达到全局最小值(同义词替换)。

常见的损失函数包含均方误差(MSE)与交叉熵(CE)等技术。

3.3 优化器

优化器(Optimizer)负责调整网络参数以使损失函数最小化。不同优化器采用多样化的算法策略以寻求全局最优解的目的。常见的优化器类型包括梯度下降法(Gradient Descent)、动量法(Momentum)以及自适应动量估计法(Adaptive Moment Estimation)等方法。

4.核心算法原理和具体操作步骤以及数学公式讲解

4.1 激活函数

The activation function (activation function), also known as the activation function in artificial neural networks, serves as a nonlinear component that introduces nonlinearity into the model. It plays a crucial role in alleviating issues such as gradient vanishing and gradient exploding. Commonly used activation functions include the sigmoid function, the rectified linear unit (ReLU) function, and the hyperbolic tangent (tanh) function.

Sigmoid函数

sigmoid函数是一种S型曲线,并且其输出值位于0到1之间。该函数的变化幅度较为温和,在神经网络中被广泛采用作为激活函数。

ReLU函数

ReLU是一种改进版本的激活函数,在设计时特别针对负值进行了优化调整。这种改进主要体现在其对负值抑制能力上的提升。在数学上表示为relu(x)=max(x,0),该函数在其定义域[0, +∞)上呈现连续性特征,在神经网络架构中扮演的角色与Sigmoid类似但更具优势的是它能够有效避免梯度消失问题(Gradient Vanishing)。然而,在输入数值极度偏小时(即负值非常大的情况下),ReLU的表现会出现一定的缺陷:当输入数值极度偏小时(即负值非常大的情况下),它的输出会趋近于零并导致梯度消失问题)。这种优化特性使得ReLU激活函数在卷积神经网络中的二维池化层中得到了广泛应用

Tanh函数

双曲正切函数的输出取值范围为-1到1之间,并且类似于sigmoid函数的形式。因此也可以用作激活函数的一种选择。

4.2 正则化项

Regularization term refers to substituting a complicated objective function with the norm of the parameter vector, aiming for relatively small values. Taking this approach can help reduce overfitting phenomena, enhancing model performance on training data.

常用的正则化项包括L1正则化、L2正则化和Dropout正则化等。

L1正则化

L1正则化即为对绝对值较大的参数施加惩罚;换句话说,
lasso回归可用于实现这一目标。
作为统计学习方法之一,
lasso回归倾向于通过一个变量来表达目标变量。
为了减少模型复杂度,
我们对被施加惩罚的项施加绝对值之和作为惩罚。
因此,在神经网络中应用lasso回归有助于去除不必要的参数。

L2正则化

L2正则化是通过惩罚参数的平方和来实现对模型复杂度的控制;这种机制能够有效防止模型出现过拟合现象;其应用可通过岭回归技术实现。岭回归作为一种统计学习方法,在数据特征之间存在多重共线性时具有显著优势;它引入了一个用于控制模型复杂度的正则化项;旨在通过平方和的形式约束参数范围;这种策略能够有效避免因参数过大导致的问题;因此,在神经网络中应用岭回归有助于简化模型结构而不牺牲性能。

Dropout正则化

Dropout正则化是一种在训练过程中随机移除部分神经元的方法(即阻止这些神经元参与计算过程),从而有效地抑制过拟合现象的发生。该技术通过调节神经元之间的连接强度来降低网络的整体复杂性,并且能够进一步应用于在神经网络中减少模型参数数量以提高泛化能力

4.3 超参数调优

模型调参参数即用于构建机器学习模型所需的调节变量(Hyperparameter),它直接决定了模型架构及训练流程的相关因素。优化配置的过程通常需要经过系统性的调试以确保最佳性能表现,在提升预测准确性方面发挥着关键作用。

超参数涉及学习率、批量大小、网络结构、激活函数以及正则化项等多个方面;这些因素的确定需要基于实验设计进行周密规划的基础工作。超参数的选择主要依据验证集的情况,在实际应用中通常由测试数据来决定其来源。

常见的超参数优化手段涵盖了网格搜索策略、随机搜索技术以及贝叶斯优化方法等。

4.4 分类问题的常用模型

常见的一些神经网络结构被应用于分类任务中,其中包括多层感知机(MLP)、卷积神经网络(CNN)、循环神经网络(RNN)以及长短时记忆网络(LSTM)等。

MLP模型

MLP模型(全称多层感知机)是神经网络体系中的主要架构之一。该结构由输入层、隐藏层和输出层三个部分组成,并且每个部分都包含若干个神经元节点。具体而言,在MLP模型中:首先由输入层接收外部信号作为原始数据;随后将外部信号经过处理并映射至隐藏层中进行特征提取;接着通过非线性激活函数对输入信号进行处理,并传递给输出结构;最后在输出层面完成特征映射至目标空间以实现分类任务。如图所示:

MLP模型的一般结构如下:

复制代码
    model = Sequential()
    model.add(Dense(units=hidden_units, activation='relu', input_dim=input_shape))
    model.add(Dense(units=output_units, activation='softmax'))

Dense()函数用于构建一个全连接层,在分类问题中将其激活函数设置为'softmax'以实现多类别概率预测。该层通过将输入数据与前一层的所有神经元进行线性组合来生成输出特征,并通过激活函数对结果进行非线性变换以增强模型的表达能力。具体而言,在此实现中:units参数代表该全连接层所包含的人工神经元数量;activation参数决定了传递到下一层的信号类型;而input_dim则指定了当前这一层从上一层接收到的特征向量维度。

MLP模型的训练过程和推断过程与大多数其他神经网络相似,仅需通过调整参数来优化性能

CNN模型

该模型属于神经网络体系中的一种变体形式。其通过执行卷积操作从输入图像中提取局部特征,并随后通过全连接层将这些特征映射到输出空间。相较于传统神经网络结构,在于其采用卷积核这一特性使其具备识别不同尺寸的图案能力,并且能够高效地通过滑动窗口的方式对图像进行扫描。

CNN模型的一般结构如下:

复制代码
    model = Sequential()
    model.add(Conv2D(filters=nb_filters, kernel_size=(filter_length, filter_width), strides=strides, padding=padding, activation=activation, input_shape=input_shape))
    model.add(MaxPooling2D(pool_size=pool_size))
    model.add(Flatten())
    model.add(Dense(units=hidden_units, activation=activation))
    model.add(Dense(units=output_units, activation='softmax'))

该函数用于构建卷积层, 其功能是对输入图像执行卷积操作. 该层包含以下关键参数: filters, 代表滤波器的数量; kernel_size, 指定滤波器的空间尺寸; 步长由strides变量控制; 填充策略由padding参数决定; 激活函数由activation参数指定; 输入图像的尺寸由input_shape定义. 当用于分类任务时,默认采用Softmax激活函数.

MaxPooling2D()用于添加最大池化层。该操作的目的是通过最大值池化方法,在特定区域中选择最大的数值作为输出结果。

Flatten()函数用来将多维数组压平为一维数组,方便全连接层处理。

CNN模型的训练过程和推断过程与普通神经网络具有相似性;主要在于需要对模型参数进行优化配置。

RNN模型

作为一种特殊的神经网络结构体式框架式模型(Recurrent Neural Network),其核心特征在于其独特的循环机制使其能够持续性地记忆之前的输入信息,并基于此做出更加精准的后续数据处理决策。该模型与传统神经网络的主要区别在于引入了时间序列概念这一创新设计元素,在这种架构下可以更好地模拟人类大脑的空间记忆能力以及时间维度的数据关联性

RNN模型的一般结构如下:

复制代码
    model = Sequential()
    model.add(Embedding(input_dim=vocab_size, output_dim=embedding_dims, mask_zero=True, trainable=False))
    model.add(GRU(units=hidden_units, return_sequences=True, dropout=dropout, recurrent_dropout=recurrent_dropout))
    model.add(TimeDistributed(Dense(units=num_classes)))

该函数用于将输入序列中的每个词转换成固定长度的向量表示。当mask_zero参数设为True时,则将输入序列的第一个位置设为零值。如果 trainable 参数被设定为False,则该模型无法对词向量进行微调。

GRU模块用于添加一个门控循环单元(Gated Recurrent Unit, GRU),负责将输入进行非线性变换并维持状态信息。
该return_sequences参数设为True时会返回每个时间步的输出。
该dropout参数用于控制单元输出层的dropping概率。
该recurrent_dropout参数用于控制单元状态层的dropping概率。

TimeDistributed()函数用于将输出展平成时间维度,并有助于后续全连接层的处理。

RNN模型的训练与推断过程与其他神经网络相似,在某些情况下仅需对参数进行微调即可完成任务

LSTM模型

LSTM网络(Long Short Term Memory, 长短期记忆)作为Recurrent Neural Networks(RNNs)的一种衍生形式,在处理具有持久的前后文关系的任务时表现出色。如图所示。

LSTM模型的一般结构如下:

复制代码
    model = Sequential()
    model.add(Embedding(input_dim=vocab_size, output_dim=embedding_dims, mask_zero=True, trainable=False))
    model.add(Bidirectional(LSTM(units=hidden_units, return_sequences=True, dropout=dropout, recurrent_dropout=recurrent_dropout)))
    model.add(TimeDistributed(Dense(units=num_classes)))

Bidirectional()函数用于构建一个双向LSTM网络层,在该层中模型能够同时更新前后两个方向的状态以解决长短期记忆难以协调的问题

长短期记忆网络的训练与预测过程与一般神经网络相似,主要在于它们需要对参数进行微调.

5.具体代码实例和解释说明

5.1 使用Keras接口实现一个MLP分类器

这里我们基于Keras框架构建一个简单的多层感知机分类器的具体步骤如下:

  1. 数据准备:从样本库中提取样本,并按照一定的比例进行分类处理。
  2. 模型设计:构建一个基于MLP的模型架构,并指定激活函数。
  3. 模型编译:设置损失函数、优化器和度量指标等超参数。
  4. 模型训练:利用训练集对模型进行优化,并根据反馈调整学习参数。
  5. 模型评估:通过验证集的数据对模型性能进行全面评估。
  6. 模型预测:利用测试集对未知样本进行预测分析.
复制代码
    import numpy as np
    from keras import layers
    from keras import models
    from keras.datasets import mnist
    from keras.utils import to_categorical
    
    
    # 加载数据集
    (X_train, y_train), (X_test, y_test) = mnist.load_data()
    
    # 数据预处理
    X_train = X_train.reshape((60000, 28*28)).astype('float32') / 255
    X_test = X_test.reshape((10000, 28*28)).astype('float32') / 255
    y_train = to_categorical(y_train)
    y_test = to_categorical(y_test)
    
    # 分割数据集
    val_split = 5000
    X_val = X_train[:val_split]
    y_val = y_train[:val_split]
    X_train = X_train[val_split:]
    y_train = y_train[val_split:]
    
    # 定义模型
    model = models.Sequential()
    model.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))
    model.add(layers.Dense(10, activation='softmax'))
    
    # 配置模型参数
    model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
    
    # 训练模型
    history = model.fit(X_train, y_train,
                    epochs=10,
                    batch_size=128,
                    validation_data=(X_val, y_val))
    
    # 评估模型
    score = model.evaluate(X_test, y_test, verbose=0)
    print('Test loss:', score[0])
    print('Test accuracy:', score[1])
    
    # 预测结果
    predictions = model.predict(X_test)
    predicted_labels = np.argmax(predictions, axis=-1)
    true_labels = np.argmax(y_test, axis=-1)
    errors = predicted_labels - true_labels
    error_rate = sum([abs(err) for err in errors])/len(errors)
    print('Error rate:', error_rate)

5.2 使用RapidMiner实现一个神经网络分类器

在本节中,我们将详细阐述如何利用RapidMiner构建神经网络分类器的过程,涵盖数据预处理阶段、模型训练阶段、模型验证阶段以及模型部署阶段的具体操作步骤。

5.2.1 数据准备

RapidMiner提供多种数据源,并非仅限于单一类型的数据存储结构。例如,在 RapidMiner 中你可以轻松地拖放所需的数据导入界面中的相关工具进行导入操作。然而,在大多数应用场景下,默认导入的数据都需要经过清洗与预处理流程才能满足后续建模训练的需求条件。因此在实际应用中发现, 数据准备过程往往决定了整个建模项目的成功几率, 其重要性不容忽视

在此背景下

复制代码
    {"label": "0", "pixelData": [[],[],[]]} // 省略部分像素数据
    {"label": "1", "pixelData": [[],[],[]]} // 省略部分像素数据
    ... // 省略剩余数据

数据清洗的第一步就是将JSON数据转换为RapidMiner可读的支持解析的数据格式。借助RapidMiner的JSON分隔符编辑器(处理工具),我们可以将JSON字符串解析为明确的列名和值。

复制代码
    {"label" : "0","pixelData":[[[0,0],[0,1]],[[1,0],[1,1]]]}

可以解析为:

label pixelData
0 [[0,0],[0,1]]
... ...

之后,可以使用RapidMiner的图像转换器,将像素数据转换为图像。

5.2.2 模型训练

在执行过程中包含了多个关键环节:首先是数据导入步骤(即从外部数据源读取数据),随后是必要的数据预处理工作(如清洗和转换原始数据),接着是构建模型的阶段(即定义算法参数),随后是优化配置的环节(即配置超参数),然后是实际的训练过程(即用训练集进行学习),最后是评估性能的阶段(即用测试集验证效果)。该平台集成了多种强大的工具箱(如导入器模块),涵盖了从数据分析到结果应用的完整解决方案。通过系统化的操作流程可实现完整的机器学习建模工作。

数据导入

第一步是导入数据集。手写数字识别的数据集现已准备就绪,则无需担心。以下是详细的操作步骤:

通过工具栏左侧的"导入"功能,在弹出的"导入数据"子菜单中执行操作。
选择JSON格式的文件进入下一步骤。
指定文件路径位置以便后续操作顺利展开。
将选定的文件命名为"digits"以便后续使用。

数据预处理

主要步骤包括将像素数据转换为向量。借助RapidMiner提供的特征工程组件,能够实现输入数据从图像形式转换为向量化表示。

打开'工具箱'的位置通常在导航栏右侧侧,在此位置附近查找并定位到位于'特征工程'分类中的特定组件。
在工作区左侧侧找到并点击处于'digits'数据集之下的机器学习模型选项卡中对应的部分。
在机器学习模型选项卡中找到并选择'rnn-lstm-lstm-rnn'结构选项卡下方的预训练模型部分。
从'rnn-lstm-lstm-rnn-mlp-mlp-rnn-mlp-mlp-rnn-mlp-mlp-rnn-mlp-mlp-rnn-mlp-mlp-rnn-mlp-mlp-rnn-mlp-mlm-lstm-lstm-lstm-lstm-lstm-lstm-lstm-lstm-'结构选项卡下方选择预训练好的模型文件进行加载操作。
通过右键点击该文件并选择从该位置加载选项以完成模型加载流程。

模型定义

该系统涉及从数据准备到算法应用的多个关键环节:包括从数据预处理到特征提取的模块化设计;通过灵活的架构配置实现对不同问题的适应性;以及基于预训练权重的快速调优方案。其中人工智能组件库为该平台提供了丰富的人工智能组件库,并支持多种主流深度学习框架的集成与部署。

  1. 访找资源库中的"机器学习"分类文件夹下的"神经网络"子目录进行定位。
  2. 在组件列表中执行拖放操作将"多层感知机(MLP)"组件放置于画布区域。
  3. 对选中组件执行右键点击操作以调用属性设置界面。
  4. 在属性设置界面中将"名称"字段参数值设定为字符串形式的"mlpModel"。
模型编译

模型编译的目的是配置模型参数。包括设置损失函数、优化器、度量指标等。

  1. 配置"训练器"属性中的"损失函数项"为"Categorical Crossentropy损失函数项"。
  2. 配置"训练器"属性中的"优化算法"为RMSprop。
  3. 配置评估器属性中的度量指标为准确性。
模型训练

模型训练的过程即训练过程。

调用Python编程环境中的机器学习框架中的交互界面组件中的特定功能模块——"训练模型"组件进行交互操作.
配置该组件中输入字段中的"训练数据"字段的值设为空白字符串.
配置该组件中输入字段中的"标签"字段的值设为空白字符串.
配置该组件中输入字段中的"验证数据"字段的值设为空白字符串.
配置该组件中输入字段中的"验证标签"字段的值设为空白字符串.
定义循环次数参数变量赋值整数值十.
设定批量大小变量赋值整数一百二十八.
定位待预测的数据集源设为空白字符串.
单击运行按钮完成配置流程.

模型评估

模型评估的目的是衡量模型在验证数据上的效果。

  1. 启动'评估模型'对话框。
  2. 指定训练模型为mlpModel。
  3. 指定验证数据为digits。
  4. 指定验证标签为label。
  5. 单击执行按钮。
  6. 查看评估结果。

5.2.3 模型推断

模型推断的过程是将未知数据送入模型,得到模型的预测结果。

启动‘推断模型’对话框界面,并将参数值设为'digits';接着设定预测字段名为'label';随后配置训练参数值设为'mlpModel';最后执行操作流程以完成整个过程。

全部评论 (0)

还没有任何评论哟~