ヘッダーをスキップ
Oracle® R Enterpriseユーザーズ・ガイド
リリース1.3 for Windows, Linux, Solaris, and AIX
E48232-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

7 Oracle R Enterpriseでのデータベース内予測モデル

Oracle Advanced Analyticsオプションは、Oracle Data MiningおよびOracle R Enterpriseの両方で構成されています。Oracle R Enterpriseは、Oracle Data Miningで利用可能な予測分析およびデータ・マイニング機能に、なじみのあるRインタフェースを提供します。これは、Oracle R Enterprise内のOREdmパッケージを通して公開されます。

データ・マイニングでは、高度な数学的アルゴリズムを使用してデータをセグメント化し、イベントが将来発生する確率を計算します。Oracle Data Miningでは、表、ビュー、スター・スキーマ、トランザクション・データおよび非構造化データのマイニングが可能です。

Oracle Data Miningおよびサポートされるアルゴリズムの詳細は、『Oracle Data Mining概要11gリリース2 (11.2)』(http://www.oracle.com/technetwork/database/options/advanced-analytics/odm/index.html)を参照してください。

サポートされるアルゴリズムおよびアルゴリズムの簡単な説明は、「OREdmモデル」を参照してください。


注意:

CRANパッケージRODMも多くのOracle Data Miningアルゴリズムをサポートします。RODMOREdmとは異なります。

OREdmインタフェースは、対応する予測分析およびデータ・マイニング機能に、標準のRインタフェースを提供するように設計されています。

この項では、OREdmでサポートされているアルゴリズムの概要について説明します。特定のモデルの詳細は、特定のOREdmの機能に関するRのヘルプを参照してください。

モデルを構築するには、OREdmの要件を満たすビルド(トレーニング)・データが必要です。

Oracle Data Miningモデルは、OREdmモデルとは多少異なります(「OREdmモデルおよびOracle Data Miningモデル」を参照)。

このリリースで利用可能なモデルのリストおよび簡単な概要については、「OREdmモデル」を参照してください。

モデルを構築するためのOREdmの使用例は、各関数の説明に含まれています。たとえば、「属性評価の例」はAIモデルの構築方法を示します。

OREdmの要件

OREdmでは、モデルのトレーニング(構築)に使用するデータが、VARCHAR2、CHAR、NUMBERおよびFLOAT型の列のみを含む単一の表またはビューに存在している必要があります。

Oracle Data Miningに必要なすべての権限は、Oracle R Enterpriseのインストール中に自動的に付与されます。

Oracle Data Miningは、接続するデータベースで有効にしておく必要があります。

OREdmモデルおよびOracle Data Miningモデル

OREdm内では、Oracle Data Miningモデルに、生成した名前が付けられます。OREdm Rモデル・オブジェクトが存在している場合は、このモデル名を使用し、次のような他のインタフェースを通してOracle Data Miningモデルにアクセスできます。

  • Oracle Data Miner

  • SQLインタフェース(SQL*Plus、SQL Developerなど)

    特に、このモデルはOracle Data MiningのSQL予測機能とともに使用できます。

Oracle Data Minerは次のような多くの方法で役立ちます。

  • 利用可能なモデルのリストを表示する

  • モデル・ビューアを使用してモデルの詳細を調べる

  • 変換されたデータを適切にスコアリングする


注意:

Rの領域で実行される変換は、Oracle Data MinerまたはSQLスコアリングには引き継がれません。

同様に、SQLを使用して、モデルのリストを表示したり、モデルの詳細を調べたり、これらのモデルで変換されたデータを適切にスコアリングできます。

OREdmを使用して作成したモデルは、一時的なオブジェクトであり、通常、作成されたRセッションがクローズすると保持されません。一方、Data MinerまたはSQLを使用して作成したOracle Data Miningモデルは、明示的に削除されるまで存在します。

モデル・オブジェクトは、「データベース内でのRオブジェクトの保持および管理」で説明するように保存または保持できます。これにより、OREdmで生成されたモデル・オブジェクトは、Rセッションがクローズしても存在でき、ODMオブジェクトを所定の場所に保持できます。

OREdmモデルが存在する間、これをエクスポートおよびインポートでき、その後、Oracle R Enterprise Rオブジェクトの存在から切り離して使用できます。

OREdmモデル

OREdmは、次のOracle Data Miningモデルをサポートしています。

Oracle Data MiningおよびオープンソースのRは、異なる用語を使用します(「データ・マイニングの用語」を参照)。

なお、予測(スコアリング)、サマリー、サマリーの出力など、一般的な処理を実行する「オーバーロードされた関数」がいくつかあります。

データ・マイニングの用語

Oracle Data Miningと、統計モデルを作成するOracle R Enterprise OREdmパッケージは、多少異なる用語を使用します。最も重要な相違点を次に示します。

  • Oracle R Enterpriseでは、モデルを適合しますが、Oracle Data Miningでは、モデルを構築またはトレーニングします。

  • Oracle R Enterpriseでは、新しいデータを使用して予測しますが、Oracle Data Miningでは、新しいデータをスコアリングするか、または新しいデータにモデルを適用します。

  • Oracle R Enterpriseは、APIコールの「式」で説明するように、式を使用しますが、Oracle Data Miningは式をサポートしません。

Rモデルの定義では、変数の関係を示すが必要です。formulaクラスがR statsパッケージに含まれています。詳細は、?formulaに関するRのヘルプを参照してください。formulaは、適合させるモデルのシンボリックな記述を提供します。

[stats]{formula}の指定は、(response ~ terms)形式をとり、意味は次のとおりです。

  • responseは、数値または文字に応答するベクトルです。

  • termは一連の用語で、モデルに含める列名です。複数の用語は、列名の間に+を使用して指定します。

データのすべての列をモデル構築に使用する場合は、{response ~ .}を使用します。

関数を適用して応答したり、用語を適用して変換を認識できます。

列を除外するには、除外するそれぞれの列の名前の前に-を使用します。

このマニュアルおよびRのヘルプのモデル構築のすべての例に式の例が含まれています。Oracle Data Mining APIにはformulaに相当するものはありません。

オーバーロードされた関数

predict()summary()およびprint()は、たとえば、「GLMの例」に示すように、すべてのOREdmアルゴリズム間で定義されます。

summary()は、生成されたディシジョン・ツリーの詳細など、作成されたモデルに関する詳細情報を返します。

属性評価

Oracle Data Miningは、最小記述長アルゴリズムを使用して属性評価を計算します。属性評価では、ターゲットの予測における重要度に従って属性がランク付けされます。

最小記述長(MDL)は、情報理論モデルの選択原理の1つです。これは、情報理論(情報の定量化の研究)および学習理論(経験的データに基づく一般化に向けた容量の研究)において、重要な概念です。

MDLでは、最も単純でコンパクトな表現が、データの説明として最適かつ最も可能性が高いとみなされます。MDL原理は、Oracle Data Miningの属性評価モデルの作成に使用されます。

Oracle Data Miningを使用して構築された属性評価モデルは、新しいデータに適用できません。

ore.odmAIは、属性のランキングおよび属性評価の値を作成します。


注意:

OREdm AIモデルは、モデル・オブジェクトが保持されない、Rモデル・オブジェクトが返されない、という点で、Oracle Data Mining AIモデルとは異なります。モデルによって作成された重要度ランキングのみが返されます。

パラメータの詳細は、ore.odmAIに関するRのヘルプを参照してください。

例は、「属性評価の例」を参照してください。

属性評価の例

次の例では、データ・フレームirisを表IRISにプッシュして表を作成してから、属性評価モデルを構築します。

  IRIS <- ore.push(iris)
  ore.odmAI(Species ~ ., IRIS) # Analyse the column Species

ディシジョン・ツリー

ディシジョン・ツリー・アルゴリズムは条件付き確率に基づきます。ディシジョン・ツリーはルールを生成します。ルールは、ユーザーが容易に理解でき、レコード・セットを識別するためにデータベース内で簡単に使用できる条件文です。

ディシジョン・ツリー・モデルは分類モデルです。

ディシジョン・ツリーは、一連の質問を問うことによってターゲット値を予測します。各段階で問われる質問はそれぞれ、直前の質問に対する回答によって決まります。最終的に特定のターゲット値を一意に識別できるような質問を重ねていきます。図形的には、このプロセスがツリー構造を形成します。

トレーニング処理中、ディシジョン・ツリー・アルゴリズムは、ケース(レコード)のセットを2つの子ノードに分岐する最も効率的な方法を繰り返し探す必要があります。ore.odmDTでは、この分岐の計算用に2つの同種メトリック(giniおよびentropy)を使用できます。デフォルトのメトリックはginiです。

OREdmには、ディシジョン・ツリー(DT)用の次の関数が含まれています。

  • ore.odmDTは、DTモデルを作成(構築)します。

  • predictは、DTモデルを使用して新しいデータの分類を予測します。

  • summaryは、DTモデルのサマリーを表示します。サマリーには、モデルで生成されるツリーを説明するノードの詳細とモデルのシンボリックな記述が含まれます。summary.ore.odmDTのインスタンスを返します。

  • print.ore.odmDTは、ore.odmDTモデルの選択したコンポーネントを出力します。

パラメータの詳細は、ore.odmDTに関するRのヘルプを参照してください。

例は、「ディシジョン・ツリーの例」を参照してください。

ディシジョン・ツリーの例

次の例では、入力表を作成し、モデルを構築し、予測を行い、混同マトリクスを生成します。

# Create MTCARS, the input data
  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)
  MTCARS <- ore.push(m)
  row.names(MTCARS) <- MTCARS
# Build the model 
  dt.mod  <- ore.odmDT(gear ~ ., MTCARS)
  summary(dt.mod)
 # Make predictions and generate a confusion matrix
  dt.res  <- predict (dt.mod, MTCARS,"gear")
  with(dt.res, table(gear,PREDICTION))  # generate confusion matrix

一般化線形モデル

一般化線形モデル(GLM)は、線形モデル(線形回帰)のクラスを含み、このクラスを拡張したものです。一般化線形モデルは、実際には違反されることが多い線形モデルの制限を緩和したものです。たとえば、2値(yes/noまたは0/1)応答は、クラス間で同じ分散を持ちません。

Oracle Data MiningのGLMはパラメトリックなモデリング手法です。パラメトリック・モデルでは、データの分散を仮定します。仮定が満たされている場合、パラメトリック・モデルはノンパラメトリック・モデルよりも効率的になります。このタイプのモデルの作成では、どの程度仮定が満たされるかを見極めることが課題となります。このため、良質なパラメトリック・モデルを作成するには質の診断が重要です。

古典的な、線形回帰における重み付き最小二乗推定およびロジスティック回帰における反復再重み付き最小二乗推定(いずれもコレスキー分解およびマトリクス反転を使用する解決)に加えて、Oracle Data Mining GLMでは、マトリクス反転が不要で高次元データに最適な共役勾配法に基づく最適化アルゴリズムを提供します(このアプローチは、Komarekの2004年の論文のアプローチに類似しています)。アルゴリズムの選択は内部的に処理され、ユーザーに対して透過的です。

GLMを使用し、次のような分類モデルまたは回帰モデルを作成できます。

  • 分類: 2項ロジスティック回帰は、GLM分類アルゴリズムです。このアルゴリズムでは、ロジット・リンク関数および2項分散関数を使用します。

    例は、「GLMの例」を参照してください。

  • 回帰: 線形回帰は、GLM回帰アルゴリズムです。このアルゴリズムでは、ターゲット値の範囲に対する一定分散およびターゲット変換を想定していません。

    例は、「GLMの例」を参照してください。

ore.odmGLMにより、2つの異なるタイプのモデルを構築できます。一部、分類モデルにのみ適用される引数、回帰モデルにのみ適用される引数があります。

OREdmでは、一般化線形モデル(GLM)用の次の関数が用意されています。

  • ore.odmGLMはGLMモデルを作成(構築)します(一部、分類モデルにのみ適用される引数、回帰モデルにのみ適用される引数があります)。

  • residualsは、3つのタイプの残差(deviancepearsonおよびresponse)を含むore.frameです。

  • fittedfitted.values(次の適合値を含むore.vector)です。

    • rank: 適合モデルの数値のランク

    • type: モデル適合のタイプ

  • predict.ore.odmGLMは、GLMモデルを使用して新しいデータを予測します。

  • confintは、予測値の信頼区間を作成するかどうかを示す論理インジケータです。

  • devianceは、最大対数尤度の2倍のマイナス値(ある定数まで)です。

  • coef.ore.odmGLMは、線形カーネルを使用してGLMモデルの係数を取得します。

  • extractAIC.ore.odmGLMは、GLMモデルの全体の詳細から赤池情報量基準(AIC)を抽出します。

  • logLikは、OREdm GLMモデルの対数尤度を抽出します。

  • nobsは、モデル適合から観測数を摘出します。nobsはBIC計算に使用されます。

    BICは、AIC(object, ..., k = log(nobs(object)))として定義されます。

  • summaryは、GLMモデルのサマリーを作成します。サマリーには、モデルの適合の詳細が含まれます。また、formula(モデルのシンボリックな記述)も返します。summary.ore.odmGLMタイプのオブジェクトを返します。

  • printは、GLMモデルの選択したコンポーネントを出力します。

各パラメータおよび各方法の詳細は、ore.odmGLMに関するRのヘルプを参照してください。

GLMの例

次の例では、GLMを使用していくつかのモデルを構築します。入力表は、データベースにプッシュされたRデータ・セットです。

  • longleyデータ・セットを使用した線形回帰:

    LONGLEY <- ore.push(longley)
    longfit1 <- ore.odmGLM(Employed ~ ., data = LONGLEY)
    summary(longfit1)
    
  • longleyデータ・セットを使用したリッジ回帰:

    longfit2 <- ore.odmGLM(Employed ~ ., data = LONGLEY, ridge = TRUE,
                           ridge.vif = TRUE)
    summary(longfit2)
    
  • infertデータ・セットを使用したロジスティック回帰(分類):

    INFERT <- ore.push(infert)
    infit1 <- ore.odmGLM(case ~ age+parity+education+spontaneous+induced,
                         data = INFERT, type = "logistic")
    infit1
    
  • infit1の参照値の1への変更:

    infit2 <- ore.odmGLM(case ~ age+parity+education+spontaneous+induced,
                           data = INFERT, type = "logistic", reference = 1)
    infit2
    

k-Means

k-Means(KM)アルゴリズムは、指定した数のクラスタにデータを分割する、距離ベースのクラスタリング・アルゴリズムであり、次の機能を備えた拡張バージョンです。

  • 複数の距離関数(ユークリッド、コサインおよび高速コサインの各距離関数)。デフォルトはユークリッドです。

  • クラスタごとに、アルゴリズムによって、重心、各属性のヒストグラム、およびクラスタに割り当てられるデータの大部分を囲むハイパーボックスを記述するルールが戻されます。重心は、質的属性については最頻値を、量的属性については平均および分散を示します。

OREdmには、k-Means (KM)モデル用の次の関数が含まれています。

  • ore.odmKMeansは、KMモデルを作成(構築)します。

  • predictは、KMモデルを使用して新しいデータを予測します。

  • rules.ore.odmKMeansは、KMモデルで生成されたルールを抽出します。

  • clusterhists.ore.odmKMeansは、モデルの各クラスタと変数の組合せのヒストグラム・データを使用してdata.frameを生成します。数値変数はビニングされます。

  • histograms.ore.odmKMeansは、クラスタリング・モデルからlatticeベースのヒストグラムを作成します。

  • summaryは、KMモデルのサマリー(ルールを含む)を返します。また、formula(モデルのシンボリックな記述)も返します。summary.ore.KMeansタイプのオブジェクトを返します。

  • printは、KMモデルの選択したコンポーネントを出力します。

パラメータの詳細は、ore.odmKMに関するRのヘルプを参照してください。

例は、「k-Meansの例」を参照してください。

k-Meansの例

次の例では、表Xを作成し、クラスタ・モデルを構築し、histogram()を介してクラスタを描画し、予測を作成します。

# Create input table X
  x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
           matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
  colnames(x) <- c("x", "y")
  X <- ore.push (data.frame(x))
  km.mod1 <- NULL
  km.mod1 <- ore.odmKMeans(~., X, num.centers=2)
  km.mod1
  summary(km.mod1)
  rules(km.mod1)
  clusterhists(km.mod1)
  histogram(km.mod1)
 # Build clustering mode; plot results
  km.res1 <- predict(km.mod1,X,type="class",supplemental.cols=c("x","y"))
  head(km.res1,3)
  km.res1.local <- ore.pull(km.res1)
  plot(data.frame(x=km.res1.local$x, y=km.res1.local$y),
    col=km.res1.local$CLUSTER_ID)
  points(km.mod1$centers2, col = rownames(km.mod1$centers2), pch = 8, cex=2)
# Make predictions 
  head(predict(km.mod1,X))
  head(predict(km.mod1,X,type=c("class","raw")),3)
  head(predict(km.mod1,X,type=c("class","raw"),supplemental.cols=c("x","y")),3)
  head(predict(km.mod1,X,type="class"),3)
  head(predict(km.mod1,X,type="class",supplemental.cols=c("x","y")),3)
  head(predict(km.mod1,X,type="raw"),3)
  head(predict(km.mod1,X,type="raw",supplemental.cols=c("x","y")),3)

Naive Bayes

Naive Bayesアルゴリズムは条件付き確率に基づきます。Naive Bayesは履歴データを検索し、属性値の頻度と属性値の組合せの頻度を観測することによってターゲット値の条件付き確率を計算します。

Naive Bayesでは、各予測子は他の予測子とは条件的に独立していると想定されます。(Bayesの定理では、予測子が独立している必要があります。)

OREdmには、Naive Bayes (NB)モデル用の次の関数が含まれています。

  • ore.odmNBは、NBモデルを作成(構築)します。

  • predictは、NBモデルを使用して新しいデータをスコアリングします。

  • summaryは、NBモデルのサマリーを表示します。また、formula(モデルのシンボリックな記述)も返します。summary.ore.odmNBのインスタンスを返します。

  • printは、NBモデルの選択したコンポーネントを出力します。

パラメータの詳細は、ore.odmNBに関するRのヘルプを参照してください。

例は、「Naive Bayesの例」を参照してください。

Naive Bayesの例

次の例では、MTCARSを作成し、Naive Bayesモデルを構築し、モデルを使用して予測を行います。

# Create MTCARS
  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)
  MTCARS <- ore.push(m)
  row.names(MTCARS) <- MTCARS
 # Build model
  nb.mod  <- ore.odmNB(gear ~ ., MTCARS)
  summary(nb.mod)
 # Make predictions
  nb.res  <- predict (nb.mod, MTCARS,"gear")
  with(nb.res, table(gear,PREDICTION))  # generate confusion matrix

サポート・ベクター・マシン

サポート・ベクター・マシン(SVM)は、Vapnik-Chervonenkis理論に基づいた強固な理論的基礎を持つ最新の強力なアルゴリズムです。SVMは、強力な正則化プロパティを持ちます。正則化とは、新しいデータへのモデルの一般化を指します。

SVMモデルは、一般的なデータ・マイニング手法であるニューラル・ネットワークおよび動径基底関数に似た関数形式を持ちます。

SVMは、次のような問題の解決に使用できます。

  • 分類: SVM分類は、決定境界を定義する決定面の概念に基づいています。決定面は、異なるクラスのメンバーシップを持つオブジェクト・セットを区別するものです。SVMは、クラスの最も広範な区切りを与えるセパレータを定義するベクター(サポート・ベクター)を検出します。

    SVM分類では、2項および多クラスの両ターゲットがサポートされます。

    例は、「SVM分類」を参照してください。

  • 回帰: SVMでは、回帰問題を解決するために、イプシロン非感受性損失関数が使用されます。

    SVM回帰では、データ・ポイントの最大数がイプシロン幅の非感受性チューブ内に収まるような連続関数の検出が試行されます。真のターゲット値のイプシロン距離内におさまる予測は、誤差として解釈されません。

    例は、「SVM回帰」を参照してください。

  • 異常検出: 異常検出は、一見同質なデータ内に存在する特異なケースを識別します。異常検出は、重大な意味を持ちながら検出することが難しい、不正行為、ネットワークへの侵入などの発生頻度の低いイベントを検出するための重要なツールです。

    異常検出は、1クラスSVM分類として実装されます。異常検出モデルは、指定した分布内でデータ・ポイントが典型的かどうかを予測します。

    例は、「SVM異常検出」を参照してください。

ore.odmSVM関数は、次の3つの異なるタイプのモデルを構築します。一部、分類モデルにのみ適用される引数、回帰モデルにのみ適用される引数、異常検出モデルにのみ適用される引数があります。

OREdmでは、SVMモデル用の次の関数が用意されています。

  • ore.odmSVMは、SVMモデルを作成(構築)します。

  • predictは、SVMモデルを使用して新しいデータを予測(スコアリング)します。

  • coefは、SVMモデルの係数を取得します。

    SVMには、「線形」および「ガウス」の2つのカーネルがあり、「線形カーネル」は係数を生成します。

  • summaryはSVMモデルのサマリーを作成します。また、formula(モデルのシンボリックな記述)も返します。summary.ore.odmSVMタイプのオブジェクトを返します。

  • printは、SVMモデルの選択したコンポーネントを出力します。

パラメータの詳細は、ore.odmSVMに関するRのヘルプを参照してください。

サポート・ベクター・マシンの例

次の例では、3つのモデルを構築します。

SVM分類

次の例では、R mtcarsデータ・セットからデータベースにmtcarsを作成し、分類モデルを構築し、予測を行い、最終的に、混同マトリクスを生成します。

  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)
  MTCARS <- ore.push(m)
 
  svm.mod  <- ore.odmSVM(gear ~ .-ID, MTCARS,"classification")
  summary(svm.mod)
  coef(svm.mod)
  svm.res  <- predict (svm.mod, MTCARS,"gear")
  with(svm.res, table(gear,PREDICTION))  # generate confusion matrix
 
SVM回帰

次の例では、データ・フレームを作成し、それを表にプッシュしてから、回帰モデルを構築します(ore.odmSVMでは、線形カーネルを指定します)。

  x <- seq(0.1, 5, by = 0.02)
  y <- log(x) + rnorm(x, sd = 0.2)
  dat <-ore.push(data.frame(x=x, y=y))
 
# Build model with linear kernel
  svm.mod <- ore.odmSVM(y~x,dat,"regression",kernel.function="linear")
  summary(svm.mod)
  coef(svm.mod)
  svm.res <- predict(svm.mod,dat,supplemental.cols="x")
  head(svm.res,6)
SVM異常検出

次の例では、分類の例で作成されたMTCARSを使用し、異常検出モデルを構築します。

  svm.mod  <- ore.odmSVM(~ .-ID, MTCARS,"anomaly.detection")
  summary(svm.mod)
  svm.res  <- predict (svm.mod, MTCARS, "ID")
  head(svm.res)
  table(svm.res$PREDICTION)