座標系の変換と次元削減に主成分分析を使用する

座標系の変換にPCAを使用する

pcaは、データの次元削減の一般的に使用される方法であり次元削減の手順は次のとおりです。

  • 最初のk個の固有値を選択します。

このステップを選択しない場合、次元削減は実行されませんが、座標系の変換は実行されます。

特定の手順

1.最初にガウス2次元分布でデータを生成します

matlabコード

mul = [1 2];
SIGMA = [1 0.81; 0.81 1];
data1 = mvnrnd(mul,SIGMA,500);
plot(data1(:,1),data1(:,2),'*');
axis equal

alt

2.PCAを使用して座標軸を選択します

新しい座標の最適化の目的は、座標軸を直交させることであり、これらの座標方向に沿ったデータの分散が最大になります。

clear;clc;close all;
mul = [1 2];
SIGMA = [1 0.81; 0.81 1];
data1 = mvnrnd(mul,SIGMA,500);
[pc,score,latent] = pca(data1);
figure(1)
axis equal
plot(data1(:,1),data1(:,2),'*');
hold on 
quiver(1,2,pc(1,1),pc(2,1),5)
quiver(1,2,pc(1,2),pc(2,2),5)
plot(sore(:,1),score(:,2))

ここに画像の説明を挿入します
このようにして、新しい座標系を確立することができます。

3.mコードのメインプロセスの紹介

  1. ガウス2次元分布でランダムデータを生成する
  2. pca関数の使用
  3. 座標にベクトルを描く

PCAは、多次元次元削減と次元削減効果の評価を実行します

pcaが次元を減らすと、データのローカルマニホールドが失われ、悪い結果が生じることがあります。

1.データを生成する

まず、一連の通常の点を生成する関数を定義します

%生成一系列园点
function [x1,y1] = creat_circle(r1 , r1_ratio,sita_ratio)
sita = 0:0.05:2*pi;
all_num = size(sita);
all_num = all_num(1,2);
%rand : sita
sita_p = randperm(all_num,floor(sita_ratio*all_num));
%rand : r
r_p = rand(1,floor(sita_ratio*all_num))*r1*r1_ratio;
r1_p = repmat(r1,1,floor(sita_ratio*all_num));
r1_p = r1_p - r_p;
x1 = r1_p.*cos(sita_p);
y1 = r1_p.*sin(sita_p);
scatter(x1,y1)

次に、次のコードを実行します。

% 建立坐标点
clear;clc;close all;
[x1,y1] = creat_circle(3,0.05,0.95);
[x2,y2] = creat_circle(5,0.05,0.95);
[x3,y3] = creat_circle(9,0.05,0.95);
num = size(x1);
z1 = normrnd(5,1,1,num(1,2))+x1;
z2 = wgn(1,num(1,2),1)+4+y2;
z3 = rand(1,num(1,2))+2+x3;
% 画
figure(1)
scatter(x1,y1,'r')
hold on
scatter(x2,y2,'b')
scatter(x3,y3,'g')
figure(2)
scatter3(x1,y1,z1,'r')
hold on
scatter3(x2,y2,z2,'b');
scatter3(x3,y3,z3,'g');

生成後、これらのポイントの分布を確認できます。
ここに画像の説明を挿入します別の角度から見ると、パターンがわかります。次元削減後もこの法則を維持したいと考えています。
ここに画像の説明を挿入しますただし、実際には、次元削減(2次元削減)にPCAを使用した後は、次のようになります。
ここに画像の説明を挿入しますこのように、次元削減の効果は良くありません。

おすすめ

転載: blog.csdn.net/qq_43110298/article/details/104478012