機械学習手法とアルゴリズム
機械学習の問題は、マイニング手法に分類されます。機械学習のそれぞれのファンクションによって、モデル化と解決が可能な問題のクラスを指定します。アルゴリズムとは、特定の種類の問題を解決するための数学的手続きです。
機械学習手法
各機械学習手法は、モデル化して解決できる問題の種類を指定します。
Oracle Machine Learningを使用する場合には、機械学習の手法およびアルゴリズムの基本を理解している必要があります。
機械学習手法は、一般に教師ありと教師なしという2つのカテゴリに分けられます。教師あり学習、教師なし学習という概念は、人工知能の1分野といわれる機械学習学に由来しています。
人工知能とは、自身の知能や動作を自主的に提示するシステムの実装や研究を指します。機械学習においては、デバイスが自身のパフォーマンスから学習して、自らのファンクションを変更できるようにする技術が扱われます。
関連トピック
教師あり学習
教師あり学習は、指示あり学習とも呼ばれます。この種の学習プロセスは、既知である従属属性またはターゲットからの指示を受けます。
教師あり機械学習では、ターゲットの動作を一連の独立属性や予測子の機能として説明するように試みます。教師あり学習は、通常、予測モデルに帰着します。
教師ありモデルの作成には、トレーニングという、ターゲット値が既知である多数のケースをソフトウェアで分析するプロセスが伴います。トレーニング・プロセスでは、モデルは予測を可能にするデータのパターンを"学習"します。たとえば、販促に反応しやすい顧客の識別を目的とするモデルは、過去に販促に反応した、または反応しなかったと認識されている多数の顧客の特性を分析することによって、トレーニングされている必要があります。
Oracle Machine Learningでは、次の教師あり機械学習機能をサポートしています。
表1-1 教師あり機械学習機能
関数 | 説明 | 問題例 | サポートされるアルゴリズム |
---|---|---|---|
特徴の選択または属性評価 | ターゲット属性の予測において最も重要な属性を識別する。 | 提携カード・プログラムに対する顧客の反応を指定し、最も重要な予測子を検出する。 | |
分類 | 個々のクラスに項目を割り当て、ある項目が属するクラスを予測する。 | 1群の顧客に関する人口統計データを指定し、提携カード・プログラムに対する顧客の反応を予測する。 | |
回帰 | 連続する値を概算および予測する。 | 1群の顧客に関する人口統計データおよび購入データを指定し、顧客の年齢を予測する。 | |
ランキング | ある項目の確率を他の項目に対して予測する | 閲覧履歴に基づいてオンライン顧客に製品をお薦めする | XGBoost |
時系列 | 等間隔の時点で取得されたターゲット値の既知の履歴に基づいてターゲット値を予測する | 海の波の長さを予測し、コスト、在庫要件、顧客満足度を見積るなどの戦術的な問題に対処する。 | 指数平滑法 |
教師なし学習
教師なし学習は、指示を受けません。従属属性と独立属性は区別されません。モデルの作成においてアルゴリズムを導く既知の結果は存在しません。
教師なし学習は、記述目的で使用できます。教師なし学習での目標は、パターン検出です。また、予測の作成にも使用できます。
Oracle Machine Learningでは、次の教師なし機械学習機能をサポートしています。
表1-2 教師なし機械学習機能
関数 | 説明 | 問題例 | サポートされるアルゴリズム |
---|---|---|---|
異常検出 | "通常の"データの特性を満たさない行(ケース、例)を識別する | 一群の顧客に関する人口統計データを前提として、データセットの異常な顧客の購買行動(詐欺を示唆する可能性があるもの)を識別する。 | |
相関 | データ内で同時発生する傾向にある項目を検出し、その同時発生の原則となるルールを特定する。 | 一緒に購入される傾向にある項目群を検出し、その関係性を特定する。 | Apriori |
クラスタリング | データ内で自然なグループを検出する。 | 人口統計データを複数のクラスタに分割し、ある個人が特定のクラスタに属する確率をランク付けする | |
特徴抽出 | 元の属性の一次結合を使用して、新しい属性(特徴)を作成する。 | 一群の顧客に関する人口統計データを前提として、元の属性をより少ない新しい属性に変換する。 | |
行重要度 | 行重要度の手法は、大規模なデータセットのディメンション性低減に使用されます。行重要度により、データ・セットの最も影響力のある行を特定します。 | データ・セットを前提として、モデル構築の前に最小重要度の値を満たす行を選択する。 | curマトリックス分解 |
機械学習アルゴリズムとは
アルゴリズムとは、特定の種類の問題を解決するための数学的手続きです。一部の機械学習手法では、複数のアルゴリズムから選択できます。
各アルゴリズムは、様々な特性を持つ特定のタイプのモデルを生成します。機械学習の問題には、複数のアルゴリズムを組み合せて使用すると最適に解決できるものがあります。たとえば、初めに特徴抽出モデルを使用して1組の最適化された予測子を作成し、続いて分類モデルを使用してその結果に対する予測を作成するといった方法があります。
非構造化テキストについて
非構造化テキストには、ビジネスを成功させるために重要な情報が含まれている場合があります。
機械学習のアルゴリズムは、量的データまたは質的データに対して動作します。量的データは順序付けされます。これは、NUMBER
やFLOAT
などの数値データ型の列に格納されます。質的データは、カテゴリまたは分類によって識別されます。これは、VARCHAR2
やCHAR
などの文字データ型の列に格納されます。
非構造化テキスト・データは、量的でも質的でもありません。非構造化テキストには、Webページ、ドキュメント・ライブラリ、PowerPointプレゼンテーション、製品仕様、電子メール、レポートのコメント・フィールド、コール・センターのノートなどの項目が含まれます。非構造化テキストは、企業のすべてのデータの4分の3以上を占めると言われています。非構造化テキストから意味のある情報を抽出することは、ビジネスの成功にとって不可欠となります。
機械学習とOracle Textについて
テキストに対する機械学習の操作とOracle Textについて説明します。
テキストに対する機械学習操作は、機械学習の手法をテキストの用語に適用するプロセスであり、テキスト機能またはトークンとも呼ばれます。テキスト用語とは、テキスト・ドキュメントから抽出して、量的な重みを割り当てられた単語または単語のグループです。テキスト用語は、操作および分析の対象となるテキストの基本単位です。
Oracle Textとは、用語抽出、単語とテーマの検索およびその他のテキスト問合せ用ユーティリティを提供するOracle Databaseテクノロジです。トレーニング・データにテキスト列が存在する場合、Oracle Machine Learning for SQLでは、Oracle Textユーティリティおよび用語加重戦略を使用して、機械学習操作のためにテキストを変換します。OML4SQLは、ユーザー提供の構成情報をOracle Textに渡し、その結果をモデル作成プロセスで使用します。
関連トピック
パーティション化モデルについて
複数のモデルを編成および表現するパーティション化されたモデルについて説明します。
データ・セットにモデルを構築し、それを新しいデータに適用すると、新しいデータおよび進化するデータに対して実行したときに予測が一般的になりパフォーマンスが悪くなる場合があります。これを克服するために、データ・セットをいくつかの特性に基づいて異なる部分に分割できます。Oracle Machine Learning for SQLはパーティション化されたモデルをサポートしています。パーティション化されたモデルにより、ユーザーは各データ・パーティションごとに一種のアンサンブル・モデルを構築できます。トップレベル・モデルには、自動的に生成されるサブモデルがあります。サブモデルは、属性オプションに基づいています。たとえば、データ・セットに4つの値を持つREGION
という属性があり、それをパーティション化された属性として定義したとします。これで、この属性に対して4つのサブモデルが作成されます。サブモデルは自動的に管理され、単一のモデルとして使用されます。パーティション化されたモデルは、一般的な機械学習タスクを自動化し、複数のターゲット・モデルを通じてより高い精度を達成できる可能性があります。
パーティション化されたモデルとそのサブモデルは、ファースト・クラスの永続データベース・オブジェクトとして存在します。永続とは、パーティション化モデルにディスク上の表現があることを意味します。パーティション・モデルでは、多数のパーティションを持つパーティション化モデルのパフォーマンスが向上し、パーティション・モデル内の単一モデルの削除も改善されました。
パーティション化されたモデルを作成するには、ODMS_PARTITION_COLUMNS
設定を含めます。パーティションの数を定義するには、ODMS_MAX_PARTITIONS
設定を含めます。予測を行う場合は、トップレベル・モデルを使用する必要があります。正しいサブモデルは、属性、属性オプションおよびパーティション設定に基づいて自動的に選択されます。スコアリングする際に、パーティション列をUSING
句の一部として含める必要があります。GROUPING
ヒントは、パーティション化されたモデルをスコアリングするときに、機械学習スコアリング関数に適用されるオプションのヒントです。
パーティション名、キー値およびパーティション化モデルの構造は、ALL_MINING_MODEL_PARTITIONS
ビューにあります。
関連トピック
参照:
GROUPING
ヒントの使用方法は、『Oracle Database SQL言語リファレンス』を参照してください。
パーティション・モデルの詳細は、Oracle Machine Learning for SQLユーザーズ・ガイドを参照してください。
パーティション化されたモデルの作成プロセス
Oracle Machine Learning for SQLでパーティション化されたモデルを作成するには、パーティション化キーが必要です。
パーティション化キーとは、入力データ・セットからの1つ以上列(最大16)で構成されるカンマ区切りリストです。パーティション化キーは、パーティション化キーの離散値に基づいて、入力データを水平方向にスライスします。つまり、パーティション化は、連続した値に対する範囲のパーティション化とは対照的に、リスト値として実行されます。パーティション化キーは、NUMBER
およびVARCHAR2
のデータ型の列のみをサポートしています。
作成プロセス中、入力データ・セットは、指定されたキーの個別値に基づいてパーティション化されます。各データ・スライス(一意のキー値)が、その独自のモデル・パーティションとなります。結果として作成されるモデル・パーティションは分かれておらず、スタンドアロン・モデルとして表示されません。パーティション化されたモデルのパーティションの最大数のデフォルト値は、1000パーティションです。異なるパーティション値を設定することもできます。入力データ・セットのパーティション数が、定義された最大数を超えている場合、Oracle Machine Learning for SQLによって例外がスローされます。
パーティション化されたモデルでは、すべてのパーティションに共通の特徴、およびパーティション固有の特徴が編成されます。共通の特徴は、次のメタデータで構成されます。
-
モデル名
-
機械学習ファンクション
-
機械学習アルゴリズム
-
すべてのパーティションによって参照される、すべてのmachine learningモデル属性のスーパー・セット(シグネチャ)
-
ユーザー定義列変換の共通セット
-
グローバルと解釈されるユーザー指定またはデフォルトの作成設定。たとえば、Auto Data Preparation (ADP)設定
パーティション化されたモデル内のDDL
パーティション化されたモデルのDDL操作を使用したメンテナンスについて学習します。
モデルの削除またはパーティションの削除
Oracle Machine Learning for SQLは、特定のパーティション名の単一のモデル・パーティションの削除をサポートしています。
1つのパーティションしか残っていない場合、そのパーティションを明示的に削除することはできません。かわりに、そのパーティションを削除する前に別のパーティションを追加するか、モデル自体の削除を選択できます。パーティション化されたモデルを削除する場合、すべてのパーティションは、単一のアトミック操作で削除されます。パフォーマンスの観点から、DROP_PARTITION
オプションは効率的に動作するため、REPLACE
オプションを使用するのではなく、DROP_PARTITION
、ADD_PARTITION
の順に実行することをお薦めします。
パーティションの追加
Oracle Machine Learning for SQLは、単一のパーティションまたは複数のパーティションの既存のパーティション化されたモデルへの追加をサポートしています。
追加は、入力データ・セットおよび既存のパーティション化されたモデルの名前に基づいて発生します。操作は、入力データ・セットおよび既存のパーティション化されたモデルをパラメータとして使用します。パーティション・キーは、入力データ・セットから抽出され、モデル・パーティションは入力データ・セットに対して作成されます。このパーティションは、パーティション化されたモデルとして追加されます。新規パーティションのパーティション・キーがモデル内の既存パーティションと競合する場合、次の3つの手法から選択して競合を解決できます。
-
ERROR
: パーティションを追加することなくADD操作を終了します。 -
REPLACE
: 競合するキーが検出された既存のパーティションを置き換えます。 -
IGNORE
: 競合するキーがある行を排除します。
入力データ・セットに複数のキーが含まれている場合、複数のパーティションが作成されます。モデル内のパーティションの合計数が、モデルの作成時に指定したユーザー定義最大数を超えると、エラーが発生します。パーティション数のデフォルトしきい値は1000です。
パーティション化されたモデルのスコアリング
パーティション化されたモデルのスコアリングは、パーティション化されていないモデルのそれと同じです。
機械学習ファンクションの構文は同じですが、オプションのヒントを提供するように拡張されています。オプションのヒントは、パーティション化されたモデルのスコアリングを含む問合せのパフォーマンスに影響を及ぼす可能性があります。
パーティション化されたモデルのスコアリングでは、パーティショニング・キーの作成中に使用されるシグネチャ列が、スコアリング・データセットに存在している必要があります。この列は、一意のパーティション・キーを形成するために組合されます。この一意のキーは、特定の基底となるモデル・パーティションにマップされ、識別されたモデル・パーティションがその行のスコアリングに使用されます。
スコアリングに必要なパーティション化オブジェクトが、問合せの実行時にオンデマンドでロードされ、システム・グローバル領域(SGA)メモリーに応じて有効期限が切れます。
CREATE_MODEL2
プロシージャはモデルの作成に使用されます。パーティション属性はCUST_GENDER
です。この属性には、MとFの2つのオプションがあります。%script
BEGIN DBMS_DATA_MINING.DROP_MODEL('SVM_MOD_PARTITIONED');
EXCEPTION WHEN OTHERS THEN NULL; END;
/
DECLARE
v_setlst DBMS_DATA_MINING.SETTING_LIST;
BEGIN
v_setlst('ALGO_NAME'):= 'ALGO_SUPPORT_VECTOR_MACHINES';
v_setlst('SVMS_KERNEL_FUNCTION') :='SVMS_LINEAR';
v_setlst('ODMS_PARTITION_COLUMNS'):='CUST_GENDER';
DBMS_DATA_MINING.CREATE_MODEL2(
MODEL_NAME => 'SVM_MOD_PARTITIONED',
MINING_FUNCTION => 'REGRESSION',
DATA_QUERY => 'SELECT * FROM CUSTOMERS_DEMO',
SET_LIST => v_setlst,
CASE_ID_COLUMN_NAME => 'CUST_ID',
TARGET_COLUMN_NAME => 'YRS_RESIDENCE');
END;
出力内容は次のようになります。
PL/SQL procedure successfully completed.
---------------------------
PL/SQL procedure successfully completed.
%script
SELECT cust_id, YRS_RESIDENCE,
ROUND(PREDICTION(SVM_MOD_PARTITIONED USING *),2) pred_YRS_RESIDENCE
FROM CUSTOMERS_DEMO;
CUST_ID YRS_RESIDENCE PRED_YRS_RESIDENCE
100100 4 4.71
100200 2 1.62
100300 4 4.66
100400 6 5.9
100500 2 2.07
100600 3 2.74
100700 6 5.78
100800 5 7.22
100900 4 4.88
101000 7 6.49
101100 4 3.54
101200 1 1.46
101300 4 4.34
101400 4 4.34 ...
関連トピック
自動データ準備
ほとんどのアルゴリズムでは、なんらかの形のデータ変換が必要となります。Oracle Machine Learning for SQLは、モデルの作成プロセス時にアルゴリズムで必要とされる変換を自動的に実行できます。
ユーザーは、この自動変換に独自の変換を追加したり、すべての変換を独自に管理できます。
自動変換を計算する際、Oracle Machine Learning for SQLでは、経験則を使用して特定のアルゴリズムの一般的な要件を見つけます。多くの場合、このプロセスによってモデルの質がある程度確保されます。
ビニングおよび正規化は、機械学習アルゴリズムで一般的に必要とされる変換です。
ビニング
ビニングは離散化とも呼ばれ、連続データおよび離散データのカーディナリティを減らすための手法です。ビニングでは、関連する複数の値をビンにグループ化して、個別値の数を減らします。
ビニングを行うと、モデルの質をほとんど落とすことなく、リソースの使用率やモデル作成の応答時間を大幅に向上させることが可能です。ビニングを行うと、属性間の関係が補強され、モデルの質が向上する場合があります。
教師ありビニングは、データの重要な特性を使用してビン境界を判断する高い知能を備える形式のビニングです。教師ありビニングでは、ターゲットとの結合分布を考慮した単一予測子のデシジョン・ツリーによってビン境界が特定されます。教師ありビニングは、量的属性と質的属性の両方に使用できます。
ADPによるデータの変換方法
各アルゴリズムに対してADPがどのようにデータを準備するかを、次の表に示します。
表1-3 Oracle Machine LearningのアルゴリズムとADP
参照:
-
アルゴリズム固有のデータ準備の詳細は、Oracle Machine Learning for SQL概要の第III部 アルゴリズムを参照してください
Oracle Machine Learning for SQLの欠損値の処理
Oracle Machine Learning for SQLの欠損値の処理の概要を説明します。
欠損値の処理方法は、アルゴリズムおよびデータの性質(質的または量的、スパースまたはランダムな欠損)によって異なります。次の表に、欠損値の処理方法の概要を示します。
ノート:
Oracle Machine Learning for SQLでは、自動データ準備(ADP)が使用されているかどうかにかかわらず、同じ欠損値処理が実行されます。
表1-4 アルゴリズムによる欠損値処理
欠損データ | EM、GLM、NMF、k-Means、SVD、SVM | DT、MDL、NB、OC | Apriori |
---|---|---|---|
ランダムな欠損値(量的) |
欠損している量的な値はアルゴリズムにより平均値に置換される。 期待値最大化(EM)では、ガウス分布でモデル化された列のみ置換される。 |
すべての欠損データがスパースとして解釈される。 |
|
ランダムな欠損値(質的) |
一般化線形モデル(GLM)、Non-Negative Matrix Factorization (NMF)、k-Meansおよびサポート・ベクター・マシン(SVM)により、欠損質的値がモードで置換されます。 特異値分解(SVD)は、質的データをサポートしていません。 EMは欠損している質的な値を置換しない。EMはNULLを、独自の頻度カウントとともに、個別値として扱う。 |
欠損値はそのままランダムな欠損として処理される。 |
すべての欠損データがスパースとして解釈される。 |
スパース・データ(量的) |
スパースな量的データはアルゴリズムにより0(ゼロ)に置換される。 |
O-Clusterはネストしたデータをサポートしないため、スパース・データもサポートされない。デシジョン・ツリー(DT)、最小記述長(MDL)およびNaive Bayes (NB)では、スパースな量的データはゼロに置換される。 |
スパース・データは処理される。 |
スパース・データ(質的) |
SVD以外のすべてのアルゴリズムは、スパースな質的データをゼロ・ベクターで置換する。SVDは質的データをサポートしない。 |
O-Clusterはネストしたデータをサポートしないため、スパース・データもサポートされない。DT、MDLおよびNBでは、スパースな質的データは |
スパース・データは処理される。 |
データ準備
データの準備は、機械学習の問題解決の重要なステップです。
モデルの質は、そのモデルの作成(トレーニング)に使用されるデータの質に大きく左右されます。どのような機械学習プロジェクトでも、その取組みの多くの時間がデータの準備に費やされます。データは慎重に調査、整備および変換する必要があり、アルゴリズムに適したデータ準備方法を適用する必要があります。
データ準備のプロセスは、テスト用であるかスコアリング用であるかに関係なく、モデルが適用されるあらゆるデータについて、そのモデルのトレーニングに使用されたデータと同じ変換を行う必要があるため、一層複雑になっています。
Oracle Machine Learning for SQLによるデータ準備の簡略化
Oracle Machine Learning for SQL (OML4SQL)は、組込みのデータ準備、自動データ準備、DBMS_DATA_MINING_TRANSFORM
PL/SQLパッケージによるカスタム・データ準備、モデル詳細を提供し、機械学習アルゴリズム全体で一貫したアプローチを採用して、欠損データとスパース・データを管理します。
OML4SQLには、データ準備プロセスを大幅に簡略化するための複数の機能があります。
-
組込みのデータ準備: モデルのトレーニングに使用される変換は、モデルに組み込まれ、モデルが新しいデータに適用されるたびに自動的に実行されます。モデルの変換を指定する場合、1回指定すれば済みます。
-
自動データ準備(ADP): Oracle Machine Learning for SQLでは、自動データ準備モードがサポートされています。Oracle Machine Learning for SQLでは、ADPが有効になっている場合は、アルゴリズムによって必要とされるデータ変換は自動的に実行されます。変換の指示は、ユーザーが指定した変換の指示とともにモデルに組み込まれます。
-
欠損値およびスパース・データの自動管理: Oracle Machine Learning for SQLでは、すべての機械学習アルゴリズムにわたり一貫した方法で、スパース性および欠損値が処理されます。
-
透明性: Oracle Machine Learning for SQLでは、モデル内部の属性のビューであるモデル詳細が提供されます。ユーザーが解釈可能な形式に変換済属性値をマップする逆変換によって、モデル内部の詳細を把握できます。可能である場合、属性値は元の列値に逆変換されます。逆変換は、教師ありモデルのターゲットにも適用されるため、スコアリングの結果は、元のターゲットの単位と同じ単位になります。
-
カスタム・データ準備用のツール: Oracle Machine Learning for SQLでは、
DBMS_DATA_MINING_TRANSFORM
PL/SQLパッケージに多くの一般的な変換ルーチンが用意されています。こられのルーチンを使用することも、SQLで独自のルーチンを開発することもできます(両方行うことも可能)。SQL言語は、データベースに変換を実装するために適しています。カスタムの変換指示は、ADPとともに使用することも、ADPのかわりに使用することもできます。
ケース・データ
機械学習におけるケース・データの重要性について説明します。
ほとんどの機械学習アルゴリズムは、各ケースの情報が個別の行に格納される単一レコード・ケース・データに対して動作します。ケースのデータ属性は、列に格納されます。
データがトランザクションに編成される場合、1つのケース(1つのトランザクション)のデータが複数の行に格納されます。トランザクショナル・データの例は、マーケット・バスケット・データです。ネイティブ・トランザクショナル・データに対する操作が可能な相関ルールを唯一の例外として、Oracle Machine Learning for SQLのアルゴリズムには単一レコード・ケースの編成が必要になります。
テキスト・データ
非構造化テキスト・データを機械学習用に準備および変換します。
Oracle Machine Learning for SQLでは、CLOB
列および長いVARCHAR2
列は、自動的に非構造化テキストとして解釈されます。また、短いVARCHAR2
、CHAR
、BLOB
およびBFILE
の列を非構造化テキストとして指定できます。非構造化テキストには、Webページ、ドキュメント・ライブラリ、PowerPointプレゼンテーション、製品仕様、電子メール、レポートのコメント・フィールド、コール・センターのノートなどのデータ項目が含まれます。
Oracle Machine Learning for SQLでは、Oracle Textユーティリティおよび用語の重み付け方針を使用して、非構造化テキストを分析用に変換します。テキスト変換では、テキスト用語が抽出され、テキスト索引の数値が付与されます。テキスト変換プロセスは、モデルおよび個々の属性に対して構成可能です。変換されると、テキストはOracle Machine Learning for SQLアルゴリズムでマイニングできます。
関連トピック
データ要件
Oracle Machine Learningのデータの保存方法と表示方法について説明します。
機械学習の操作には、1つの表またはビュー内で定義されたデータが必要です。各レコードの情報は別個の行に格納する必要があります。このデータ・レコードは一般的にケースと呼ばれます。各ケースは、必要に応じて一意のケースIDで識別されます。表またはビュー自体は、ケース表と呼ばれます。
機械学習に使用できる表の一例として、SH
スキーマのCUSTOMERS
表が挙げられます。各顧客のすべての情報は、1つの行に格納されています。CUST_ID
列にケースIDが格納されます。次の例に示されている行は、SH.CUSTOMERS
から選択されています。
ノート:
Oracle Machine Learningには、すべての種類のモデルに単一レコード・ケースのデータが必要です。ただし、ネイティブ・トランザクショナル・データで構築できる相関モデルを除きます。
例1-1 ケース表の例
SQL> select cust_id, cust_gender, cust_year_of_birth, cust_main_phone_number from sh.customers where cust_id < 11;
出力内容は次のようになります。
CUST_ID CUST_GENDER CUST_YEAR_OF_BIRTH CUST_MAIN_PHONE_NUMBER
------- ----------- ---- ------------- -------------------------
1 M 1946 127-379-8954
2 F 1957 680-327-1419
3 M 1939 115-509-3391
4 M 1934 577-104-2792
5 M 1969 563-667-7731
6 F 1925 682-732-7260
7 F 1986 648-272-6181
8 F 1964 234-693-8728
9 F 1936 697-702-2618
10 F 1947 601-207-4099
関連トピック
列のデータ型
ケース表の列データの様々なタイプについて理解します。
ケース表の列には、各ケースを説明する属性が含まれます。例1-1で、属性はCUST_GENDER
、CUST_YEAR_OF_BIRTH
およびCUST_MAIN_PHONE_NUMBER
です。属性は、教師ありモデルの予測子または教師なしモデルの記述子です。ケースIDのCUST_ID
は、特別な属性として表示できます(これは予測子または記述子ではありません)。
Oracle Machine Learning for SQLでは、DATE
、TIMESTAMP
、RAW
およびLONG
以外の標準のOracleデータ型がサポートされています。Oracle Machine Learningでは、case_idで日付型(datetime、date、timestamp)がサポートされるほか、テキスト列として解釈されるCLOB
/BLOB
/FILE
および次のコレクション型がサポートされます:
DM_NESTED_CATEGORICALS
DM_NESTED_NUMERICALS
DM_NESTED_BINARY_DOUBLES
DM_NESTED_BINARY_FLOATS
ノート:
データ型がBOOLEAN
の属性は、次の値を持つ数値として処理されます。TRUE
は1
、FALSE
は0
、NULL
は不明な値として解釈されます。CASE_ID_COLUMN_NAME
属性では、BOOLEAN
データ型はサポートされません。
スコアリング要件
Oracle Machine Learning for SQLでのスコアリングの実行方法を学習します。
ほとんどの機械学習のモデルは、スコアリングというプロセスで別個のデータに適用できます。Oracle Machine Learning for SQLは、分類、回帰、異常検出、クラスタリングおよび特徴抽出のスコアリング操作をサポートします。
スコアリング・プロセスでは、スコアリング・データ内の列名と、モデルの作成に使用された列の名前とがマッチングされます。スコアリング・プロセスでは、スコアリング・データ内にすべての列が存在している必要はありません。データ型が一致しない場合、Oracle Machine Learning for SQLでは型の強制が試行されます。たとえば、PRODUCT_RATING
という列がトレーニング・データ内ではVARCHAR2
型であるのに対し、スコアリング・データ内ではNUMBER
型である場合、Oracle Machine Learning for SQLではTO_CHAR()
関数が効果的に適用され、スコアリング・データ内の列の型が変換されます。
テスト・データまたはスコアリング・データ内の列には、作成データ内の対応する列と同じ変換を行う必要があります。たとえば、作成データ内のAGE
列が数値から値CHILD
、ADULT
およびSENIOR
に変換された場合、スコアリング・データ内のAGE
列にも同じ変換を実行して、モデルが適切に評価できるようにする必要があります。
ノート:
Oracle Machine Learning for SQLでは、ユーザー指定の変換指示をモデルに埋め込んで、その指示をモデルの適用時に再適用できます。変換指示がモデルに組み込まれているときは、テスト・データセットまたはスコアリング・データセットに対してその変換指示を指定する必要はありません。
Oracle Machine Learning for SQLでは、自動データ準備(ADP)もサポートされています。ADPを有効にすると、アルゴリズムで必要とされる変換が自動的に実行され、ユーザーが指定した変換とともにモデル内に組み込まれます。
参照:
自動データ変換と組込みのデータ変換の詳細は、「自動データ準備」および「モデルへの変換の組込み」を参照してください
属性について
属性とは、機械学習で使用されるデータの項目のことです。属性は、変数、フィールドまたは予測子とも呼ばれます。
予測モデルでは、属性は、特定の結果に影響を及ぼす予測子です。記述モデルでは、自然なグループまたは相関を見つけるために分析される情報項目です。たとえば、肩書き、雇用日、給与、年齢、性別などの属性を持つ従業員データの表です。
データ属性とモデル属性
データ属性とは、モデルの作成、テストまたはスコアリングに使用されるデータセットの列のことです。モデル属性とは、モデルによって内部的に使用されるデータ表現のことです。
データ属性とモデル属性が同一である場合もあります。たとえば、値S
、M
、L
が格納されているSIZE
という列が、モデル作成用としてアルゴリズムによって使用される属性です。モデル属性SIZE
は、内部的にはその導出元であるデータ属性と同じである可能性が高いと考えられます。
一方、ある製品グループの売上高が格納されているネストした列SALES_PROD
は、モデル属性とは一致しません。データ属性はSALES_PROD
となりますが、モデル属性は、対応する売上高と関連付けられた各製品(ネストした列の各行)です。
変換によっても、データ属性とモデル属性の不一致が起こります。たとえば、変換によって2つのデータ属性に計算が適用され、その結果が新しい属性に格納されたとします。この新しい属性は、対応するデータ属性を持たないモデル属性になります。ビニング、正規化および外れ値の処理などの変換では、ケース表のデータ属性とモデルの属性表現の不一致が起こります。
関連トピック
ターゲット属性
機械学習におけるターゲットの意味と、様々なターゲットのデータ型について説明します。
教師ありモデルのターゲットは特別な属性です。トレーニング・データのターゲット列には、モデルのトレーニングに使用される履歴値が格納されます。テスト・データのターゲット列には、予測の比較対象になる履歴データが格納されます。スコアリングでは、ターゲットの予測が生成されます。
ターゲットは、クラスタリング・モデル、特徴抽出モデル、相関モデルおよび異常検出モデルでは使用されません。
ネストした列および非構造化データ(BFILE
、CLOB
、BLOB
など)の列は、ターゲットとして使用できません。
表1-5 ターゲットのデータ型
機械学習機能 | ターゲットのデータ型 |
---|---|
分類 |
|
回帰 |
|
*_MINING_MODEL_ATTRIBUTES
ビューを問い合せると、特定のモデルのターゲットを見つけることができます。
量的、質的および非構造化テキスト
量的、質的および非構造化テキスト属性について説明します。
モデル属性は、量的、質的または非構造化(テキスト)です。データ属性(ケース表の列)は、Oracleデータ型を持ちます(「列のデータ型」を参照)。
量的属性は、論理上は無限の数の値を持つことができます。これらの値には暗黙的な順序があり、値間の差も順序付けられます。Oracle Machine Learning for SQLでは、NUMBER
、FLOAT
、BINARY_DOUBLE
、BINARY_FLOAT
、BOOLEAN
、DM_NESTED_NUMERICALS
、DM_NESTED_BINARY_DOUBLES
およびDM_NESTED_BINARY_FLOATS
を量的として解釈します。
質的属性は、有限数の離散的カテゴリまたはクラスを特定する値を持ちます。値には、暗黙的な順序は関連付けられていません。一部のカテゴリは2値(yesまたはno、maleまたはfemaleなど)であり、取り得る値が2つのみです。その他のカテゴリは多クラスであり、3つ以上の値(small、mediumおよびlargeなど)を持ちます。
Oracle Machine Learning for SQLでは、デフォルトでCHAR
およびVARCHAR2
を質的として解釈しますが、これらの列は非構造化データ(テキスト)の列として識別される場合もあります。Oracle Machine Learning for SQLでは、DM_NESTED_CATEGORICALS
の列を質的として解釈します。CLOB
、BLOB
およびBFILE
の列には、常に非構造化データが含まれます。
分類モデルのターゲットは質的です。(分類モデルのターゲットが量的である場合、このターゲットは質的として解釈されます。)回帰モデルのターゲットは量的です。属性評価モデルのターゲットは、質的または量的のいずれかです。
関連トピック
モデル・シグネチャ
モデルのシグネチャと作成データで考慮されるデータ型について学習します。
モデルのシグネチャは、モデルの作成に使用されたデータ属性のセットです。シグネチャの属性の一部またはすべては、スコアリング用に存在している必要があります。モデルは、可能なかぎり欠損している列も埋めようとします。名前は同じだがデータ型が異なる列が存在している場合、モデルではそのデータ型の変換が試行されます。余分な未使用の列が存在している場合、それらは無視されます。
必ずしも作成データのすべての列がモデルのシグネチャに含まれるとはかぎりません。アルゴリズム固有の基準により、モデルが特定の列を無視することがあります。また、変換によって一部の列が除外される場合もあります。モデルの作成で実際に使用されたデータ属性のみがシグネチャに含まれます。
モデル属性の名前の詳細
モデル・ディテール
モデルの詳細によって、モデル属性、およびアルゴリズムによるモデル属性の処理に関する情報がわかります。それぞれのアルゴリズムに対応するモデル・ディテール・ビューを利用することをお薦めします。
モデル属性には変換式や逆変換式が関連付けられます。変換はモデルを作成するアルゴリズムの処理の前にデータ属性に適用されます。逆変換はモデルの作成後にモデル属性に適用されますので、モデルの詳細は元のデータ属性の形式または可能なかぎりそれに近い形式で表されます。
逆変換では、モデルの透明性がサポートされます。逆変換は、アルゴリズムによって内部的に処理されるデータを、ユーザーが解釈可能な形式で表示します。
非推奨になったGET_MODEL_DETAILS
アルゴリズムにはそれぞれ別個のGET_MODEL_DETAILS
ルーチンが存在します。Oracle Database 12cリリース2以降、GET_MODEL_DETAILS
は非推奨になっています。それぞれのアルゴリズムのモデル・ディテール・ビューを使用することをお薦めします。
関連トピック
ネストしたデータの使用
1対多の関係の表間の結合は、ネストされた列によって表されます。
Oracle Machine Learning for SQLでは、各レコードが個別の行に含まれた、単一レコード・ケース形式のケース表が必要です。データの一部または全部が複数レコード・ケース形式で、各レコードが複数の行に含まれている場合はどうなるでしょうか。1つの属性で一連の値または値の集合(学生のテスト・スコアや顧客に購入された製品)を表す場合はどうなるでしょうか。
このような1対多の関係は通常、表間の結合として実装します。たとえば、顧客表を売上表と結合し、購入された製品のリストを各顧客に関連付けることができます。
Oracle Machine Learning for SQLでは、ネストした列を通じてディメンション化されたデータをサポートしています。ケース表にディメンション化されたデータを含めるには、ビューを作成し、機械学習のネストした表タイプの1つに結合データをキャストします。ネストした列の各行は、属性の名前と値のペアから構成されます。Oracle Machine Learning for SQLでは、ネストした各行が、別個の属性として内部的に処理されます。
ノート:
O-Clusterは、ネストしたデータをサポートしていない唯一のアルゴリズムです。
関連トピック
ネストしたオブジェクト型
ネストした表は、他のデータ型のかわりに使用できるオブジェクト・データ型です。
Oracle Databaseでは、実在するエンティティをデータベース内のオブジェクトとしてモデル化できる、ユーザー定義のデータ型がサポートされています。コレクション型は、複数値属性をモデル化するためのオブジェクト・データ型です。ネストした表はコレクション型です。ネストした表は、他のデータ型が使用できる場所であればどこでも使用できます。
OML4SQLでは、次のネストしたオブジェクト型をサポートしています。
DM_NESTED_BINARY_DOUBLES
DM_NESTED_BINARY_FLOATS
DM_NESTED_NUMERICALS
DM_NESTED_CATEGORICALS
ネストした型の説明は、この例を参照してください。
例1-3 OML4SQLのネストしたデータ型
describe dm_nested_binary_double
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE BINARY_DOUBLE
describe dm_nested_binary_doubles
DM_NESTED_BINARY_DOUBLES TABLE OF SYS.DM_NESTED_BINARY_DOUBLE
Name Null? Type
------------------------------------------ -------- ---------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE BINARY_DOUBLE
describe dm_nested_binary_float
Name Null? Type
----------------------------------------- -------- ---------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE BINARY_FLOAT
describe dm_nested_binary_floats
DM_NESTED_BINARY_FLOATS TABLE OF SYS.DM_NESTED_BINARY_FLOAT
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE BINARY_FLOAT
describe dm_nested_numerical
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE NUMBER
describe dm_nested_numericals
DM_NESTED_NUMERICALS TABLE OF SYS.DM_NESTED_NUMERICAL
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE NUMBER
describe dm_nested_categorical
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE VARCHAR2(4000)
describe dm_nested_categoricals
DM_NESTED_CATEGORICALS TABLE OF SYS.DM_NESTED_CATEGORICAL
Name Null? Type
----------------------------------------- -------- ----------------------------
ATTRIBUTE_NAME VARCHAR2(4000)
VALUE VARCHAR2(4000)
例: 機械学習用のトランザクショナル・データの変換
この例では、変換前と変換後のデータを使用して、4つの地域の製品の売上を比較しています。
例1-4は、ある売上表のビューのデータです。4つの地域で販売された製品のうちの3種類の売上が表示されています。このデータは、各ケース(製品)の売上が複数の行に格納されているため、製品レベルでの機械学習には適していません。
例1-5は、このデータを機械学習に変換する方法を示しています。ケースID列はPRODUCT
です。SALES_PER_REGION
(DM_NESTED_NUMERICALS
型のネストした列)がデータ属性です。この表は、各ケースの情報が単一行に格納されているため、製品ケース・レベルでの機械学習に適しています。
ノート:
この例は、単に概念を表したものです。実際には、処理前にデータがピボットされることはありません。
例1-4 複数レコード・ケース形式の地域ごとの製品売上
PRODUCT REGION SALES
------- -------- ----------
Prod1 NE 556432
Prod2 NE 670155
Prod3 NE 3111
.
.
Prod1 NW 90887
Prod2 NW 100999
Prod3 NW 750437
.
.
Prod1 SE 82153
Prod2 SE 57322
Prod3 SE 28938
.
.
Prod1 SW 3297551
Prod2 SW 4972019
Prod3 SW 884923
.
.
例1-5 単一レコード・ケース形式の地域ごとの製品売上
PRODUCT SALES_PER_REGION
(ATTRIBUTE_NAME, VALUE)
------ --------------------------
Prod1 ('NE' , 556432)
('NW' , 90887)
('SE' , 82153)
('SW' , 3297551)
Prod2 ('NE' , 670155)
('NW' , 100999)
('SE' , 57322)
('SW' , 4972019)
Prod3 ('NE' , 3111)
('NW' , 750437)
('SE' , 28938)
('SW' , 884923)
.
.
例1-6 SALES_PER_REGIONから導出されたモデル属性
PRODUCT SALES_PER_REGION.NE SALES_PER_REGION.NW SALES_PER_REGION.SE SALES_PER_REGION.SW
------- ------------------ ------------------- ------------------ -------------------
Prod1 556432 90887 82153 3297551
Prod2 670155 100999 57322 4972019
Prod3 3111 750437 28938 884923
.
.
欠損値の処理
スパース・データおよび欠損値について説明します。
Oracle Machine Learning for SQLでは、スパース・データとランダムな欠損値を含むデータが区別されます。後者は、一部の属性値が不明であることを意味します。一方、スパース・データには、データ内には表されていないが既知であるとみなされる値が含まれます。
スパース・データの典型例はマーケット・バスケット・データです。何百または何千個もある取扱い商品の中で、個々のケース(バスケットまたはトランザクション)に含まれる商品はわずかです。商品の値はすべて既知ですが、すべての商品がバスケットの中に存在するわけではありません。存在する商品に対しては特定の数量がありますが、存在していない商品についてはスパース(既知の数量は0(ゼロ))となります。
Oracle Machine Learning for SQLでは、欠落データは次のように解釈されます:
-
ランダムな欠損: 単純な(ネストしていない)データ型の列内の欠損値は、ランダムに欠損しているとみなされます。
-
スパース: ネストした列内の欠損値は、スパース性を示します。
欠損値とスパース・データの識別基準
欠損値とスパース・データを解釈するための実例をいくつか説明します。
この例では、データがスパースであるのかランダムに欠損しているのかをOracle Machine Learning for SQLがどのように識別するかについて説明します。
売上表のスパース性
Oracle Machine Learning for SQLがネストした列の欠損データを解釈する方法について理解します。
ある売上表には、一定期間内に複数の店舗で顧客に販売された製品グループのPOSデータが格納されます。それぞれの顧客は、少数の製品しか購入しません。顧客が購入しなかった製品は、売上表の行として表示されません。
1人の顧客が各製品に支払った金額を求める場合、購入されなかった製品の金額は0(ゼロ)と推定されます。表に行が表示されなくても、この値はランダムな欠損でも未知でもなくゼロになります。
売上データは(製品、店舗、顧客、時間で)ディメンション化され、多くの場合、機械学習用のネストしたデータとして表されます。
ネストした列の欠損値は常にスパース性を示すため、マイニング対象のデータに関してこの解釈が適切であることを確認する必要があります。たとえば、大規模な映画データベースのユーザーの映画評価が格納されている複数レコード・ケースのデータセットをマイニングしようとする場合、欠損している評価は未知の(ランダムに欠損している)値ですが、Oracle Machine Learning for SQLではこのデータをスパースとして扱い、欠損値については評価を0 (ゼロ)と推定します。
顧客データの表の欠損値
一部の属性でデータを使用できない場合、それらの欠損値はランダムに欠損しているとみなされます。
顧客に関する人口統計データが格納されている顧客データの表があるとします。ケースID列は顧客IDです。属性は、年齢、学歴、職業、性別、世帯人員などです。データがすべてそろっていない顧客もいます。欠損値がある場合は、ランダムに欠損しているとみなされます。たとえば、顧客1の年齢と顧客2の職業がデータにない場合、その情報は不明です。スパース性を示すことにはなりません。
この顧客データはディメンション化されないことに注意してください。ケースとその各属性の間には1対1のマッピングが存在します。どの属性もネストしていません。
欠損値処理の変更
欠損データをスパースまたはランダムな欠損として置換します。
Oracle Machine Learning for SQLで、欠損データを、ランダムな欠損としてではなくスパースとして、またはスパースとしてではなくランダムな欠損として処理する必要がある場合、モデルを作成する前に変換を行う必要があります。
欠損値をスパースとして処理する必要があるが、OML4SQLではその欠損値がランダムな欠損値として解釈される場合、NVL
などのSQL関数を使用すると、NULLを「NA」などの値に置換できます。OML4SQLでは、特定の値が存在する場合、欠損値処理は行われません。
欠損しているネストした属性をランダムな欠損として処理する場合は、ネストした行を、別々の列に格納された物理的な属性に変換できます(ただし、ケース表の列数がデータベースによる制限(列以内)を超えない場合に限ります)。存在しうる属性の名前をすべて入力し、それらをNULLとして指定してください。かわりに、存在していないすべての商品について、ネストした列に行を挿入し、各行に平均値やモードなどの値を割り当てます。
関連トピック
ケース表の準備
機械学習のデータ準備での最初のステップは、ケース表の作成です。
列のデータ型の変換
OMLでは、文字列の列は質的として、数値列は量的として、BOOLEAN
列は量的として処理されます。質的として扱う数値列がある場合は、文字列に変換する必要があります。たとえば、週の日数などです。
たとえば、郵便番号は様々な郵便区を識別しますが、順番は示しません。郵便番号を数値列に格納すると、量的属性として解釈されます。この場合、列データがモデルによって質的属性として使用されるように、データ型を変換する必要があります。これには、TO_CHAR
関数を使用して1から9の数字を変換し、LPAD
関数を使用して先頭の0 (ある場合)を保持します。
LPAD(TO_CHAR(ZIPCODE),5,'0')
データ型がBOOLEAN
の属性は、次の値を持つ数値として処理されます。TRUE
は1
、FALSE
は0
、NULL
は不明な値として解釈されます。CASE_ID_COLUMN_NAME
属性では、BOOLEAN
データ型はサポートされません。
日時列値の抽出
EXTRACT
関数を使用して、日時または間隔値から値を抽出できます。
EXTRACT
関数は、日時式または間隔値の式から、指定された日時フィールドの値を抽出して戻します。抽出できる値は、YEAR
、MONTH
、DAY
、HOUR
、MINUTE
、SECOND
、TIMEZONE_HOUR
、TIMEZONE_MINUTE
、TIMEZONE_REGION
およびTIMEZONE_ABBR
です。
sales_ts
ビューから抽出されます。sales_ts
ビューには、CUST_ID
列とTIME_STAMP
列が含まれています。 select cust_id, time_stamp,
extract(year from time_stamp) year,
extract(month from time_stamp) month,
extract(day from time_stamp) day_of_month,
to_char(time_stamp,'ww') week_of_year,
to_char(time_stamp,'D') day_of_week,
extract(hour from time_stamp) hour,
extract(minute from time_stamp) minute,
extract(second from time_stamp) second
from sales_ts
テキスト変換
Oracle Machine Learning for SQLを使用したテキスト処理について説明します。
Oracle Machine Learning for SQLを使用して、テキストを処理できます。ケース表内のテキスト列は、適切に変換すると処理できるようになります。
テキスト列は、ビューではなく、表内に存在している必要があります。変換プロセスでは、いくつかのOracle Textの機能が使用され、表の各行のテキストがそれぞれ別個のドキュメントとして処理されます。各ドキュメントは、数値およびテキスト・ラベルを持つ用語と呼ばれるテキスト・トークンのセットに変換されます。テキスト列は、DM_NESTED_NUMERICALS
のネストした列に変換されます。
ビジネスおよび分野に依存した変換について
ビジネス上の問題に従い、データを変換する必要がある理由を理解します。
一部の変換は、ビジネス上の問題の定義によって決まります。たとえば、高い利益を生む顧客を予測するモデルを作成する場合を考えます。現在の顧客の利益データはドルなどの通貨で表されているため、どの程度が「高い利益」なのかを定義する必要があります。この場合、モデルを作成する前に、これまでの経験から導かれたいくつかの式を使用して、利益属性を「低」、「中」および「高」の範囲に再コード化できます。
その他の一般的なビジネス上の変換には、データ情報の経過時間への変換があります。たとえば、出生日は年齢に変換できます。
専門知識は、データをどのように準備するのかを決める上で非常に重要になることがあります。たとえば、一部のアルゴリズムでは、通常の範囲から遠く外れた値がデータに含まれていると、信頼できない結果が生成されます。場合によっては、これらの値は誤差または異常値を表します。別の場合では、これらの値が意味のある情報を提供することもあります。
関連トピック
ネストした列の作成
トランザクショナル・データでは、各ケースの情報が複数の行に含まれています。データソースにトランザクショナル・データが含まれる場合(複数レコード・ケース)、ネストした列でトランザクションをケース・レベルに集計する必要があります。
例として、本番レベルでの機械学習時のスター・スキーマにおける売上データがあります。売上は、その製品が多数の店舗で多数の顧客に対してある期間にわたって販売されるため、単一の製品(ケース)の多数の行に格納されます。
参照:
トランザクショナル・データのネストした列への変換の詳細は、「ネストしたデータの使用」を参照してください。