Oracle Data Miningでは、表、ビュー、スター・スキーマ、トランザクション・データおよび非構造化データのマイニングが可能です。OREdm
関数は、対応する予測分析関数およびデータ・マイニング関数に、一般的なRの使用法に適合した引数を使用するRインタフェースを提供します。
この項の内容は次のとおりです。
OREdm
パッケージの関数は、Oracle Databaseのインデータベース・データ・マイニング機能へのアクセスを提供します。これらの関数を使用して、データベースにデータ・マイニング・モデルを構築します。
次の表に、Oracle Data Miningモデル構築するOracle R Enterpriseの関数および対応するOracle Data Miningのアルゴリズムおよび関数をリストします。
表4-2 Oracle R Enterpriseのデータ・マイニング・モデルの関数
Oracle R Enterpriseの関数 | Oracle Data Miningのアルゴリズム | Oracle Data Miningの関数 |
---|---|---|
|
最小記述長 |
分類または回帰の属性評価 |
|
Apriori |
相関ルール |
|
ディシジョン・ツリー |
分類 |
(12.2 機能) |
期待値最大化 |
クラスタリング |
(12.2 機能) |
明示的セマンティック分析 |
特徴抽出 |
|
一般化線形モデル |
分類および回帰 |
|
k-Means |
クラスタリング |
|
Naive Bayes |
分類 |
|
Non-Negative Matrix Factorization |
特徴抽出 |
|
直交パーティショニング・クラスタ(O-Cluster) |
クラスタリング |
(12.2 機能) |
拡張可能Rアルゴリズム |
相関ルール、属性評価、分類、クラスタリング、特徴抽出および回帰 |
(12.2 機能) |
特異値分解 |
特徴抽出 |
|
サポート・ベクター・マシン |
分類および回帰 |
各OREdm
のRモデル・オブジェクトで、スロットname
(またはfit.name
)は、OREdm
関数で生成された基礎となるOracle Data Miningモデルの名前です。Rモデルが存在している場合は、Oracle Data Miningのモデル名を使用して、次のような他のインタフェースを介して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
関数を使用して構築されたモデルは一時オブジェクトであるため、Oracle R Enterpriseデータストアに明示的に保存されないかぎり、Rセッション終了後は保持されません。一方、Data MinerまたはSQLを使用して構築されたOracle Data Miningモデルは、明示的に削除されるまで存在します。
モデル・オブジェクトを保存または保持できます。OREdm
で生成されたモデル・オブジェクトを保存すると、このオブジェクトはRセッション全体で存在でき、対応するOracle Data Miningを所定の場所に保持できます。OREdm
モデルが存在する間、これをエクスポートおよびインポートでき、その後、Oracle R Enterprise Rオブジェクトの存在から切り離して使用できます。
odm.settings
のMODEL_NAME
パラメータを使用して、データベースで作成されたOracle Data Miningオブジェクトに明示的に名前を付けることができます。名前が付けられたOracle Data Miningモデル・オブジェクトは、Oracle Data MinerまたはSQLを使用して作成されたOracle Data Miningモデル・オブジェクトのようにデータベースに保持されます。
関連トピック
Oracle Database 12cリリース2(12.2)以降、Oracle Data Miningパッケージの関数にはOracle Data Miningモデルの設定を指定する引数が含まれ、一部にはテキスト・マイニング・パラメータを設定する引数が含まれます。
OREdm
関数のodm.setting
引数を使用すると、Oracle Data Miningパラメータ設定のリストを指定できます。各リストの要素の名前および値は、それぞれパラメータ設定名および値を示します。設定値は数値または文字列である必要があります。各アルゴリズムの有効な設定は、『Oracle Data Miningユーザーズ・ガイド』を参照してください。
settings
関数は、モデルを構築するために使用される各Oracle Data Miningパラメータ設定名および値ペアをリストするdata.frame
を返します。
パーティション化されたOracle Data Miningモデル
パーティション化されたモデルは、複数のサブモデルで構成されるアンサンブル・モデルです。パーティション化されたOracle Data Miningモデルを作成するには、odm.setting
引数を使用します。名前ODMS_PARTITION_COLUMNS
と入力データを値としてパーティション化する列名を使用します。OREdm
関数は、各パーティションのサブモデルとともにモデルを返します。パーティションは、列にある一意の値に基づいています。
パーティション化されたモデルでは、最上位モデルのみを参照可能にして、スコアリングを自動化できます。これにより、スコアリングを行う各行のデータのパーティション化された列の値に基づいて適切なサブモデルが選択されます。
partitions
関数は、指定されたモデル・オブジェクトの各パーティションおよびモデルの関連付けられたパーティション列値をリストするore.frame
を返します。パーティション名はシステムによって決定されます。関数は、パーティション化されていないモデルにNULL
を返します。
テキスト・マイニング属性設定
一部のOREdm
関数には、Oracle Text属性固有の設定を指定できるテキスト・マイニング属性設定を指定するctx.settings
引数が含まれます。odm.settings
引数を使用する場合、Oracleテキスト・ポリシー、各トークンが発生するドキュメントの最小数およびテキスト・マイニング用の個別の特徴の最大数を指定できます。ctx.settings
引数を使用する場合、テキストとして処理する列および適用するテキスト変換のタイプを指定します。
ctx.settings
引数は、次の関数に適用されます。
ore.odmESA
, 明示的セマンティック分析
ore.odmGLM
, 一般化線形モデル
ore.odmKMeans
, k-Means
ore.odmNMF
, Non-Negative Matrix Factorization
ore.odmSVD
, 特異値分解
ore.odmSVM
, サポート・ベクター・マシン
注意:
Oracle Textポリシーを作成するには、ユーザーにはCTXSYS.CTX_DDL
権限が必要です。 関連項目:
有効なテキスト属性値は、『Oracle Data Miningユーザーズ・ガイド』の「テキスト・マイニングを含むモデルの作成」を参照してください。例4-8 ore.odmKMeansを使用したテキスト・マイニングの例
この例では、odm.settings
およびctx.settings
引数を使用します。例の後の図に、histogram(km.mod1)
関数の出力を示します。
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) 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) head(predict(km.mod1,X)) head(predict(km.mod1,X,type=c("class","raw"),supplemental.cols=c("x","y")),3) head(predict(km.mod1,X,type="raw",supplemental.cols=c("x","y")),3) # Text mining with ore.odmKMeans title <- c('Aids in Africa: Planning for a long war', 'Mars rover maneuvers for rim shot', 'Mars express confirms presence of water at Mars south pole', 'NASA announces major Mars rover finding', 'Drug access, Asia threat in focus at AIDS summit', 'NASA Mars Odyssey THEMIS image: typical crater', 'Road blocks for Aids') response <- c('Aids', 'Mars', 'Mars', 'Mars', 'Aids', 'Mars', 'Aids') # TEXT contents in character column KM_TEXT <- ore.push(data.frame(CUST_ID = seq(length(title)), RESPONSE = response, TITLE = title)) # Create text policy (CTXSYS.CTX_DDL privilege is required) ore.exec("Begin ctx_ddl.create_policy('ESA_TXTPOL'); End;") # Specify POLICY_NAME, MIN_DOCUMENTS, MAX_FEATURES and # text column attribute specification km.mod <- ore.odmKMeans( ~ TITLE, data = KM_TEXT, num.centers = 2L, odm.settings = list(ODMS_TEXT_POLICY_NAME = "ESA_TXTPOL", ODMS_TEXT_MIN_DOCUMENTS = 1, ODMS_TEXT_MAX_FEATURES = 3, kmns_distance = "dbms_data_mining.kmns_cosine", kmns_details = "kmns_details_all"), ctx.settings = list(TITLE = "TEXT(TOKEN_TYPE:STEM)")) summary(km.mod) settings(km.mod) print(predict(km.mod, KM_TEXT, supplemental.cols = "RESPONSE"), digits = 3L) ore.exec("Begin ctx_ddl.drop_policy('ESA_TXTPOL'); End;")
この例のリスト
R> x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), + matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2)) R> colnames(x) <- c("x", "y") R> R> X <- ore.push (data.frame(x)) R> km.mod1 <- NULL R> km.mod1 <- ore.odmKMeans(~., X, num.centers = 2) R> km.mod1 Call: ore.odmKMeans(formula = ~., data = X, num.centers = 2) Settings: value clus.num.clusters 2 block.growth 2 conv.tolerance 0.01 details details.all distance euclidean iterations 3 min.pct.attr.support 0.1 num.bins 10 random.seed 0 split.criterion variance odms.missing.value.treatment odms.missing.value.auto odms.sampling odms.sampling.disable prep.auto ON R> summary(km.mod1) Call: ore.odmKMeans(formula = ~., data = X, num.centers = 2) Settings: value clus.num.clusters 2 block.growth 2 conv.tolerance 0.01 details details.all distance euclidean iterations 3 min.pct.attr.support 0.1 num.bins 10 random.seed 0 split.criterion variance odms.missing.value.treatment odms.missing.value.auto odms.sampling odms.sampling.disable prep.auto ON Centers: x y 2 -0.07638266 0.04449368 3 0.98493306 1.00864399 R> rules(km.mod1) cluster.id rhs.support rhs.conf lhr.support lhs.conf lhs.var lhs.var.support lhs.var.conf predicate 1 1 100 1.0 92 0.86 x 86 0.2222222 x <= 1.2209 2 1 100 1.0 92 0.86 x 86 0.2222222 x >= -.6188 3 1 100 1.0 86 0.86 y 86 0.4444444 y <= 1.1653 4 1 100 1.0 86 0.86 y 86 0.4444444 y > -.3053 5 2 50 0.5 48 0.96 x 48 0.0870793 x <= .4324 6 2 50 0.5 48 0.96 x 48 0.0870793 x >= -.6188 7 2 50 0.5 48 0.96 y 48 0.0893300 y <= .5771 8 2 50 0.5 48 0.96 y 48 0.0893300 y > -.5995 9 3 50 0.5 49 0.98 x 49 0.0852841 x <= 1.7465 10 3 50 0.5 49 0.98 x 49 0.0852841 x > .4324 11 3 50 0.5 50 0.98 y 49 0.0838225 y <= 1.7536 12 3 50 0.5 50 0.98 y 49 0.0838225 y > .2829 R> clusterhists(km.mod1) cluster.id variable bin.id lower.bound upper.bound label count 1 1 x 1 -0.61884662 -0.35602715 -.6188466:-.3560272 6 2 1 x 2 -0.35602715 -0.09320769 -.3560272:-.0932077 17 3 1 x 3 -0.09320769 0.16961178 -.0932077:.1696118 15 4 1 x 4 0.16961178 0.43243125 .1696118:.4324312 11 5 1 x 5 0.43243125 0.69525071 .4324312:.6952507 8 6 1 x 6 0.69525071 0.95807018 .6952507:.9580702 17 7 1 x 7 0.95807018 1.22088965 .9580702:1.2208896 18 8 1 x 8 1.22088965 1.48370911 1.2208896:1.4837091 4 9 1 x 9 1.48370911 1.74652858 1.4837091:1.7465286 4 10 1 y 1 -0.89359597 -0.59946141 -.893596:-.5994614 2 11 1 y 2 -0.59946141 -0.30532685 -.5994614:-.3053269 4 12 1 y 3 -0.30532685 -0.01119230 -.3053269:-.0111923 11 13 1 y 4 -0.01119230 0.28294226 -.0111923:.2829423 24 14 1 y 5 0.28294226 0.57707682 .2829423:.5770768 13 15 1 y 6 0.57707682 0.87121138 .5770768:.8712114 12 16 1 y 7 0.87121138 1.16534593 .8712114:1.1653459 26 17 1 y 8 1.16534593 1.45948049 1.1653459:1.4594805 5 18 1 y 9 1.45948049 1.75361505 1.4594805:1.753615 3 19 2 x 1 -0.61884662 -0.35602715 -.6188466:-.3560272 6 20 2 x 2 -0.35602715 -0.09320769 -.3560272:-.0932077 17 21 2 x 3 -0.09320769 0.16961178 -.0932077:.1696118 15 22 2 x 4 0.16961178 0.43243125 .1696118:.4324312 10 23 2 x 5 0.43243125 0.69525071 .4324312:.6952507 2 24 2 x 6 0.69525071 0.95807018 .6952507:.9580702 0 25 2 x 7 0.95807018 1.22088965 .9580702:1.2208896 0 26 2 x 8 1.22088965 1.48370911 1.2208896:1.4837091 0 27 2 x 9 1.48370911 1.74652858 1.4837091:1.7465286 0 28 2 y 1 -0.89359597 -0.59946141 -.893596:-.5994614 2 29 2 y 2 -0.59946141 -0.30532685 -.5994614:-.3053269 4 30 2 y 3 -0.30532685 -0.01119230 -.3053269:-.0111923 11 31 2 y 4 -0.01119230 0.28294226 -.0111923:.2829423 24 32 2 y 5 0.28294226 0.57707682 .2829423:.5770768 9 33 2 y 6 0.57707682 0.87121138 .5770768:.8712114 0 34 2 y 7 0.87121138 1.16534593 .8712114:1.1653459 0 35 2 y 8 1.16534593 1.45948049 1.1653459:1.4594805 0 36 2 y 9 1.45948049 1.75361505 1.4594805:1.753615 0 37 3 x 1 -0.61884662 -0.35602715 -.6188466:-.3560272 0 38 3 x 2 -0.35602715 -0.09320769 -.3560272:-.0932077 0 39 3 x 3 -0.09320769 0.16961178 -.0932077:.1696118 0 40 3 x 4 0.16961178 0.43243125 .1696118:.4324312 1 41 3 x 5 0.43243125 0.69525071 .4324312:.6952507 6 42 3 x 6 0.69525071 0.95807018 .6952507:.9580702 17 43 3 x 7 0.95807018 1.22088965 .9580702:1.2208896 18 44 3 x 8 1.22088965 1.48370911 1.2208896:1.4837091 4 45 3 x 9 1.48370911 1.74652858 1.4837091:1.7465286 4 46 3 y 1 -0.89359597 -0.59946141 -.893596:-.5994614 0 47 3 y 2 -0.59946141 -0.30532685 -.5994614:-.3053269 0 48 3 y 3 -0.30532685 -0.01119230 -.3053269:-.0111923 0 49 3 y 4 -0.01119230 0.28294226 -.0111923:.2829423 0 50 3 y 5 0.28294226 0.57707682 .2829423:.5770768 4 51 3 y 6 0.57707682 0.87121138 .5770768:.8712114 12 52 3 y 7 0.87121138 1.16534593 .8712114:1.1653459 26 53 3 y 8 1.16534593 1.45948049 1.1653459:1.4594805 5 54 3 y 9 1.45948049 1.75361505 1.4594805:1.753615 3 R> histogram(km.mod1) R> R> km.res1 <- predict(km.mod1, X, type="class", supplemental.cols = c("x","y")) R> head(km.res1, 3) x y CLUSTER_ID 1 -0.43646407 0.26201831 2 2 -0.02797831 0.07319952 2 3 0.11998373 -0.08638716 2 R> km.res1.local <- ore.pull(km.res1) R> plot(data.frame(x = km.res1.local$x, + y = km.res1.local$y), + col = km.res1.local$CLUSTER_ID) R> points(km.mod1$centers2, col = rownames(km.mod1$centers2), pch = 8, cex = 2) R> R> head(predict(km.mod1, X)) '2' '3' CLUSTER_ID 1 0.9992236 0.0007763706 2 2 0.9971310 0.0028690375 2 3 0.9974216 0.0025783939 2 4 0.9997335 0.0002665114 2 5 0.9917773 0.0082226599 2 6 0.9771667 0.0228333398 2 R> head(predict(km.mod1,X,type=c("class","raw"),supplemental.cols=c("x","y")),3) '2' '3' x y CLUSTER_ID 1 0.9992236 0.0007763706 -0.43646407 0.26201831 2 2 0.9971310 0.0028690375 -0.02797831 0.07319952 2 3 0.9974216 0.0025783939 0.11998373 -0.08638716 2 R> head(predict(km.mod1,X,type="raw",supplemental.cols=c("x","y")),3) x y '2' '3' 1 -0.43646407 0.26201831 0.9992236 0.0007763706 2 -0.02797831 0.07319952 0.9971310 0.0028690375 3 0.11998373 -0.08638716 0.9974216 0.0025783939R> R> R> # Text mining with ore.odmKMeans R> title <- c('Aids in Africa: Planning for a long war', + 'Mars rover maneuvers for rim shot', + 'Mars express confirms presence of water at Mars south pole', + 'NASA announces major Mars rover finding', + 'Drug access, Asia threat in focus at AIDS summit', + 'NASA Mars Odyssey THEMIS image: typical crater', + 'Road blocks for Aids') R> response <- c('Aids', 'Mars', 'Mars', 'Mars', 'Aids', 'Mars', 'Aids') R> R> KM_TEXT <- ore.push(data.frame(CUST_ID = seq(length(title)), + RESPONSE = response, TITLE = title)) R> R> # Create text policy (CTXSYS.CTX_DDL privilege is required) R> ore.exec("Begin ctx_ddl.create_policy('ESA_TXTPOL'); End;") R> R> # specify POLICY_NAME, MIN_DOCUMENTS, MAX_FEATURES and R> # Text column attribute specification R> km.mod <- ore.odmKMeans( ~ TITLE, data = KM_TEXT, num.centers = 2L, + odm.settings = list(ODMS_TEXT_POLICY_NAME = "ESA_TXTPOL", + ODMS_TEXT_MIN_DOCUMENTS = 1, + ODMS_TEXT_MAX_FEATURES = 3, + kmns_distance = "dbms_data_mining.kmns_cosine", + kmns_details = "kmns_details_all"), + ctx.settings = list(TITLE="TEXT(TOKEN_TYPE:STEM)")) R> summary(km.mod) Call: ore.odmKMeans(formula = ~TITLE, data = KM_TEXT, num.centers = 2L, odm.settings = list(ODMS_TEXT_POLICY_NAME = "ESA_TXTPOL", ODMS_TEXT_MIN_DOCUMENTS = 1, ODMS_TEXT_MAX_FEATURES = 3, kmns_distance = "dbms_data_mining.kmns_cosine", kmns_details = "kmns_details_all"), ctx.settings = list(TITLE = "TEXT(TOKEN_TYPE:STEM)")) Settings: value clus.num.clusters 2 block.growth 2 conv.tolerance 0.01 details details.all distance cosine iterations 3 min.pct.attr.support 0.1 num.bins 10 random.seed 0 split.criterion variance odms.missing.value.treatment odms.missing.value.auto odms.sampling odms.sampling.disable odms.text.max.features 3 odms.text.min.documents 1 odms.text.policy.name ESA_TXTPOL prep.auto ON Centers: TITLE.MARS TITLE.NASA TITLE.ROVER TITLE.AIDS 2 0.5292307 0.7936566 0.7936566 NA 3 NA NA NA 1 R> settings(km.mod) SETTING_NAME SETTING_VALUE SETTING_TYPE 1 ALGO_NAME ALGO_KMEANS INPUT 2 CLUS_NUM_CLUSTERS 2 INPUT 3 KMNS_BLOCK_GROWTH 2 INPUT 4 KMNS_CONV_TOLERANCE 0.01 INPUT 5 KMNS_DETAILS KMNS_DETAILS_ALL INPUT 6 KMNS_DISTANCE KMNS_COSINE INPUT 7 KMNS_ITERATIONS 3 INPUT 8 KMNS_MIN_PCT_ATTR_SUPPORT 0.1 INPUT 9 KMNS_NUM_BINS 10 INPUT 10 KMNS_RANDOM_SEED 0 DEFAULT 11 KMNS_SPLIT_CRITERION KMNS_VARIANCE INPUT 12 ODMS_MISSING_VALUE_TREATMENT ODMS_MISSING_VALUE_AUTO DEFAULT 13 ODMS_SAMPLING ODMS_SAMPLING_DISABLE DEFAULT 14 ODMS_TEXT_MAX_FEATURES 3 INPUT 15 ODMS_TEXT_MIN_DOCUMENTS 1 INPUT 16 ODMS_TEXT_POLICY_NAME ESA_TXTPOL INPUT 17 PREP_AUTO ON INPUT R> print(predict(km.mod, KM_TEXT, supplemental.cols = "RESPONSE"), digits = 3L) '2' '3' RESPONSE CLUSTER_ID 1 0.0213 0.9787 Aids 3 2 0.9463 0.0537 Mars 2 3 0.9325 0.0675 Mars 2 4 0.9691 0.0309 Mars 2 5 0.0213 0.9787 Aids 3 6 0.9463 0.0537 Mars 2 7 0.0213 0.9787 Aids 3 R> R> ore.exec("Begin ctx_ddl.drop_policy('ESA_TXTPOL'); End;")