rxNeuralNet:神经网络
用于回归建模以及二元和多类分类的神经网络。
用法
rxNeuralNet(formula = NULL, data, type = c("binary", "multiClass",
"regression"), numHiddenNodes = 100, numIterations = 100,
optimizer = sgd(), netDefinition = NULL, initWtsDiameter = 0.1,
maxNorm = 0, acceleration = c("sse", "gpu"), miniBatchSize = 1,
normalize = "auto", mlTransforms = NULL, mlTransformVars = NULL,
rowSelection = NULL, transforms = NULL, transformObjects = NULL,
transformFunc = NULL, transformVars = NULL, transformPackages = NULL,
transformEnvir = NULL, blocksPerRead = rxGetOption("blocksPerRead"),
reportProgress = rxGetOption("reportProgress"), verbose = 1,
computeContext = rxGetOption("computeContext"),
ensemble = ensembleControl(), ...)
参数
formula
rxFormula 中描述的公式。 MicrosoftML 目前不支持交互项和 F()
。
data
指定 .xdf 文件或数据帧对象的数据源对象或字符串。
type
表示快速树类型的字符串:
"binary"
用于默认的二元分类神经网络。"multiClass"
用于多类分类神经网络。"regression"
用于回归神经网络。
numHiddenNodes
神经网络中的默认隐藏节点数。 默认值为 100。
numIterations
对完整训练集执行的迭代次数。 默认值为 100。
optimizer
一个列表,用于指定 sgd
或 adaptive
优化算法。 此列表可使用 sgd 或 adaDeltaSgd 创建。 默认值是 sgd
。
netDefinition
神经网络结构的 Net# 定义。 有关 Net# 语言的详细信息,请参阅 Reference Guide
initWtsDiameter
设置初始权重直径,该直径指定为初始学习权重采用的值范围。 权重在此范围内随机初始化。 默认值为 0.1。
maxNorm
指定用于约束每个隐藏单元的传入权重向量范数的上限。 在最大输出神经网络以及训练产生无限权重的情况下,此参数非常重要。
acceleration
指定要使用的硬件加速类型。 可能的值为“sse”和“gpu”。 对于 GPU 加速,建议使用大于 1 的 miniBatchSize 值。 如果要使用 GPU 加速,则需要执行其他手动设置步骤:
- 下载并安装 NVidia CUDA Toolkit 6.5 (
CUDA Toolkit
)。 - 下载并安装 NVidia cuDNN v2 库 (
cudnn Library
)。 - 通过调用
system.file("mxLibs/x64", package = "MicrosoftML")
查找 MicrosoftRML 包的 libs 目录。 - 将 CUDA Toolkit 6.5 中的 cublas64_65.dll、cudart64_65.dll 和 cusparse64_65.dll 复制到 MicrosoftML 包的 libs 目录中。
- 将 cuDNN v2 库中的 cudnn64_65.dll 复制到 MicrosoftML 包的 libs 目录中。
miniBatchSize
设置微型批大小。 建议的值介于 1 到 256 之间。 仅在加速为 GPU 时才使用该参数。 将此参数设置为较高的值可以提高训练速度,但可能会影响准确性。 默认值为 1。
normalize
指定使用的自动规范化类型:
"auto"
:如果需要规范化,则会自动执行。 这是默认选项。"no"
:不执行任何规范化。"yes"
:执行规范化。"warn"
:如果需要规范化,则会显示一条警告消息,但不执行规范化。
规范化将不同的数据范围重新缩放为标准规模。 特征缩放可确保数据点之间的距离成比例,使各种优化方法(如梯度下降)的收敛速度更快。 如果执行规范化,则使用MaxMin
规范化程序。 它对区间 [a, b] 中的值进行规范化,其中-1 <= a <= 0
、0 <= b <= 1
并且b - a = 1
。 此规范化程序通过将 0 映射到 0 来保持稀疏度。
mlTransforms
指定在训练前要对数据执行的 MicrosoftML 转换的列表;如果不需要执行任何转换,则指定为 NULL
。 有关支持的转换,请参阅 featurizeText、categorical 和 categoricalHash。 这些转换在任何指定的 R 转换之后执行。 默认值是 NULL
。
mlTransformVars
指定要在 mlTransforms
中使用的变量名称的字符向量;如果不使用任何变量名称,则指定为 NULL
。 默认值是 NULL
。
rowSelection
使用数据集中的逻辑变量名称(带引号)或通过使用数据集中的变量的逻辑表达式指定模型要使用的数据集中的行(观察值)。 例如,rowSelection = "old"
将仅使用变量 old
的值为 TRUE
的观察值。 rowSelection = (age > 20) & (age < 65) & (log(income) > 10)
仅使用 age
变量值介于 20 和 65 之间且 income
变量的 log
值大于 10 的观察值。 在处理任何数据转换之后执行行选择(请参阅参数 transforms
或 transformFunc
)。 与所有表达式一样,可以使用表达式函数在函数调用之外定义 rowSelection
。
transforms
表示第一轮变量转换的窗体 list(name = expression, ``...)
的表达式。 与所有表达式一样,可以使用表达式函数在函数调用之外定义 transforms
(或 rowSelection
)。
transformObjects
一个命名列表,其中包含可由 transforms
、transformsFunc
和 rowSelection
引用的对象。
transformFunc
变量转换函数。 有关详细信息,请参阅 rxTransform。
transformVars
转换函数所需的输入数据集变量的字符向量。 有关详细信息,请参阅 rxTransform。
transformPackages
一个字符向量,用于指定将提供和预加载以在变量转换函数中使用的附加 R 包(在 rxGetOption("transformPackages")
中指定的包之外)。 例如,在 RevoScaleR 函数中通过 transforms
和 transformFunc
参数显式定义的那些包,或者通过 formula
或 rowSelection
参数隐式定义的包。 transformPackages
参数也可能为 NULL
,表示未预加载 rxGetOption("transformPackages")
以外的包。
transformEnvir
用户定义环境,充当内部开发并用于变量数据转换的所有环境的父级。 如果为 transformEnvir = NULL
,则改用具有父级 baseenv()
的新“哈希”环境。
blocksPerRead
为从数据源读取的每个数据块指定要读取的块数。
reportProgress
一个整数值,指定行处理进度的报告级别:
0
:不报告进度。1
:打印并更新已处理的行数。2
:报告已处理的行数和计时。3
:报告已处理的行数和所有计时。
verbose
一个整数值,指定需要的输出量。 如果为 0
,则计算期间不会打印详细输出。 从 1
到 4
的整数值表示提供的信息量逐步增加。
computeContext
设置执行计算的上下文,使用有效的 RxComputeContext 指定。 目前支持本地和 RxInSqlServer 计算上下文。
ensemble
控制用于集成的参数。
...
要直接传递到 Microsoft 计算引擎的其他参数。
详细信息
神经网络是一类受人脑启发的预测模型。 神经网络可以表示为加权有向图。 图中的每个节点都称为神经元。 该图中的神经元按层排列,其中一个层中的神经元通过加权边(权重可以为 0 或正数)连接到下一层中的神经元。 第一层称为输入层,输入层中的每个神经元对应其中一个特征。 该函数的最后一层称为输出层。 因此,对于二元神经网络,它包含两个输出神经元,每个类别对应一个,其值是属于每个类别的概率。 剩余的层称为隐藏层。 隐藏层和输出层中神经元的值是通过计算前一层中神经元值的加权和并将激活函数应用于该加权和来设置的。 神经网络模型由它的图结构(即隐藏层数和每个隐藏层中的神经元数)、激活函数的选择以及图边的权重来定义。 神经网络算法尝试根据训练数据了解边上的最佳权重。
众所周知,神经网络用于深入学习和建模图像识别等复杂问题,不过我们也可以轻松调整神经网络来解决回归问题。 可以将任何类别的统计模型视为神经网络,只要它们使用自适应权重并且可估计其输入的非线性函数。 神经网络回归非常适合解决相对传统的回归模型无法解决的那些问题。
值
rxNeuralNet
:具有已训练模型的 rxNeuralNet
对象。
NeuralNet
:神经网络训练程序的类 maml
的学习器规范对象。
备注
此算法是单线程的,不会尝试将整个数据集加载到内存中。
作者
Microsoft Corporation Microsoft Technical Support
参考
Wikipedia: Artificial neural network
另请参阅
rxFastTrees、rxFastForest、rxFastLinear、rxLogisticRegression、rxOneClassSvm、featurizeText、categorical、categoricalHash、rxPredict.mlModel。
示例
# Estimate a binary neural net
rxNeuralNet1 <- rxNeuralNet(isCase ~ age + parity + education + spontaneous + induced,
transforms = list(isCase = case == 1),
data = infert)
# Score to a data frame
scoreDF <- rxPredict(rxNeuralNet1, data = infert,
extraVarsToWrite = "isCase",
outData = NULL) # return a data frame
# Compute and plot the Radio Operator Curve and AUC
roc1 <- rxRoc(actualVarName = "isCase", predVarNames = "Probability", data = scoreDF)
plot(roc1)
rxAuc(roc1)
#########################################################################
# Regression neural net
# Create an xdf file with the attitude data
myXdf <- tempfile(pattern = "tempAttitude", fileext = ".xdf")
rxDataStep(attitude, myXdf, rowsPerRead = 50, overwrite = TRUE)
myXdfDS <- RxXdfData(file = myXdf)
attitudeForm <- rating ~ complaints + privileges + learning +
raises + critical + advance
# Estimate a regression neural net
res2 <- rxNeuralNet(formula = attitudeForm, data = myXdfDS,
type = "regression")
# Score to data frame
scoreOut2 <- rxPredict(res2, data = myXdfDS,
extraVarsToWrite = "rating")
# Plot the rating versus the score with a regression line
rxLinePlot(rating~Score, type = c("p","r"), data = scoreOut2)
# Clean up
file.remove(myXdf)
#############################################################################
# Multi-class neural net
multiNN <- rxNeuralNet(
formula = Species~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
type = "multiClass", data = iris)
scoreMultiDF <- rxPredict(multiNN, data = iris,
extraVarsToWrite = "Species", outData = NULL)
# Print the first rows of the data frame with scores
head(scoreMultiDF)
# Compute % of incorrect predictions
badPrediction = scoreMultiDF$Species != scoreMultiDF$PredictedLabel
sum(badPrediction)*100/nrow(scoreMultiDF)
# Look at the observations with incorrect predictions
scoreMultiDF[badPrediction,]