12 CUR行列分解
属性評価のためにCUR分解ベースのアルゴリズムを使用する方法を学習します。
12.1 CUR行列分解について
CUR行列分解は、データ行列の数少ない実際の列または行(あるいはその両方)を明示的に表す低ランクの行列分解アルゴリズムです。
CUR行列分解は、特異値分解(SVD)および主成分分析(PCA)の代替方法として開発されました。CUR行列分解は、高い統計的レバレッジまたは大きな影響を示す列および行をデータ行列から選択します。CUR行列分解アルゴリズムを実装することで、元のデータ行列から少数の最も重要な属性または行(あるいはその両方)を識別できます。そのため、CUR行列分解は探索的データ解析の重要なツールです。CUR行列分解は様々な領域に適用可能であり、回帰、分類およびクラスタリングを容易にします。
関連項目
12.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番目の座標です。
12.3 統計的レバレッジ・スコア
統計的レバレッジ・スコアは、列(または属性)と行の評価を示します。
すべての列の正規化された統計的レバレッジ・スコアは、次のように上位k個の右特異ベクトルから計算されます。
j = 1,...,n
となります。πj>=0とし、
とすると、これらのスコアはn列の確率分布を形成します。
同様に、すべての行の正規化された統計的レバレッジ・スコアは、上位k個の左特異ベクトルから次のように計算されます。
ここで、i = 1,...,m
です。
12.4 列(属性)選択と行選択
列(属性)選択と行選択は、CUR行列分解の最終段階です。
属性選択: レバレッジ・スコアの高い属性を選択し、それらの名前、スコア(評価)、ランク(評価順)をレポートします。
行選択: レバレッジ・スコアの高い行を選択し、それらの名前、スコア(評価)、ランク(評価順)をレポートします。
-
CUR行列分解では、最初にすべての
j ε {1,...,n}
に対して、pj= min {1,cπj}
の確率でAのj番目の列(または属性)を選択します。 -
ユーザーが行選択を有効にした場合は、すべての
i ε {1,...,m}
に対してpˊi = min {1,rπˊi}
の確率でAのi番目の行を選択します。 -
選択したすべての属性(行評価が無効の場合)、または選択したすべての属性と行(行評価が有効の場合)の名前(またはID)とレバレッジ・スコア(評価)をレポートします。
cは近似(予測)列数、rは近似(予測)行数であり、どちらもユーザーが選択できます。
列選択と行選択を実行するには、個々の列および行を選択する確率を計算する必要があります。
次に示すように、各列の確率を計算します。
pj = min {1,cπj}
次のように、各行の確率を計算します。
pˊi = min{1, cπˊi}
確率がしきい値よりも大きい場合は、列または行が1つ選択されます。
12.5 CUR行列分解アルゴリズムの構成
CUR行列分解アルゴリズムの構成について学習します。
例12-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;
/
行選択
この機能を使用するには、次のようにして設定表に行を挿入し、行評価が有効であることを指定します。
INSERT INTO SETTINGS_TABLE (setting_name, setting_value) VALUES ('CURS_ROW_IMPORTANCE', 'CURS_ROW_IMP_ENABLE');
ノート:
行選択は、ユーザーが行評価を有効にし、CASE_ID
列が存在する場合にのみ実行されます。