核心函数介绍

管理员账号

2017-04-06

实现神经网络的核心函数是 nnet(),它主要用来建立单隐藏层的前馈人工神经网络模型,同时也可以用它来建立无隐藏层的前馈人工神经网络模型(也就是感知机模型)。

函数 nnet()的具体使用格式有两种形式,下面分别介绍该函数的两种使用方式。第 1 类使用格式如下。

nnet(formula, data, weights, subset, na.action, contrasts = NULL)

其中,formula代表的是函数模型的形式。formula的书写规则与多元线性回归时所用到的类似。参数data给出的是一个数据框,formula中指定的变量将优先从该数据框中选取。参数weights代表的是各类样本在模型中所占的权重,该参数的默认值为1,即各类样本按原始比例建立模型。参数subset 主要用于抽取样本数据中的部分样本作为训练集,该参数所使用的数据格式为一个向量,向量中的每个数代表所需要抽取样本的行数。参数na.action指定了当发现有NA数据时将会采取的处理方式。

函数nnet()的第2类使用格式如下。

nnet(x, y, weights, size, Wts, mask,
     linout = FALSE, entropy = FALSE, softmax = FALSE,
     censored = FALSE, skip = FALSE, rang = 0.7, decay = 0,
     maxit = 100, Hess = FALSE, trace = TRUE, MaxNWts = 1000,
     abstol = 1.0e-4, reltol = 1.0e-8)

其中,x为一个矩阵或者一个格式化数据集。该参数就是在建立人工神经网络模型中所需要的自变量数据。参数y是在建立人工神经网络模型中所需要的类别变量数据。但在人工神经网络模型中,类别变量格式与其他函数中的格式有所不同。这里的类别变量y是一个由函数class.ind()得到的类指标矩阵。

在第2类使用格式中的参数weights的使用方式及用途与第1类使用格式中的参数weights一样。size代表的是隐藏层中的节点个数。通常,该隐藏层的节点个数应该为输入层节点个数的1.2~1.5倍,即自变量个数的1.2~1.5倍。如果将参数值设定为0,则表示建立的模型为无隐藏层的人工神经网络模型。

参数rang指的是初始随机权重的范围是[-rang, rang]。通常情况下,该参数的值只有在输入变量很大的情况下才会取到0.5左右,而一般对于确定该参数的值是存在一个经验公式的,即要求rang与x的绝对值中的最大值的乘积大约等于1。

参数decay是指在模型建立过程中,权重值的衰减精度,默认值为0,当模型的权重值每次衰减小于该参数值时,模型将不再进行迭代。参数maxit控制的是模型的最大迭代次数,即在模型迭代过程中,若一直没有达到停止迭代的条件,那么模型将会在迭代达到该最大次数后停止迭代,这个参数的设置主要是为了防止模型陷入死循环,或者是一些没必要的迭代。

前面已经提到了函数class.ind(),该函数也位于nnet软件包中。它是用来对数据进行预处理的。更具体地说,该函数是用来对建模数据中的结果变量进行处理的,也就是前面所说的那样,模型中的y必须是经由class.ind()处理而得的。该函数对结果变量的处理,其实是通过结果变量的因子变量来生成一个类指标矩阵。它的基本格式如下。

class.ind(cl)

易见,函数中只有一个参数,该参数可以是一个因子向量,也可以是一个类别向量。这表明其中的cl可以直接是需要进行预处理的结果变量。为了更好地了解该函数的功能,不妨来看看该函数定义的源代码。

class.ind <- function(cl)
{
    n <- length(cl)
    cl <- as.factor(cl)
    x <- matrix(0, n, length(levels(cl)) )
    x[(1:n) + n*(unclass(cl)-1)] <- 1
    dimnames(x) <- list(names(cl), levels(cl))
    x
}

所以该函数主要是将向量变成一个矩阵,其中每行还是代表一个样本。只是将样本的类别用0和l来表示,即如果是该类,则在该类别名下用l表示,而其余的类别名下用0表示。

读者评论

相关博文

  • 应用分析实践

    吴倩雪 2017-04-06

    下面以费希尔的鸢尾花数据为例,演示利用nnet软件包提供的函数进行基于人工神经网络的数据挖掘方法。我们也已经知道,nnet()函数在建立支持单隐藏层前馈神经网络模型的时候有两种建立方式,即根据既定公式建立模型和根据所给的数据建立模型。接...

    吴倩雪 2017-04-06
    362 0 0 0