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アルゴリズムをサポートします。RODM はOREdm とは異なります。 |
OREdm
インタフェースは、対応する予測分析およびデータ・マイニング機能に、標準のRインタフェースを提供するように設計されています。
この項では、OREdm
でサポートされているアルゴリズムの概要について説明します。特定のモデルの詳細は、特定のOREdm
の機能に関するRのヘルプを参照してください。
モデルを構築するには、OREdmの要件を満たすビルド(トレーニング)・データが必要です。
Oracle Data Miningモデルは、OREdm
モデルとは多少異なります(「OREdmモデルおよびOracle Data Miningモデル」を参照)。
このリリースで利用可能なモデルのリストおよび簡単な概要については、「OREdmモデル」を参照してください。
モデルを構築するためのOREdm
の使用例は、各関数の説明に含まれています。たとえば、「属性評価の例」はAIモデルの構築方法を示します。
OREdm
では、モデルのトレーニング(構築)に使用するデータが、VARCHAR2、CHAR、NUMBERおよびFLOAT型の列のみを含む単一の表またはビューに存在している必要があります。
Oracle Data Miningに必要なすべての権限は、Oracle R Enterpriseのインストール中に自動的に付与されます。
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
は、次の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つのタイプの残差(deviance
、pearson
およびresponse
)を含むore.frame
です。
fitted
はfitted.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を使用していくつかのモデルを構築します。入力表は、データベースにプッシュされた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(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の例」を参照してください。
次の例では、表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では、各予測子は他の予測子とは条件的に独立していると想定されます。(Bayesの定理では、予測子が独立している必要があります。)
OREdm
には、Naive Bayes (NB)モデル用の次の関数が含まれています。
ore.odmNB
は、NBモデルを作成(構築)します。
predict
は、NBモデルを使用して新しいデータをスコアリングします。
summary
は、NBモデルのサマリーを表示します。また、formula
(モデルのシンボリックな記述)も返します。summary.ore.odmNB
のインスタンスを返します。
print
は、NB
モデルの選択したコンポーネントを出力します。
パラメータの詳細は、ore.odmNB
に関するRのヘルプを参照してください。
例は、「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つのモデルを構築します。
次の例では、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
次の例では、データ・フレームを作成し、それを表にプッシュしてから、回帰モデルを構築します(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)
次の例では、分類の例で作成された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)