15 CUR行列分解

属性評価のためにCUR分解ベースのアルゴリズムを使用する方法を学習します。

15.1 CUR行列分解について

CUR行列分解は、データ行列の数少ない実際の列または行(あるいはその両方)を明示的に表す低ランクの行列分解アルゴリズムです。

CUR行列分解は、特異値分解(SVD)と主成分分析(PCA)に取って替わるものとして作成されました。CUR行列分解は、高い統計的レバレッジまたは大きな影響を示す列および行をデータ行列から選択します。CUR行列分解アルゴリズムを実装することで、元のデータ行列から数少ない最も重要な属性または行(あるいはその両方)を識別できます。そのため、CUR行列分解は探索的データ解析の重要な機能です。CUR行列分解は様々な分野に適用可能であり、回帰、分類、クラスタリングを容易にします。

15.2 特異ベクトル

特異値分解(SVD)は、CUR行列分解の最初のステップです。

SVDは、列と行のレバレッジ・スコアを計算するための左右の特異ベクトルを返します。次の行列にSVDを実行します。

A ε Rmxn

行列が次のように因数分解されます。

A=UΣVT

ここで、U = [u1 u2...um]およびV = [v1 v2...vn]は直交行列です。

Σは、対角線上に非負実数σ1,...,σρ を持つ対角行列m×nであり、ρ = min {m,n}、およびσξAξ番目の特異値となります。

uξおよびvξAのξ番目の左右の特異ベクトルとし、Aのj番目の列が上位k個の特異ベクトルと対応する特異値で近似されるようにします。

ここで、vξjξ番目の右特異ベクトルのj番目の座標です。

15.3 統計的レバレッジ・スコア

レバレッジ・スコアとは、行列のランク部分空間について最も代表的な列(または行)を判断する統計のことです。統計的レバレッジ・スコアは、列(または属性)と行の評価を示します。

すべての列の正規化された統計的レバレッジ・スコアは、次のように上位k個の右特異ベクトルから計算されます。

ここで、kはランク・パラメータと呼ばれ、j = 1,...,nとなります。πj>=0とし、 とすると、これらのスコアはn列の確率分布を形成します。

同様に、すべての行の正規化された統計的レバレッジ・スコアは、上位k個の左特異ベクトルから次のように計算されます。

ここで、i = 1,...,mです。

15.4 列(属性)選択と行選択

OML4SQLのCUR行列分解は、属性評価や行重要度に向けて設計されています。レバレッジ(重要度)スコアによってランク付けされた高重要度の属性と行が返されます。列(属性)選択と行選択は、CUR行列分解の最終ステージです。

属性選択: レバレッジ・スコアの高い属性を選択し、それらの名前、スコア(評価)、ランク(評価順)をレポートします。

行選択: レバレッジ・スコアの高い行を選択し、それらの名前、スコア(評価)、ランク(評価順)をレポートします。

  1. CUR行列分解では、最初にすべてのj ε {1,...,n}に対して、pj= min {1,j}の確率でAj番目の列(または属性)を選択します。

  2. ユーザーが行選択を有効にした場合は、すべてのi ε {1,...,m}に対してi = min {1,rπˊi}の確率でAi番目の行を選択します。

  3. 選択したすべての属性(行評価が無効の場合)、または選択したすべての属性と行(行評価が有効の場合)の名前(またはID)とレバレッジ・スコア(評価)をレポートします。

cは近似(予測)列数、rは近似(予測)行数であり、どちらもユーザーが選択できます。

列選択と行選択を実行するには、個々の列および行を選択する確率を計算する必要があります。

次に示すように、各列の確率を計算します。

pj = min {1,cπj}

次のように、各行の確率を計算します。

i = min{1, cπˊi}

確率がしきい値よりも大きい場合は、列または行が1つ選択されます。

15.5 CUR行列分解アルゴリズムの構成

CUR行列分解アルゴリズムの構成について学習します。

例15-1 例

この例では、CUR行列分解アルゴリズムの作成方法を説明します。設定表が作成され、CUR行列分解関連の設定が入力されている場合は、設定表に行を挿入してアルゴリズムを指定します。

INSERT INTO SETTINGS_TABLE (setting_name, setting_value) VALUES
('ALGO_NAME', 'ALGO_CUR_DECOMPOSITION');

次のようにして、モデルを作成します。

BEGIN
DBMS_DATA_MINING.CREATE_MODEL(
model_name          	=> 'model-name',
mining_function     	=> dbms_data_mining.attribute_importance,
data_table_name     	=> 'test_table',
case_id_column_name 	=> 'id',
settings_table_name 	=> 'settings_table');
END;
/

表15-1 重要な設定

対象 設定
属性選択 CURS_APPROX_ATTR_NUM
行選択
  • CURS_ROW_IMPORTANCE
  • CURS_APPROX_ROW_NUM
レバレッジ・スコアおよびランダム・シード
  • CURS_SVD_RANK
  • CURS_RANDOM_SEED

関連項目:

使用可能なモデル設定のリストと解説は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

ノート:

モデル設定と同じ意味でハイパーパラメータという用語も使用されます。

行選択

この機能を使用するには、次のようにして設定表に行を挿入し、行評価が有効であることを指定します。

INSERT INTO SETTINGS_TABLE (setting_name, setting_value) VALUES ('CURS_ROW_IMPORTANCE', 'CURS_ROW_IMP_ENABLE'); 

注意:

行選択は、ユーザーが行評価を有効にし、CASE_ID列が存在する場合にのみ実行されます。