次元削減 は 、前処理ステップとして使用できます。データは、他のアルゴリズムをクリーニングする前にデータに適用されます。ラベルなしデータに適用される一般的な次元削減方法があります。
主成分分析、因子分析(隠れ変数とデータがこれらの隠れ変数といくつかのノイズの線形結合であると仮定)、独立成分分析(データが複数のデータソースの混合観測結果であると仮定)。
主成分分析(PCA)は、非常に基本的な次元削減アルゴリズムであり、最も広く使用されている教師なしアルゴリズムの1つであり、データの視覚化、ノイズフィルタリング、特徴抽出(特徴選択ではない)、および特徴エンジニアリングに特に適しています。
次元削減のためのPCAを通じて、決定木とSVMの利点を同時に得ることができます。一方で、意思決定と同じくらい簡単な分類器が得られ、分類間隔はSVMと同じくらい優れています。
前書き
例として2つの変数を取り上げます。主成分分析では、2つの変数間の関係を定量化する方法は、データ内の主軸のセットを見つけ、これらの主軸を使用してデータセットを記述することです。
これらのベクトルはデータの主軸を表します。上の図の矢印の長さは、入力データの各軸の「重要性」を表します。より正確には、主軸に投影されたデータの分散を測定します。主軸上の各データポイントの投影は、データの「主成分」です。
PCAは座標軸を移動します。最初の新しい軸は元のデータで最大の分散を持つ方向を選択し、2番目の新しい軸は最初の軸に直交する2番目に大きな分散を持つ方向を選択します。このプロセスが繰り返され、繰り返し回数は元のデータの特徴の数であり、その後、代表的なコンポーネントが選択されます。
信号処理では、信号の分散が大きく、ノイズの分散が小さいと考えられます。信号対ノイズ比は、信号の分散とノイズの比であり、大きいほど良いです。
次元削減では情報の一部を破棄する必要がありますが、一般に2つの利点があります。1。サンプルのサンプリング密度を上げる。2。データがノイズの影響を受ける場合、最小の固有値に対応する固有ベクトルはノイズに関連することが多いため、ある程度廃棄されると、ノイズ除去効果が得られます。
欠陥:
1. PCAの主な弱点は、データセット内の異常なポイントの影響を受けることがよくあります。
2. PCAは一般的な実装には便利ですが、パーソナライズされた最適化を実現することは困難です。
3. PCAは、データの主な特徴が直交方向に分布していることを前提としています。非直交方向の分散が大きい方向が複数ある場合、PCAの影響は大幅に減少します。
部分的な数学の理解
(PCA次元削減問題の場合)理解:
最近の再構成:可能な限り高次元を表現するために低次元を使用する必要があるため、投影では代表性も考慮する必要があります。
最大の分離可能性:低次元であっても、サンプルは可能な限り区別する必要があります。
これらの2つの点に基づいて、PCAのコスト関数(目的関数)も取得でき、同等の導出になります。
(マーク:下図の低次元表現は理解されていません)
(基底ベクトルの長さは1です)
コーミング:N次元ベクトルのセットをK次元(Kは0より大きい、Nより小さい)に縮小します。目標は、元のデータがこれに変換された後、K単位(モジュラス1)の直交基底を選択することです。基底のグループ、各フィールドペア間の共分散は0であり、フィールドの分散は可能な限り大きくなります(直交性の制約の下で、最大のK分散を取ります)。
使用する
1.PCAを使用して次元を削減します
PCAを使用して次元を削減するということは、1つ以上の最小主成分を削除することを意味します。これにより、最大のデータ分散を保持する低次元のデータ投影が得られ、データの全体的な関係は依然として大まかに保持されます。
例:
データの次元が2次元しかない場合、次元削減の有用性は明らかではないかもしれませんが、データの次元が非常に高い場合、その値は(8 * 8ピクセル、つまり64次元)のように反映されます。手書きの数字の分類。
2.材料の意味
3.材料の数を選択します
PCAを実際に使用する場合、データの記述に使用されるコンポーネントの数を正しく見積もることが非常に重要です。累積分散寄与率をコンポーネント数の関数と見なして、必要なコンポーネントの数を決定できます。
数学的知識に対するPCAの要件:
1。ベクトル内積と行列乗算の知識の幾何学的意味を理解する
2.分散と共分散を理解する
3.線形代数に関連する知識
PythonのPCA
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
pca = PCA(n_components=1)
pca.fit(data_mat)
lowDmat = pca.transform(data_mat) # 降维后的数据
print('降维后的数据维度:', lowDmat.shape)
reconMat = pca.inverse_transform(lowDmat) # s重构数据
print("重构后的数据维度:", reconMat.shape) # 重构数据维度
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(data_mat[:, 0].flatten().A[0], data_mat[:, 1].flatten().A[0], marker='^', s=90)
ax.scatter(reconMat[:, 0], reconMat[:, 1], marker='o', s=90, c='red')
plt.show()