9 Rモデルでの予測

OML4RモデルでOracle Machine Learning for Rの関数ore.predictを使用して、将来の動作を予測します。

9.1 ore.predict関数について

予測モデルにより過去の動作に基づいて将来の動作を予測できます。

モデルを構築した後に、そのモデルを使用して新しいデータのスコアリング、すなわち予測を行います。

Rにより様々なモデルを構築できます。Rモデルを使用して新しい結果を予測するためにデータのスコアリングをするときは、スコアリングするデータはR data.frameにある必要があります。ore.predict関数を使用すると、Rモデルを使用してore.frameオブジェクトにあるデータベース常駐データをスコアリングできます。

ore.predict関数は、Oracle DatabaseでスコアリングするためにRベースのモデルを操作可能にする最短の方法を提供します。この関数には、PMMLまたは他のプラグインに対する依存性がありません。

ore.predict関数を使用してデータベースのデータをスコアリングすると、次のようなメリットがあります。

  • Rで生成されたモデルを使用してインデータベース・データをスコアリングできます。

    スコアリングするデータは、ore.frameオブジェクト内にあります。

  • 計算エンジンとしてのOracle Databaseを最大限に活用できます。

    データベースにより、業務用で高性能のスケーラブルなスコアリング・エンジンが提供されます。

  • アプリケーション・ワークフローを簡略化できます。

    モデルからSQLのスコアリングまで1つのステップで移動できます。

ore.predict関数は汎用関数です。次のように使用します。

ore.predict(object, newdata, ...)

object引数の値は、表9-1にリストされているモデル・オブジェクトのいずれかです。newdata引数の値は、スコアリングするデータが含まれているore.frameオブジェクトです。ore.predict関数には、固有のRモデル・クラスで使用するためのメソッドがあります。...引数は、各種のメソッドで受け入れられる様々な追加の引数を表します。

関数ore.predictには、表にリストされているモデル・オブジェクトをサポートするメソッドがあります。

表9-1 ore.predict関数でサポートされているモデル

モデルのクラス モデルの説明

glm

一般化線形モデル

kmeans

k-Meansクラスタリング・モデル

lm

線形回帰モデル

matrix

hclust階層クラスタリング・モデル内で使用するための1000行以下のmatrix

multinom

多項対数線形モデル

nnet

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

ore.model

OREModelsパッケージからのOML4Rモデル

prcomp

マトリクス上の主要コンポーネント分析

princomp

数値マトリクス上の主要コンポーネント分析

rpart

再帰分割および回帰ツリー・モデル

ore.predictメソッドの関数シグネチャについては、help("ore.predict-kmeans")のように、次のものに対してhelp関数をコールしてください。

  • ore.predict-glm

  • ore.predict-kmeans

  • ore.predict-lm

  • ore.predict-matrix

  • ore.predict-multinom

  • ore.predict-nnet

  • ore.predict-ore.model

  • ore.predict-prcomp

  • ore.predict-princomp

  • ore.predict-rpart

9.2 ore.predict関数の使用

次の例では、ore.predict関数の使用方法を示します。

例9-1 線形回帰モデルでのore.predict関数の使用方法

この例では、iris data.framelm関数を使用して、線形回帰モデルirisModelを構築します。データセットを一時表IRISおよび対応するore.frameプロキシIRISとしてデータベースにプッシュします。このモデルでore.predictを呼び出してモデルをスコアリングし、予測をIRIS ore.frameオブジェクトと結合します。最後に、結果のオブジェクトの最初の6行を表示します。

IRISModel <- lm(Sepal.Length ~ ., data = iris)
IRIS <- ore.push(iris)
IRIS_pred <- ore.predict(IRISModel, IRIS, se.fit = TRUE, 
                            interval = "prediction")
IRIS <- cbind(IRIS, IRIS_pred)
head(IRIS)

この例のリスト

R> IRISModel <- lm(Sepal.Length ~ ., data = iris)
R> IRIS <- ore.push(iris)
R> IRIS_pred <- ore.predict(IRISModel, IRIS, se.fit = TRUE, 
+                              interval = "prediction")
R> IRIS <- cbind(IRIS, IRIS_pred)
R> head(IRIS)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species     PRED    SE.PRED
1          5.1         3.5          1.4         0.2  setosa 5.004788 0.04479188
2          4.9         3.0          1.4         0.2  setosa 4.756844 0.05514933
3          4.7         3.2          1.3         0.2  setosa 4.773097 0.04690495
4          4.6         3.1          1.5         0.2  setosa 4.889357 0.05135928
5          5.0         3.6          1.4         0.2  setosa 5.054377 0.04736842
6          5.4         3.9          1.7         0.4  setosa 5.388886 0.05592364
  LOWER.PRED UPPER.PRED
1   4.391895   5.617681
2   4.140660   5.373027
3   4.159587   5.386607
4   4.274454   5.504259
5   4.440727   5.668026
6   4.772430   6.005342

R> head(IRIS)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species     PRED    SE.PRED LOWER.PRED UPPER.PRED
1          5.1         3.5          1.4         0.2  setosa 5.004788 0.04479188   4.391895   5.617681
2          4.9         3.0          1.4         0.2  setosa 4.756844 0.05514933   4.140660   5.373027
3          4.7         3.2          1.3         0.2  setosa 4.773097 0.04690495   4.159587   5.386607
4          4.6         3.1          1.5         0.2  setosa 4.889357 0.05135928   4.274454   5.504259
5          5.0         3.6          1.4         0.2  setosa 5.054377 0.04736842   4.440727   5.668026
6          5.4         3.9          1.7         0.4  setosa 5.388886 0.05592364   4.772430   6.005342

例9-2 一般化線形回帰モデルでのore.predict関数の使用方法

この例では、infertデータセットを使用して一般化線形モデルを構築した後、そのモデルでore.predict関数をコールします。

infertModel <-
  glm(case ~ age + parity + education + spontaneous + induced,
  data = infert, family = binomial())
INFERT <- ore.push(infert)
INFERTpred <- ore.predict(infertModel, INFERT, type = "response",
                          se.fit = TRUE)
INFERT <- cbind(INFERT, INFERTpred)
head(INFERT)

この例のリスト

R> infertModel <-
+   glm(case ~ age + parity + education + spontaneous + induced,
+   data = infert, family = binomial())
R> INFERT <- ore.push(infert)
R> INFERTpred <- ore.predict(infertModel, INFERT, type = "response",
+                           se.fit = TRUE)
R> INFERT <- cbind(INFERT, INFERTpred)
R> head(INFERT)
  education age parity induced case spontaneous stratum pooled.stratum
1    0-5yrs  26      6       1    1           2       1              3
2    0-5yrs  42      1       1    1           0       2              1
3    0-5yrs  39      6       2    1           0       3              4
4    0-5yrs  34      4       2    1           0       4              2
5   6-11yrs  35      3       1    1           1       5             32
6   6-11yrs  36      4       2    1           1       6             36
       PRED    SE.PRED
1 0.5721916 0.20630954
2 0.7258539 0.17196245
3 0.1194459 0.08617462
4 0.3684102 0.17295285
5 0.5104285 0.06944005
6 0.6322269 0.10117919

例9-3 ore.modelモデルでのore.predict関数の使用方法

この例では、irisデータセットを一時表IRISおよび対応するore.frameプロキシIRISとしてデータベースにプッシュします。ore.lm関数を使用して線形回帰モデルIRISModel2を構築します。モデルをスコアリングし、列がIRISに追加します。

IRIS <- ore.push(iris)
IRISModel2 <- ore.lm(Sepal.Length ~ ., data = IRIS)
IRIS$PRED <- ore.predict(IRISModel2, IRIS)
head(IRIS, 3)

この例のリスト

R> IRIS <- ore.push(iris)
R> IRISModel2 <- ore.odmGLM(Sepal.Length ~ ., data = IRIS)
R> IRIS$PRED <- ore.predict(IRISModel, IRIS)
R> head(IRIS, 3)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species     PRED
1          5.1         3.5          1.4         0.2  setosa 5.004788
2          4.9         3.0          1.4         0.2  setosa 4.756844
3          4.7         3.2          1.3         0.2  setosa 4.773097