6.14 ニューラル・ネットワーク・モデル

ore.odmNNクラスは、分類および回帰用のニューラル・ネットワーク(NN)モデルを作成します。ニューラル・ネットワーク・モデルを使用すると、入力と出力との間の複雑な非リニアの関係を取得すること、つまりデータのパターンを見つけることができます。

ore.odmNNクラス・メソッドは、OML4Rプロキシ・データ・フレームに対して回帰および分類のためのフィードフォワード・ニューラル・ネットワークを構築します。複数の非表示レイヤーをサポートし、それぞれに独自のノード数とアクティブ化機能があります。

各層には、次の活性化関数のいずれかを設定できます。

  • NNET_ACTIVATIONS_ARCTAN
  • NNET_ACTIVATIONS_BIPOLAR_SIG
  • NNET_ACTIVATIONS_LINEAR
  • NNET_ACTIVATIONS_LOG_SIG
  • NNET_ACTIVATIONS_RELU
  • NNET_ACTIVATIONS_TANH

出力層は、単一の数値カテゴリ・ターゲットまたはバイナリのカテゴリ・ターゲットです。出力層には、任意の活性化関数を設定できます。これには、デフォルトで線形活性化関数があります。

ore.odmNNクラスを使用したモデリングは、センサー・データなどのノイズ・データおよび複合データに適しています。そのようなデータに発生する可能性のある問題は次のとおりです。

  • ピクセル値など、(数値)予測子が多い可能性がある

  • ターゲットが離散値、実数値またはそのような値のベクターである可能性がある

  • トレーニング・データに(ノイズに対して堅牢な)エラーが含まれている可能性がある

  • スコアリングが高速

  • モデルの透過性が不要なため、モデルの解釈が困難

ニューラル・ネットワーク・モデリングの一般的なステップは次のとおりです。

  1. アーキテクチャの指定

  2. データの準備

  3. モデルの構築

  4. 停止条件(反復、許容範囲内の検証セットでのエラー)の指定

  5. モデルの統計結果の表示

  6. モデルの改善

ニューラル・ネットワーク・モデルの設定

次の表は、NNモデルの設定のリストです。

表6-13 ニューラル・ネットワーク・モデルの設定

設定名 設定値 説明
NNET_HIDDEN_LAYERS

X >= 0

非表示レイヤーの数によってトポロジを定義します。

デフォルト値は1です。

NNET_NODES_PER_LAYER

正の整数のリスト

レイヤー当たりのノード数によってトポロジを定義します。様々なレイヤーに様々な数のノードを含めることができます。

この値は負数ではない整数にして、カンマで区切る必要があります。たとえば、'10, 20, 5'です。設定値は、NNET_HIDDEN_LAYERSと一致する必要があります。層ごとのレイヤーのデフォルト数は、属性の数または50 (属性の数> 50の場合)です。

NNET_ACTIVATIONS

次の文字列のリスト:

  • "NNET_ACTIVATIONS_LOG_SIG"
  • "NNET_ACTIVATIONS_LINEAR"
  • "NNET_ACTIVATIONS_TANH"
  • "NNET_ACTIVATIONS_ARCTAN"
  • "NNET_ACTIVATIONS_BIPOLAR_SIG"
非表示層の活性化関数を定義します。たとえば、'''NNET_ACTIVATIONS_BIPOLAR_SIG'', ''NNET_ACTIVATIONS_TANH'''のようにします。

層ごとに異なる活性化関数を用意できます。

デフォルト値は"NNET_ACTIVATIONS_LOG_SIG"です。

活性化関数の数は、NNET_HIDDEN_LAYERSおよびNNET_NODES_PER_LAYER と一貫性を保つ必要があります。

ノート:

すべての引用符は一重引用符です。2つの一重引用符は、SQL文の一重引用符エスケープするために使用します。

NNET_WEIGHT_LOWER_BOUND

A real number

この設定により、重みがランダムに初期化されるリージョンの下限が指定されます。NNET_WEIGHT_LOWER_BOUNDNNET_WEIGHT_UPPER_BOUNDを一緒に設定する必要があります。一方を設定し、もう一方を設定しない場合、エラーが発生します。NNET_WEIGHT_LOWER_BOUNDNNET_WEIGHT_UPPER_BOUNDより大きくすることはできません。デフォルト値は–sqrt(6/(l_nodes+r_nodes))です。l_nodesの値は次のようになります。

  • 入力レイヤー密属性では、(1+密属性の数)
  • 入力レイヤー・スパース属性では、スパース属性の数
  • 各非表示レイヤーでは、(1+その非表示レイヤーのノードの数)

r_nodesの値は、重みが接続するレイヤー内のノードの数です。

NNET_WEIGHT_UPPER_BOUND

A real number

この設定により、重みが初期化されるリージョンの上限が指定されます。NNET_WEIGHT_LOWER_BOUNDとペアで設定する必要があり、値をNNET_WEIGHT_LOWER_BOUNDの値より小さくすることはできません。指定されていない場合、NNET_WEIGHT_LOWER_BOUNDおよびNNET_WEIGHT_UPPER_BOUNDの値はシステムによって決定されます。

デフォルト値はsqrt(6/(l_nodes+r_nodes))です。「NNET_WEIGHT_LOWER_BOUND」を参照してください。

NNET_ITERATIONS

X > 0

この設定により、ニューラル・ネットワーク・アルゴリズムにおける最大反復数が指定されます。

デフォルト値は200です。

NNET_TOLERANCE

0 < X < 1

ニューラル・ネットワーク・アルゴリズムの収束許容値の設定を定義します。

デフォルト値は0.000001です。

NNET_REGULARIZER

NNET_REGULARIZER_NONE

NNET_REGULARIZER_L2

NNET_REGULARIZER_HELDASIDE

ニューラル・ネットワーク・アルゴリズムの正則化設定です。トレーニング行の合計数が50000より大きい場合、デフォルトはNNET_REGULARIZER_HELDASIDEです。

トレーニング行の合計数が50000以下の場合、デフォルトはNNET_REGULARIZER_NONEです。

NNET_HELDASIDE_RATIO

0 <= X <= 1

取り分けておいたメソッドの保持率を定義します。

デフォルト値は0.25です。

NNET_HELDASIDE_MAX_FAIL

値は正整数である必要があります。

NNET_REGULARIZER_HELDASIDEでは、検証データのネットワーク・パフォーマンスが行内のNNET_HELDASIDE_MAX_FAILエポックについて改善されない場合や同じままの場合、トレーニング・プロセスは早期に停止されます。

デフォルト値は6です

NNET_REG_LAMBDA TO_CHAR(X >= 0) L2正則化パラメータ・ラムダを定義します。これは、NNET_REGULARIZER_HELDASIDEと一緒に設定することはできません。

デフォルト値は1です。

例6-16 ニューラル・ネットワーク・モデルの構築

この例では、NNモデルを作成し、ore.odmNNクラスのメソッドの一部を使用します。


# Turn off row ordering warnings

options(ore.warn.order=FALSE)

# Data setup

set.seed(7654)
x <- seq(0.1, 5, by = 0.02)
weights <- round(rnorm(length(x),10,3))
y <- log(x) + rnorm(x, sd = 0.2)

# Create a temporary OML4R proxy object DAT.

DAT <- ore.push(data.frame(x=x, y=y, weights=weights))

# Create an NN regression model object. Fit the NN model according to the data and setting parameters.

mod.nn <- ore.odmNN(y~x, DAT,"regression",
                          odm.settings = list(nnet_hidden_layers = 1))
weight(mod.nn)
summary(mod.nn)

# Use the model to make predictions on the input data.

pred.nn <- predict(mod.nn, DAT, "y")
head(pred.nn, 10)

この例のリスト

表6-14 data.frame: 4 x 6

LAYER IDX_FROM IDX_TO ATTRIBUTE_NAME ATTRIBUTE_VALUE WEIGHT
<dbl> <dbl> <dbl> <chr> <chr> <dbl>
0 0 0 x NA -1.0663866
0 NA 0 NA NA -7.4897304
1 0 0 NA NA -1068.0117188
1 NA 0 NA NA 0.9961451

表6-15 data.frame: 10 x 2

y PREDICTION
<dbl> <dbl>
-2.376195 -1.648826
-1.906485 -1.601597
-2.027240 -1.555065
-1.541951 -1.509221
-1.654645 -1.464055
-1.742211 -1.419556
-1.320646 -1.375714
-1.357442 -1.332520
-1.442755 -1.289965
-1.192586 -1.248039

例6-17 ore.odmNN分類

この例では、NNモデルを作成し、ore.odmNN分類クラスのメソッドの一部を使用します。


# Turn off row ordering warnings

options(ore.warn.order=FALSE)

# Data setup

m <- mtcars
m$gear <- as.factor(m$gear)
m$cyl  <- as.factor(m$cyl)
m$vs   <- as.factor(m$vs)
m$ID   <- 1:nrow(m)

# Create a temporary OML4R proxy object for the MTCARS table.

MTCARS <- ore.push(m)
row.names(MTCARS) <- MTCARS$ID

# Create an NN classification model object. Fit the NN model according to the data and setting parameters.

mod.nn  <- ore.odmNN(gear ~ ., MTCARS,"classification",
                         odm.settings = list(nnet_hidden_layers = 2,
                                             nnet_activations = c("'NNET_ACTIVATIONS_LOG_SIG'", "'NNET_ACTIVATIONS_TANH'"),
                                             nnet_nodes_per_layer = c(5, 2)))
head(weight(mod.nn), 10)

# Use the model to make predictions on the input data.

pred.nn <- predict(mod.nn, MTCARS, "gear")

# Generate a confusion matrix.
with(pred.nn, table(gear, PREDICTION))

この例のリスト

表6-16 data.frame: 10 x 6

LAYER IDX_FROM IDX_TO ATTRIBUTE_NAME ATTRIBUTE_VALUE WEIGHT
<dbl> <dbl> <dbl> <chr> <chr> <dbl>
0 0 0 ID NA 12.424586
0 0 1 ID NA -9.953163
0 0 2 ID NA -7.516252
0 0 3 ID NA -1.100170
0 0 4 ID NA -15.955383
0 1 0 am NA 21.585514
0 1 1 am NA -3.228476
0 1 2 am NA -22.794853
0 1 3 am NA 15.349457
0 1 4 am NA -19.099138
 PREDICTION 
     gear  3  4    
        3 14  1    
        4  0 12    
        5  2  3