回帰モデリング用、二項および多クラス分類用のニューラル ネットワーク。
使用方法
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 アクセラレータの場合は、1 より大きい miniBatchSize を使用することをお勧めします。 GPU アクセラレータを使用する場合は、追加の手動セットアップ手順が必要です。
- NVidia CUDA Toolkit 6.5 (
CUDA Toolkit) をダウンロードしてインストールします。 - NVidia cuDNN v2 Library (
cudnn Library) をダウンロードしてインストールします。 -
system.file("mxLibs/x64", package = "MicrosoftML")を呼び出して、MicrosoftRML パッケージの libs ディレクトリを見つけます。 - cublas64_65.dll、cudart64_65.dll、cusparse64_65.dll を CUDA Toolkit 6.5 から MicrosoftML パッケージの libs ディレクトリにコピーします。
- cudnn64_65.dll を cuDNN v2 Library から 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 は、expression 関数を使用して関数呼び出しの外部で定義できます。
transforms
変数変換の最初のラウンドを表す、list(name = expression, ``...) という形式の式。 すべての式と同様に、transforms (または rowSelection) は、expression 関数を使用して関数呼び出しの外部で定義できます。
transformObjects
transforms、transformsFunc、rowSelection で参照できるオブジェクトを含む名前付きリスト。
transformFunc
変数変換関数。 詳細については、「rxTransform」を参照してください。
transformVars
変換関数に必要な入力データ セット変数の文字ベクトル。 詳細については、「rxTransform」を参照してください。
transformPackages
変数変換関数で使用するために事前に読み込まれる追加の R パッケージ (rxGetOption("transformPackages") で指定されているもの以外) を指定する文字ベクトル。 たとえば、transforms および transformFunc 引数を使用して RevoScaleR 関数で明示的に定義されているものや、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 コンピューティング エンジンに直接渡される追加の引数。
説明
ニューラル ネットワークは、人間の脳から着想を得た予測モデルのクラスです。 ニューラル ネットワークは、重み付けされた有向グラフとして表すことができます。 グラフ内の各ノードはニューロンと呼ばれます。 グラフ内のニューロンは複数の層に配置され、1 つの層のニューロンは、重み付けされたエッジ (重みは 0 または正の数値) によって次の層のニューロンに接続されます。 最初の層は入力層と呼ばれ、入力層内の各ニューロンは特徴の 1 つに対応します。 関数の最後の層は出力層と呼ばれます。 つまり、バイナリ ニューラル ネットワークの場合、2 つの出力ニューロンが含まれます。各クラスに 1 つずつで、その値は各クラスに属する確率です。 残りの層は隠れ層と呼ばれます。 隠れ層と出力層のニューロンの値は、前の層にあるニューロンの値の加重和を計算し、その加重和にアクティブ化関数を適用することによって設定されます。 ニューラル ネットワーク モデルは、グラフの構造 (つまり、隠れ層の数と各隠れ層内のニューロンの数)、アクティブ化関数の選択、グラフ エッジの重みによって定義されます。 ニューラル ネットワーク アルゴリズムは、トレーニング データに基づいてエッジの最適な重みを学習します。
ニューラル ネットワークは、ディープ ラーニングと複雑な問題 (画像認識など) のモデル化における使用が広く知られていますが、回帰問題にも簡単に適応することができます。 適応重みを使用していて、かつ入力の非線形関数を近似することができるあらゆる種類の統計モデルは、ニューラル ネットワークと呼ぶことができます。 ニューラル ネットワーク回帰は、従来型の回帰モデルでは解に適合できない問題に特に適しています。
値
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,]