2 Oracle Machine Learning for Rについて
次の各トピックでは、Oracle Machine Learning for R (OML4R)およびRユーザーにとってのその利点について説明します。
ノート:
以前のリリースのOML4Rは、Oracle R Enterpriseという名前でした。- Oracle Machine Learning for Rとは
Oracle Machine Learning for R (OML4R)は、本番環境への迅速なデプロイが可能な、Rでのエンドツーエンド分析プロセス用の包括的なデータベース集中型の環境です。 - Oracle Machine Learning for Rの利点
OML4Rを使用したOracle Databaseインスタンスのデータの準備および分析では、Rユーザーにとって多くの利点があります。 - Oracle Machine Learning for Rのクラス、関数およびメソッドのオンライン・ヘルプの取得
- Oracle DatabaseのデータでのRの透過的な使用について
OML4Rには、Oracle DatabaseインスタンスおよびOracle Autonomous Databaseインスタンスのデータを直接操作するために使用できるオーバーロードされたオープン・ソースR関数があります。 - Oracle Machine Learning for Rのグローバル・オプション
OML4Rには、様々な関数に適用されるグローバル・オプションがあります。
2.1 Oracle Machine Learning for Rとは
Oracle Machine Learning for R (OML4R)は、本番環境への迅速なデプロイが可能な、Rでのエンドツーエンド分析プロセス用の包括的なデータベース集中型の環境です。
OML4Rは、Rパッケージおよびデータベース機能のセットで、Rユーザーは、SQLを使用せずにデータベース常駐データを操作でき、そのデータベース環境で稼働する1つ以上の埋込みRエンジンでRスクリプトを実行できます。
OML4RをRセッションから使用すると、データベース・インスタンスのデータに簡単にアクセスできます。データベース表およびビューに対応するRオブジェクト(データベース表ではプロキシ・オブジェクト・データとも呼ばれる)を作成および使用できます。OML4Rには、R操作をデータベース内で実行するSQLに変換するオーバーロードされた関数があります。データベースはSQLを統合し、SQL文の実行時に、問合せの最適化、パラレル処理およびデータベースのスケーラビリティ機能を使用できます。データベースは結果をRオブジェクトとして返します。
OML4R 2.0は、Oracle Autonomous DatabaseインスタンスのOracle Machine Learning NotebooksのRインタプリタで使用できます。詳細は、「データ分析およびデータ視覚化のためのNotebooksスタート・ガイド」を参照してください。この環境には、R、必要なRライブラリ、OML NotebooksのRインタプリタなどの必要なコンポーネントがすべて含まれています。
埋込みRの実行は、OML4Rの使用による最も重要な利点のいくつかを提供します。Embedded R Executionを使用すると、RインタフェースまたはSQLインタフェース、あるいはその両方を介してデータベース内のRスクリプトを格納および実行できます。Embedded Rは、REST APIを使用してAutonomous Databaseで実行できます。Rスクリプトの結果を、構造化データ、Rオブジェクトおよびイメージに対するSQL対応のツールで使用できます。
2.2 Oracle Machine Learning for Rの利点
OML4Rを使用したOracle Databaseインスタンスのデータの準備および分析では、Rユーザーにとって多くの利点があります。
OML4Rを使用して、次のことを実行できます。
-
SQLを使用せずにデータベース常駐データを操作。OML4Rは、多くの標準R関数をSQLに透過的に変換します。OML4Rを使用すると、データベースに常駐するデータに対するアクセス、分析および操作を行うRプロキシ・オブジェクトを作成できます。OML4Rでは、列索引、問合せの最適化、表のパーティション化およびデータベースの並列性を利用して、SQLを自動的に最適化できます。
OML4Rでオーバーロードされた関数は、インデータベース実行のためのRデータ・フレームに対するものを含め、一般的に使用される多くのR関数に使用できます。
-
データの移動を最小化。可能なかぎり常にデータをデータベースに保持することによって、クライアントのRエンジンへのデータの転送にかかる時間およびデータをローカルに格納する必要性をなくします。また、ローカルに格納したデータの管理(データ・ファイルの適切な場所への配布、本番データベースで行われた変更とのデータの同期などのタスクが含まれます)を必要なくします。
-
データをセキュアに保持。データをデータベースに保持することによって、データ管理用のOracle Databaseのセキュリティ、スケーラビリティ、信頼性およびバックアップの各機能を利用できます。
-
データベースの能力を使用。データベース内のデータを直接操作することによって、データベース環境のメモリーおよび処理能力を使用でき、クライアントのRエンジンのメモリーの制約を回避できます。
-
最新のデータを使用。データはデータベースでリフレッシュされるため、最新のデータにただちにアクセスできます。
-
データベースでデータを準備。透過層関数を使用して、順序付け、集計、フィルタ処理、記録などの操作を介した予測分析用、およびSQLコードを記述することなく総括的サンプリング手法を使用するための、大規模なデータベース常駐データ・セットを準備します。
-
データベースにRオブジェクトを保存。Rセッション全体で使用し、他のユーザーと共有するために、ネイティブRオブジェクトおよびOML4Rプロキシ・オブジェクトをOML4Rデータストアに保存できます。RオブジェクトおよびOML4RオブジェクトをOracle Databaseインスタンスが管理するOML4Rデータストアに格納できます。
-
データベースにモデルを構築。OML4SQLのインデータベースのパラレル化および分散型機械学習アルゴリズムを使用して、より多くのデータに基づいてより多くのモデルを構築し、大量のデータをより迅速にスコアリングします。十分に統合されたR APIを介してOML4SQLからのインデータベース・アルゴリズムを使用します(これには現在、ニューラル・ネットワーク、ランダム・フォレスト、指数平滑化およびXGBoost用のインデータベース・アルゴリズムが含まれます)。インデータベース・アルゴリズムの自動データ準備、パーティション化されたモデル、統合テキスト・マイニング機能により、生産性が向上します。
CRAN (包括的なRアーカイブ・ネットワーク)からダウンロードするパッケージ内の関数を使用して、アンサンブル・モデリングなどの手法を使用するモデルを構築できます。
-
埋込みRエンジンでユーザー定義R関数を実行。OML4R Embedded R Execution機能を使用すると、ユーザー定義R関数をOML4Rスクリプト・リポジトリに格納し、データベース環境によって生成されたRエンジンでそれらの関数を実行できます。ユーザー定義R関数が実行されると、パラレルに実行できる1つ以上のRエンジンがデータベースによって生成および管理されます。Embedded R Execution機能を使用すると、次のことを実行できます。
-
Embedded Rエンジンで実行されるユーザー定義関数で、選択したRパッケージのセットを使用する。
-
Embedded Rエンジンで実行されるユーザー定義R関数で他のRパッケージを使用する。
-
本番アプリケーションで使用するためにユーザー定義R関数を操作できるようにし、他の言語へのRコードおよびモデルの移植を回避する。Rの結果を既存のアプリケーションに統合するためにコードを作成しなおさなくても済みます。
-
Oracleデータベース・インスタンスをユーザー定義R関数の高パフォーマンス・コンピューティング環境としてシームレスに利用し、データ・パラレル処理とリソース管理を実現する。
-
システムでサポートされているタスク・パラレル化を使用して、モンテカルロ分析などのシミュレーションを実行する。
-
R、SQLおよびREST APIからユーザー定義R関数をコールする。
-
構造化data.frame結果およびPNGイメージをユーザー定義R関数から表として返す他、構造化コンテンツとイメージ・コンテンツの両方が含まれるXMLも返す。
-
-
Oracleテクノロジ・スタックと統合。Oracleテクノロジ・スタックのあらゆる側面を利用して、ビジネス・インテリジェンスや科学調査といった、より大規模なフレームワーク内に、独自のデータ分析を統合できます。たとえば、OML4R分析の結果をOracle Analytics CloudおよびOracle APEXに統合するには、SQLを使用してR機能をコールします。
2.3 Oracle Machine Learning for Rのクラス、関数およびメソッドのオンライン・ヘルプの取得
OML4Rのクラス、関数およびメソッドに関するヘルプを取得するには、help
、showMethods
などのR関数を使用します。クラスまたは関数の名前にore
接頭辞が付いている場合は、help
関数にその名前を指定できます。オープン・ソースR関数のオーバーロードされたメソッドに関するヘルプを取得するには、メソッドの名前およびore
クラスの名前を指定します。
例2-1 OML4Rのクラス、関数およびメソッドに関するヘルプの取得
この例では、OML4Rのクラス、関数およびメソッドに関する情報を取得するための様々な方法を示します。例の後にあるリストでは、一部のコードは結果の一部のみを表示するために変更されていて、一部の関数の出力は表示されていません。
# List the contents of the OREbase package. ls("package:OREbase") # Get help for the OREbase package. help("OREbase") # Get help for the ore virtual class. help("ore-class") # Show the subclasses of the ore virtual class. showClass("ore") # Get help on the ore.frame class. help("ore.frame") # Get help on the ore.vector class. help("ore.vector") # Show the arguments for the aggregate method. showMethods("aggregate") # Get help on the aggregate method for an ore.vector object. help("aggregate,ore.vector-method") # Show the signatures for the merge method. showMethods("merge") # Get help on the merge method for an ore.frame object. help("merge,ore.frame,ore.frame-method") showMethods("scale") # Get help on the scale method for an ore.number object. help("scale,ore.number-method") # Get help on the ore.connect function. help("ore.connect")
R> options(width = 80) # List the contents of the OREbase package. R> head(ls("package:OREbase"), 12) [1] "%in%" "Arith" "Compare" "I" [5] "Logic" "Math" "NCOL" "NROW" [9] "Summary" "as.data.frame" "as.env" "as.factor" R> R># Get help for the OREbase package. R> help("OREbase") # Output not shown. R> R> # Get help for the ore virtual class. R> help("ore-class") # Output not shown. R> R># Show the subclasses of the ore virtual class. R> showClass("ore") Virtual Class "ore" [package "OREbase"] No Slots, prototype of class "ore.vector" Known Subclasses: Class "ore.vector", directly Class "ore.frame", directly Class "ore.matrix", directly Class "ore.number", by class "ore.vector", distance 2 Class "ore.character", by class "ore.vector", distance 2 Class "ore.factor", by class "ore.vector", distance 2 Class "ore.date", by class "ore.vector", distance 2 Class "ore.datetime", by class "ore.vector", distance 2 Class "ore.difftime", by class "ore.vector", distance 2 Class "ore.logical", by class "ore.vector", distance 3 Class "ore.integer", by class "ore.vector", distance 3 Class "ore.numeric", by class "ore.vector", distance 3 Class "ore.tblmatrix", by class "ore.matrix", distance 2 Class "ore.vecmatrix", by class "ore.matrix", distance 2 R> # Get help on the ore.frame class. R> help("ore.frame") # Output not shown. R># Get help on the ore.vector class. R> help("ore.vector") # Output not shown. R> R># Show the arguments for the aggregate method. R> showMethods("aggregate") Function: aggregate (package stats) x="ANY" x="ore.vector" # Get help on the aggregate method for an ore.vector object. R> help("aggregate,ore.vector-method") # Output not shown. # Show the signatures for the merge method. R> showMethods("merge") Function: merge (package base) x="ANY", y="ANY" x="data.frame", y="ore.frame" x="ore.frame", y="data.frame" x="ore.frame", y="ore.frame # Get help on the merge method for an ore.frame object. R> help("merge,ore.frame,ore.frame-method") # Output not shown. R> showMethods("scale") Function: scale (package base) x="ANY" x="ore.frame" x="ore.number" x="ore.tblmatrix" x="ore.vecmatrix" # Get help on the scale method for an ore.number object. R> help("scale,ore.number-method") # Output not shown. # Get help on the ore.connect function. R> help("ore.connect") # Output not shown.
2.4 Oracle DatabaseのデータでのRの透過的な使用について
OML4Rには、Oracle DatabaseインスタンスおよびOracle Autonomous Databaseインスタンスのデータを直接操作するために使用できるオーバーロードされたオープン・ソースR関数があります。
このメソッドおよび関数は、R関数をSQLに変換する透過層を実装するパッケージに含まれています。
OML4Rの透過層パッケージおよびRをSQLに変換する際の制限について、次の各項で説明します。
- 透過層について
Oracle Machine Learning for Rの透過層は、OREbase
、OREgraphics
、OREdplyr
およびOREstats
のパッケージで実装されます。 - Rのデータ型およびクラスの透過層サポート
Oracle Machine Learning for Rの透過層には、Rデータ型をOracle Databaseデータ型にマップするクラスおよびデータ型があります。
2.4.1 透過層について
Oracle Machine Learning for Rの透過層は、OREbase
、OREgraphics
、OREdplyr
およびOREstats
のパッケージで実装されます。
これらのOML4Rパッケージには、オープン・ソースRのbase
、graphics
およびstats
のパッケージの関数のオーバーロードされたメソッドがそれぞれ含まれています。
これらのパッケージのメソッドおよび関数を使用すると、Oracle Databaseインスタンスの表およびビューに対応するdata.frameおよびその他のRプロキシ・オブジェクトを作成できます。そのようなオブジェクトを使用するR式を実行すると、メソッドおよび関数はSQL問合せを透過的に生成してデータベースに送信します。その後、データベースは問合せを実行し、通常は結果もプロキシ・オブジェクトとして返して、データとクライアント間のデータ移動を最小限に抑えます。これは、結果によっては大きくなる可能性があるためです。
データベース表またはビューは、data.frame
のサブクラスであるore.frame
オブジェクトで表されます。その他のOML4Rクラスは、vector
から継承されるore.vector
など、対応するRクラスから継承されます。OML4Rは、Oracle Databaseのデータ型をOML4Rのクラスに(たとえば、NUMBER
を完全なマップ・リストに)マップします。
透過層メソッドおよび関数を使用して、分析用のデータベース常駐データを準備できます。次に、他のOML4Rパッケージの関数を使用してモデルを構築し、それを使用してデータをスコアリングできます。
例2-2 Rでの種ごとの花弁の長さの平均の調査
この例では、Rデータ・フレームirisからIRIS_TABLEという表を作成します。次に、オーバーロードされた集計関数を使用して、種ごとに花弁の長さの平均を計算します。
ore.create(iris, table = 'IRIS_TABLE') aggplen = aggregate(IRIS_TABLE$Petal.Length, by = list(species = IRIS_TABLE$Species), FUN = mean) aggplenこの例のリスト
R> ore.create(iris, table = 'IRIS_TABLE') R> aggplen = aggregate(IRIS_TABLE$Petal.Length, by = list(species = IRIS_TABLE$Species), FUN = mean) R> aggplen species x setosa setosa 1.462 versicolor versicolor 4.260 virginica virginica 5.552
例2-3 前の例に対応するSQL
この例では、前の例のaggregate
関数に対応するSQLを示します。
SELECT "Species", AVG("Petal.Length") FROM IRIS_TABLE GROUP BY "Species" ORDER BY "Species"; Species AVG("PETAL.LENGTH") ----------- ------------------- setosa 1.4620000000000002 versicolor 4.26 virginica 5.552
2.4.2 Rのデータ型およびクラスの透過層サポート
Oracle Machine Learning for Rの透過層には、Rデータ型をOracle Databaseデータ型にマップするクラスおよびデータ型があります。
これらのクラスおよびデータ型について、次の各項で説明します。
- Oracle Machine Learning for Rのデータ型およびクラスについて
OML4Rには、Rデータ型をSQLデータ型にマップするデータ型があります。 - ore.frameクラスについて
- Rのネーミング規則のサポート
OML4Rは、ore.frame
列に対して、より制限的なOracle Databaseのネーミング規則ではなくRのネーミング規則を使用します。 - RおよびOracle Machine Learning for Rのクラス・タイプの強制変換について
OML4R関数の一部は、Rオブジェクトおよびクラス・タイプをOML4Rのore
オブジェクトおよびタイプに強制変換します。
2.4.2.1 Oracle Machine Learning for Rのデータ型およびクラスについて
OML4Rには、Rデータ型をSQLデータ型にマップするデータ型があります。
Rセッションでは、Rオブジェクトからデータベース・オブジェクトを作成するか、データベース・データからRオブジェクトを作成すると、OML4RはRデータ型をSQLデータ型に変換し、可能な場合はその逆を実行します。
OML4Rは、OML4Rのクラスのインスタンスであるオブジェクトを作成します。OML4Rは、多くの標準のR関数をオーバーロードし、それらでOML4Rのクラスおよびデータ型を使用できるようにします。R言語の構造および構文は、Oracle Databaseオブジェクトにマップされているオブジェクトでサポートされます。
表2-1 R、OML4RおよびSQLのデータ型のマッピング
Rデータ型 | OML4Rデータ型 | SQLデータ型 |
---|---|---|
キャラクタ・モードの |
|
|
整数モードの |
|
|
論理モードの |
|
|
数値モードの |
|
|
|
|
|
|
|
|
|
|
|
なし |
サポートなし |
ユーザー定義のデータ型 参照データ型 |
ノート:
-
タイプ
ore.datetime
のオブジェクトはタイム・ゾーン設定をサポートしていないため、かわりに、システム・タイム・ゾーンSys.timezone
が使用可能な場合はそれを使用し、Sys.timezone
を使用できない場合はGMTを使用します。 -
SQL VARCHAR2データ型は、埋込みRの入力データ引数を介してR文字データ型にマップされます。ユーザーは、
as.factor()
を使用して、必要に応じて文字変数をRファクタに変換できます。
2.4.2.2 ore.frameクラスについて
これはdata.frame
に相当するOML4Rのオブジェクトです。通常は、データベース表のプロキシであるore.frame
オブジェクトを取得します。次に、ore.frame
プロキシ・オブジェクトに新しい列を追加するか、他の変更を行います。そのような変更は、基礎となる表には影響しません。その後でore.frame
オブジェクトのソース表からデータをリクエストした場合は、透過層関数が選択リストに追加の列があるSQL問合せを生成しますが、その表は変更されません。
Rでは、data.frame
の要素に明示的な順序付けがあります。整数索引付けを使用して要素を指定できます。一方、リレーショナル・データベース表では行の順序が定義されないため、Rデータ構造に直接マップできません。
OML4Rには、ore.frame
オブジェクトの順序付けられたものと順序付けられていないものの両方があります。表に主キー(行内で個別のタプルを形成する1つ以上の列のセット)がある場合は、SELECT
文でORDER BY
句を使用することで順序付けられた結果を生成できます。ただし、リレーショナル・データの順序付けは負荷が高く、多くの場合、透過層操作では不要です。たとえば、ore.frame
でsummary
関数を呼び出す場合、サマリー統計の計算に順序付けは必要ありません。
関連項目:
ore.create
の詳細は、「一時データベース表の作成」を参照してください。
例2-4 data.frameおよび対応するore.frameのクラス
この例では、様々なデータ型を含む列があるdata.frame
を作成し、data.frame
の構造を表示します。この例では次に、ore.push
関数をコールして、data.frame
のデータのコピーが含まれるデータベースに一時表を作成します。ore.push
の呼出しでは、その表のプロキシであるore.frame
オブジェクトも生成されます。この例では、ore.frame
オブジェクトとdata.frame
オブジェクトおよびore.frame
オブジェクトにある列のクラスを表示します。
df <- data.frame(a="abc", b=1.456, c=TRUE, d=as.integer(1), e=Sys.Date(), f=as.difftime(c("0:3:20", "11:23:15"))) ore.push(df) class(df$a) class(df$b) class(df$c) class(df$d) class(df$e) class(df$f)例のリスト
R> df <- data.frame(a="abc", + b=1.456, + c=TRUE, + d=as.integer(1), + e=Sys.Date(), + f=as.difftime(c("0:3:20", "11:23:15"))) R> ore.push(df) R> class(df$a) [1] "character" R> class(df$b) [1] "numeric" R> class(df$c) [1] "logical" R> class(df$d) [1] "integer" R> class(df$e) [1] "Date" R> class(df$f) [1] "difftime"
親トピック: Rのデータ型およびクラスの透過層サポート
2.4.2.3 Rのネーミング規則のサポート
OML4Rは、ore.frame
列に対して、より制限的なOracle Databaseのネーミング規則ではなくRのネーミング規則を使用します。
ore.frame
の列には、30バイトより長く、二重引用符を含む、一意でない名前を付けることができます。
親トピック: Rのデータ型およびクラスの透過層サポート
2.4.2.4 RおよびOracle Machine Learning for Rのクラス・タイプの強制変換について
OML4R関数の一部は、Rオブジェクトおよびクラス・タイプをOML4Rのore
オブジェクトおよびタイプに強制変換します。
汎用のas.ore
関数は、インメモリーRオブジェクトをore
オブジェクトに強制変換します。より厳密なas.ore.character
などの関数は、オブジェクトを特定の型に強制変換します。ore.push
関数は、Rクラス・タイプをore
クラス・タイプに暗黙的に強制変換し、ore.pull
関数は、ore
クラス・タイプをRクラス・タイプに強制変換します。これらの関数の詳細は、「一時データベース表の作成」を参照してください。
例2-5 RおよびOML4Rのクラス・タイプの強制変換
この例では、ore
オブジェクトへのRオブジェクトの強制変換を示します。Rのinteger
オブジェクトを作成した後、汎用メソッドas.ore
を使用してore.integer
であるore
オブジェクトに強制変換します。この例では、Rオブジェクトを他の様々なore
クラス・タイプに強制変換します。Embedded R Execution関数でのas.factor
の使用例は、例10-9を参照してください。
x <- 1:10 class(x) X <- as.ore(x) class(X) Xn <- as.ore.numeric(x) class(Xn) Xc <- as.ore.character(x) class(Xc) Xc Xf <- as.ore.factor(x) Xf例2-5のリスト
R> x <- 1:10 R> class(x) [1] "integer" R> X <- as.ore(x) R> class(X) [1] "ore.integer" attr(,"package") [1] "OREbase" R> Xn <- as.ore.numeric(x) R> class(Xn) [1] "ore.numeric" attr(,"package") [1] "OREbase" R> Xc <- as.ore.character(x) R> class(Xc) [1] "ore.character" attr(,"package") [1] "OREbase" R> Xc [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" R> Xf <- as.ore.factor(x) R> Xf [1] 1 2 3 4 5 6 7 8 9 10 Levels: 1 10 2 3 4 5 6 7 8 9
親トピック: Rのデータ型およびクラスの透過層サポート
2.5 Oracle Machine Learning for Rのグローバル・オプション
OML4Rには、様々な関数に適用されるグローバル・オプションがあります。
表2-2に、OML4Rのグローバル・オプションおよび説明を示します。
表2-2 OML4Rのグローバル・オプション
グローバル | 説明 |
---|---|
Oracle Databaseへのシリアライズ中にオブジェクト内の参照される環境を空の環境で置き換えるかどうかを指定する論理値。 このグローバル・オプションは次のOML4R関数で使用されます。
|
|
|
|
Embedded R Executionで使用する優先並列度。次のうちの1つ。
デフォルト値は |
|
|
|
OML4Rの反復関数が反復ごとに出力を印刷するかどうかを指定する論理値。デフォルト値は |
|
順序付けが必要な関数で行名がない |