6.5 ニューラル・ネットワーク・モデルの構築
ニューラル・ネットワーク・モデルを使用すると、入力と出力との間の複雑な非リニアの関係を取得すること、つまりデータのパターンを見つけることができます。
ore.neural
関数は、ore.frame
のデータに対して回帰用のフィードフォワードニューラル・ネットワーク・モデルを構築します。これは、ノード数を指定可能な複数の非表示層をサポートします。各層には、複数の活性化関数のいずれかを設定できます。
出力層は、単一の数値カテゴリ・ターゲットまたはバイナリのカテゴリ・ターゲットです。出力層には、任意の活性化関数を設定できます。これには、デフォルトで線形活性化関数があります。
ore.neural
の出力は、タイプore.neural
のオブジェクトになります。
ore.neural
関数に対する引数の詳細は、help(ore.neural)
を呼び出してください。
ore.neural
関数を使用したモデル化は、センサー・データなどのノイズ・データおよび複合データに適しています。そのようなデータに発生する可能性のある問題は次のとおりです。
-
ピクセル値など、(数値)予測子が多い可能性がある
-
ターゲットが離散値、実数値またはそのような値のベクターである可能性がある
-
トレーニング・データに(ノイズに対して堅牢な)エラーが含まれている可能性がある
-
スコアリングが高速
-
モデルの透過性が不要なため、モデルの解釈が困難
ニューラル・ネットワーク・モデリングの一般的なステップは次のとおりです。
- アーキテクチャの指定
- データの準備
- モデルの構築
- 停止条件(反復、許容範囲内の検証セットでのエラー)の指定
- モデルの統計結果の表示
- モデルの改善
例6-5 ニューラル・ネットワーク・モデルの構築
この例では、デフォルト値(hidden sizeを1など)でニューラル・ネットワーク・モデルを構築します。この例では、longley
データセットのサブセットをデータベース・メモリーのore.frame
オブジェクトに、オブジェクトtrainData
としてプッシュします。次に、longley
の別のサブセットをオブジェクトtestData
としてデータベースにプッシュします。この例では、trainData
を使用してモデルを構築し、testData
を使用して結果を予測します。
trainData <- ore.push(longley[1:11, ]) testData <- ore.push(longley[12:16, ]) fit <- ore.neural('Employed ~ GNP + Population + Year', data = trainData) ans <- predict(fit, newdata = testData) ans
この例のリスト
R> trainData <- ore.push(longley[1:11, ])
R> testData <- ore.push(longley[12:16, ])
R> fit <- ore.neural('Employed ~ GNP + Population + Year', data = trainData)
R> ans <- predict(fit, newdata = testData)
R> ans
pred_Employed
1 67.97452
2 69.50893
3 70.28098
4 70.86127
5 72.31066
Warning message:
ORE object has no unique key - using random order
例6-6 ore.neuralの使用方法および活性化の指定
この例では、iris
データセットを一時データベース表にプッシュしますが、これにはプロキシore.frame
オブジェクトのIRIS
が含まれています。この例では、ore.neural
関数を使用してニューラル・ネットワーク・モデルを構築し、層ごとに異なる活性化関数を指定します。
IRIS <- ore.push(iris) fit <- ore.neural(Petal.Length ~ Petal.Width + Sepal.Length, data = IRIS, hiddenSizes = c(20, 5), activations = c("bSigmoid", "tanh", "linear")) ans <- predict(fit, newdata = IRIS, supplemental.cols = c("Petal.Length")) options(ore.warn.order = FALSE) head(ans, 3) summary(ans)
この例のリスト
R> IRIS <- ore.push(iris)
R> fit <- ore.neural(Petal.Length ~ Petal.Width + Sepal.Length,
+ data = IRIS,
+ hiddenSizes = c(20, 5),
+ activations = c("bSigmoid", "tanh", "linear"))
R>
R> ans <- predict(fit, newdata = IRIS,
+ supplemental.cols = c("Petal.Length"))
R> options(ore.warn.order = FALSE)
R> head(ans, 3)
Petal.Length pred_Petal.Length
1 1.4 1.416466
2 1.4 1.363385
3 1.3 1.310709
R> summary(ans)
Petal.Length pred_Petal.Length
Min. :1.000 Min. :1.080
1st Qu.:1.600 1st Qu.:1.568
Median :4.350 Median :4.346
Mean :3.758 Mean :3.742
3rd Qu.:5.100 3rd Qu.:5.224
Max. :6.900 Max. :6.300