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 アクセラレータの場合は、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 を指定します。 サポートされている変換については、featurizeTextcategoricalcategoricalHash に関する記事を参照してください。 これらの変換は、指定された R 変換の後に実行されます。 既定値は NULL です。

mlTransformVars

mlTransforms で使用する変数名の文字ベクトルを指定します。変数を使用しない場合は NULL を指定します。 既定値は NULL です。

rowSelection

モデルで使用されるデータ セットの行 (観測値) を、データ セットの論理変数の名前 (引用符で囲む) またはデータ セット内の変数を使用する論理式で指定します。 たとえば、rowSelection = "old" の場合は、変数 old の値が TRUE である観測値のみを使用します。 rowSelection = (age > 20) & (age < 65) & (log(income) > 10) の場合は、変数 age の値が 20 から 65 の間で、変数 incomelog の値が 10 を超える観測値のみを使用します。 行の選択は、データ変換を処理した後に実行されます (引数 transforms または transformFunc を参照してください)。 すべての式と同様に、rowSelection は、expression 関数を使用して関数呼び出しの外部で定義できます。

transforms

変数変換の最初のラウンドを表す、list(name = expression, ``...) という形式の式。 すべての式と同様に、transforms (または rowSelection) は、expression 関数を使用して関数呼び出しの外部で定義できます。

transformObjects

transformstransformsFuncrowSelection で参照できるオブジェクトを含む名前付きリスト。

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

こちらもご覧ください

rxFastTreesrxFastForestrxFastLinearrxLogisticRegressionrxOneClassSvmfeaturizeTextcategoricalcategoricalHashrxPredict.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,]