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. Условия взаимодействия и F()
в настоящее время не поддерживаются в MicrosoftML.
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 рекомендуется использовать параметр miniBatchSize со значением, превышающим единицу. Если вы хотите использовать ускорение GPU, необходимо выполнить дополнительные действия по настройке вручную.
- Скачайте и установите NVidia CUDA Toolkit 6.5 (
CUDA Toolkit
). - Скачайте и установите библиотеку NVidia cuDNN версии 2 (
cudnn Library
). - Найдите каталог библиотек в пакете MicrosoftRML, вызвав
system.file("mxLibs/x64", package = "MicrosoftML")
. - Скопируйте файлы cublas64_65.dll, cudart64_65.dll и cusparse64_65.dll из набора инструментов CUDA версии 6.5 в каталог библиотек пакета MicrosoftML.
- Скопируйте файл cudnn64_65.dll из библиотеки cuDNN версии 2 в каталог библиотек пакета MicrosoftML.
miniBatchSize
Задает размер мини-пакета. Рекомендуемые значения — от 1 до 256. Этот параметр используется только в том случае, если для ускорения применяется GPU. При указании более высокого значения может увеличиться скорость обучения, но уменьшиться точность. Значение по умолчанию — 1.
normalize
Указывает тип используемой автоматической нормализации:
"auto"
: если требуется нормализация, она выполняется автоматически. Это значение по умолчанию."no"
: нормализация не выполняется."yes"
: нормализация выполняется."warn"
: если требуется нормализация, отображается предупреждение, но нормализация не выполняется.
Нормализация подгоняет разрозненные диапазоны данных к стандартному масштабу. Масштабирование признаков гарантирует, что расстояния между точками данных пропорциональны, и включает различные методы оптимизации (например, градиентный спуск) для ускоренного схождения. Если нормализация выполняется, используется нормализаторMaxMin
. Он нормализует значения в интервале [a, b], где-1 <= a <= 0
,0 <= b <= 1
иb - a = 1
. Этот нормализатор сохраняет степень незаполненности, сопоставляя ноль с нолем.
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, а значение log
переменной income
больше 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
, используется новая среда hash с родительской средой baseenv()
.
blocksPerRead
Указывает количество считываемых блоков для каждого фрагмента данных, считываемого из источника данных.
reportProgress
Целочисленное значение, указывающее уровень информирования по ходу обработки строки:
0
— информирование не осуществляется.1
— выводится и обновляется число обработанных записей.2
— выводятся данные об обработанных записях и времени обработки.3
— выводятся данные об обработанных записях и все данные о времени обработки.
verbose
Целочисленное значение, указывающее требуемый объем выходных данных. Если задано значение 0
, при вычислениях подробные выходные данные не выводятся. Целочисленные значения из диапазона от 1
до 4
позволяют увеличить объем информации.
computeContext
Задает контекст, в котором выполняются вычисления, указанные с помощью допустимого значения RxComputeContext. Сейчас поддерживаются локальные контексты и контексты вычислений RxInSqlServer.
ensemble
Параметры управления для сборки.
...
Дополнительные аргументы, передаваемые непосредственно в Microsoft Compute Engine.
Сведения
Нейронная сеть — это класс моделей прогнозирования, в основе которых лежат методы работы человеческого мозга. Нейронная сеть может быть представлена в виде взвешенного ориентированного графа. Каждый узел в графе называется нейроном. Нейроны в графе упорядочены по слоям, и нейроны в одном слое соединяются весовым ребром с нейронами в следующем слое (веса могут иметь положительные значения или значение 0). Первый слой называется входным слоем, и каждый нейрон во входном слое соответствует одному из признаков. Последний слой называется выходным слоем. Таким образом, в случае двоичных нейронных сетей мы имеем два выходных нейрона, по одному для каждого класса, значения которых представляют собой вероятности принадлежности к каждому классу. Оставшиеся слои называются скрытыми слоями. Значения нейронов в скрытых слоях и на выходном слое задаются путем вычисления взвешенной суммы значений нейронов в предыдущем слое и применения функции активации к этой взвешенной сумме. Модель нейронной сети определяется структурой ее графа (а именно, числом скрытых слоев и числом нейронов в каждом скрытом слое), выбором функции активации и весовыми коэффициентами на ребрах графа. Алгоритм нейронной сети пытается определить оптимальные веса на ребрах на основе данных обучения.
Несмотря на то, что нейронные сети широко используются для глубокого обучения и моделирования сложных задач, таких как распознавание изображений, они легко адаптируются к задачам регрессии. Любой класс статистических моделей можно назвать нейронной сетью, если эти модели используют адаптивные весовые коэффициенты и могут применяться для аппроксимации нелинейных функций входных данных. Регрессия нейронной сети особенно хорошо подходит для задач, которые нельзя решить с помощью более традиционных моделей.
Значение
rxNeuralNet
— объект rxNeuralNet
с обученной моделью.
NeuralNet
— объект спецификации обучения класса maml
для модуля обучения нейронной сети.
Примечания
Этот алгоритм является однопоточным и не будет пытаться загрузить весь набор данных в память.
Авторы
Корпорация Майкрософт 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,]