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 列(属性)選択と行選択
OML4SQLのCUR行列分解は、属性評価や行重要度に向けて設計されています。レバレッジ(重要度)スコアによってランク付けされた高重要度の属性と行が返されます。列(属性)選択と行選択は、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行列分解アルゴリズム設定を構成してモデルを構築します。
アルゴリズム固有の設定でモデルを作成します。アルゴリズム名をALGO_CUR_DECOMPOSITION
として、マイニング機能をATTRIBUTE_IMPORTANCE
として定義します。
関連項目:
使用可能なモデル設定のリストおよび説明は、DBMS_DATA_MINING - アルゴリズム設定: CURマトリックス分解を参照してください。ノート:
モデル設定と同じ意味でハイパーパラメータという用語も使用されます。行選択
CURS_ROW_IMPORTANCE
をCURS_ROW_IMP_ENABLE
に指定します。
ノート:
行選択は、ユーザーが行評価を有効にし、CASE_ID
列が存在する場合にのみ実行されます。