AI 101
次元削減とは何か?

次元削減とは何か?
次元削減は、データセットの次元を削減するために使用されるプロセスであり、多くの特徴量を取り込み、それらをより少ない特徴量として表現します。例えば、次元削減は、20の特徴量を持つデータセットをわずか数個の特徴量に削減するために使用される可能性があります。次元削減は、多くの特徴量からクラスを自動的に作成する教師なし学習タスクで一般的に使用されます。次元削減がなぜ、どのように使用されるのかをよりよく理解するために、高次元データに関連する問題と、次元を削減する最も一般的な方法を見ていきます。
次元が多いと過学習につながる
次元とは、データセット内の特徴量/列の数を指します。 機械学習では、より多くの特徴量を持つことがより正確なモデルを作成するため、良いことであるとしばしば想定されます。しかし、より多くの特徴量が必ずしもより良いモデルにつながるわけではありません。 データセットの特徴量は、モデルにとってどれだけ有用かという点で大きく異なり、多くの特徴量はほとんど重要でない場合があります。さらに、データセットに含まれる特徴量が多ければ多いほど、特徴量の異なる組み合わせがデータ内で十分に表現されていることを保証するためには、より多くのサンプルが必要になります。したがって、サンプル数は特徴量の数に比例して増加します。より多くのサンプルと特徴量は、モデルがより複雑である必要があることを意味し、モデルがより複雑になるにつれて、過学習に対してより敏感になります。モデルはトレーニングデータ内のパターンを学習しすぎて、サンプル外のデータに一般化できなくなります。 データセットの次元を削減することには、いくつかの利点があります。前述のように、より単純なモデルは過学習しにくくなります。なぜなら、モデルは特徴量が互いにどのように関連しているかについて、より少ない仮定を立てるだけで済むからです。さらに、次元が少ないということは、アルゴリズムをトレーニングするために必要な計算能力が少なくて済むことを意味します。同様に、次元が小さいデータセットには、より少ないストレージスペースしか必要ありません。データセットの次元を削減することは、多くの特徴量を持つデータセットには適さないアルゴリズムを使用できるようにすることもできます。
一般的な次元削減手法
次元削減は、特徴選択または特徴エンジニアリングによって行うことができます。特徴選択とは、エンジニアがデータセットの最も関連性の高い特徴量を特定するものであり、特徴エンジニアリングは、他の特徴量を組み合わせたり変換したりして新しい特徴量を作成するプロセスです。 特徴選択とエンジニアリングは、プログラムによって、または手動で行うことができます。特徴量を手動で選択・エンジニアリングする場合、特徴量とクラス間の相関関係を発見するためにデータを可視化するのが一般的です。この方法で次元削減を行うことは非常に時間がかかる可能性があるため、次元削減の最も一般的な方法のいくつかには、Python用のScikit-learnのようなライブラリで利用可能なアルゴリズムの使用が含まれます。これらの一般的な次元削減アルゴリズムには、主成分分析(PCA)、特異値分解(SVD)、線形判別分析(LDA)が含まれます。 教師なし学習タスクの次元削減に使用されるアルゴリズムは通常PCAとSVDであり、教師あり学習の次元削減に活用されるアルゴリズムは通常LDAとPCAです。教師あり学習モデルの場合、新しく生成された特徴量は単に機械学習分類器に入力されます。ここで説明する用途は一般的な使用例に過ぎず、これらの技術が使用される唯一の条件ではないことに注意してください。上記の次元削減アルゴリズムは単なる統計的手法であり、機械学習モデルの外でも使用されます。
主成分分析

写真: 主成分が特定された行列
は、データセットの特性/特徴量を分析し、最も影響力のある特徴量を要約する統計的手法です。データセットの特徴量は、データの特性の大部分を維持しながら、より少ない次元に広がる表現に結合されます。これは、データを高次元表現からわずか数次元の表現に「圧縮」するものと考えることができます。 PCAが有用である可能性のある状況の例として、ワインを記述するさまざまな方法について考えてみてください。CO2レベル、通気レベルなど、多くの非常に具体的な特徴量を使用してワインを記述することは可能ですが、そのような具体的な特徴量は、特定の種類のワインを識別しようとする際には比較的役に立たない可能性があります。代わりに、味、色、年代などのより一般的な特徴量に基づいて種類を識別する方が賢明でしょう。PCAを使用して、より具体的な特徴量を組み合わせ、より一般的で有用で、過学習を引き起こしにくい特徴量を作成することができます。 PCAは、入力特徴量が互いに対して平均からどのように変化するかを決定し、特徴量間に何らかの関係が存在するかどうかを判断することによって実行されます。これを行うために、共分散行列が作成され、データセットの特徴量の可能なペアに対する共分散で構成される行列が確立されます。これは変数間の相関関係を決定するために使用され、負の共分散は逆相関を示し、正の相関は正の相関を示します。 データセットの主(最も影響力のある)成分は、初期変数の線形結合を作成することによって作成されます。これは、固有値と固有ベクトルと呼ばれる線形代数の概念の助けを借りて行われます。主成分が互いに無相関になるように結合が作成されます。初期変数に含まれる情報の大部分は最初の数個の主成分に圧縮されます。つまり、元のデータセットの情報をより小さな次元空間に含む新しい特徴量(主成分)が作成されたことを意味します。
特異値分解

写真: By Cmglee – Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=67853297
は、行列内の値を単純化するために使用され、行列をその構成要素に分解し、その行列での計算を容易にします。SVDは実数値行列と複素数行列の両方に利用できますが、この説明の目的上、実数値の行列をどのように分解するかを検討します。 実数値データで構成される行列があり、PCAの目標と同様に、行列内の列/特徴量の数を削減することが目標であると仮定します。 PCAと同様に、SVDは行列の変動性を可能な限り維持しながら、行列の次元を圧縮します。行列Aを操作したい場合、行列AをU、D、& Vと呼ばれる他の3つの行列として表すことができます。行列Aは元のx * y 要素で構成され、行列UはX * X要素で構成されます(直交行列です)。 行列Vは、y * y要素を含む別の直交行列です。行列Dはx * y要素を含み、対角行列です。 行列Aの値を分解するには、元の特異行列の値を新しい行列内に見つかる対角値に変換する必要があります。 直交行列を扱う場合、それらが他の数値で乗算されても、その特性は変化しません。したがって、この特性を利用して行列Aを近似することができます。 直交行列をMatrix Vの転置と一緒に乗算すると、元のAと等価な行列が得られます。 Matrix Aが行列U、D、Vに分解されると、それらにはMatrix A内に見つかったデータが含まれます。しかし、行列の左端の列にはデータの大部分が保持されます。これらの最初の数列だけを取り、はるかに少ない次元を持ち、A内のデータの大部分を含むMatrix Aの表現を持つことができます。
線形判別分析

左: LDA前の行列、右: LDA後の軸、分離可能
は、多次元グラフからデータを取得し、線形グラフに再投影するプロセスです。これは、2つの異なるクラスに属するデータポイントで満たされた2次元グラフを考えることで想像できます。ポイントが散らばっていて、2つの異なるクラスをきれいに分離する線を引くことができないと仮定します。この状況に対処するために、2Dグラフにあるポイントを1Dグラフ(線)に削減することができます。この線にはすべてのデータポイントが分布し、データを可能な限り最適に分離する2つのセクションに分割できることが期待されます。 LDAを実行する際には、2つの主要な目標があります。最初の目標はクラスの分散を最小化することであり、2番目の目標は2つのクラスの平均間の距離を最大化することです。これらの目標は、2Dグラフに存在する新しい軸を作成することによって達成されます。新しく作成された軸は、前述の目標に基づいて2つのクラスを分離するように機能します。軸が作成された後、2Dグラフにあるポイントが軸に沿って配置されます。 元のポイントを新しい軸に沿った新しい位置に移動するには、3つのステップが必要です。最初のステップでは、個々のクラスの平均間の距離(クラス間分散)を使用して、クラスの分離可能性が計算されます。2番目のステップでは、異なるクラス内の分散が計算されます。これは、対象クラスのサンプルと平均の間の距離を決定することによって行われます。最後のステップでは、クラス間の分散を最大化する低次元空間が作成されます。 LDA手法は、ターゲットクラスの平均が互いに離れている場合に最良の結果を達成します。分布の平均が重なっている場合、LDAは線形軸でクラスを効果的に分離できません。












