[解決済み] Matlabで固有ベクトルを正しくプロットする
2022-02-14 17:32:13
質問内容
2次元データセットの計算された固有ベクトルをプロットしたいのですが、そのために書いたスクリプトはこちらです。
clear ;
s = [2 2]
set = randn(200,1);
x = normrnd(s(1).*set,1)+3
x = zscore(x) % Standardize
y = normrnd(s(1).*set,1)+2
y= zscore(y)%Standardize
x_0 = mean(x)
y_0 = mean (y)
c = linspace(1,100,length(x)); % color
scatter(x,y,100,c,'filled')
xlabel('1st Feature : x')
ylabel('2nd Feature : y')
title('2D_dataset')
grid on
% gettign the covariance matrix
covariance = cov([x,y])
% getting the eigenvalues and the eigenwert
[eigen_vector, eigen_values] = eig(covariance)
eigen_value_1 = eigen_values(1,1)
eigen_vector_1 =eigen_vector(:,1)
eigen_value_2 = eigen_values(2,2)
eigen_vector_2 =eigen_vector(:,2)
% ploting the eigenvectors !
hold on
x_0 = repmat(x_0,size(eigen_vector_2,1),1);
y_0 = repmat(y_0,size(eigen_vector_1,1),1);
quiver(x_0, y_0,eigen_vector_2*(eigen_value_2),eigen_vector_1*(eigen_value_1),'-r','LineWidth',5)
で、これがその結果です。
計算をダブルチェックしたところ、値は正しいのですが、プロットがめちゃくちゃです 2つのベクトルのプロットで何が欠けているのか、何か思い当たることはありませんか? ありがとうございました。
どのように解決するのですか?
コードの中で、この部分を置き換えてください。
covariance = cov([x,y])
% getting the eigenvalues and the eigenwert
[eigen_vector, eigen_values] = eig(covariance)
eigen_value_1 = eigen_values(1,1)
eigen_vector_1 =eigen_vector(:,1)
eigen_value_2 = eigen_values(2,2)
eigen_vector_2 =eigen_vector(:,2)
% ploting the eigenvectors !
hold on
x_0 = repmat(x_0,size(eigen_vector_2,1),1);
y_0 = repmat(y_0,size(eigen_vector_1,1),1);
quiver(x_0, y_0,eigen_vector_2*(eigen_value_2),eigen_vector_1*(eigen_value_1),'-r','LineWidth',5)
を次のようなコードに置き換えてください。
covariance = cov([x,y]);
[eigen_vector, eigen_values] = eig(covariance);
eigen_vector_1 = eigen_vector(:,1);
eigen_vector_2 = eigen_vector(:,2);
d = sqrt(diag(eigen_values));
hold on;
quiver(x_0,y_0,eigen_vector(1,2),eigen_vector(2,2),d(2),'k','LineWidth',5);
quiver(x_0,y_0,eigen_vector(1,1),eigen_vector(2,1),d(1),'r','LineWidth',5);
hold off;
これで、あなたが求めているものが出来上がりましたか?私にはもっと首尾一貫しているように見えますが...。
関連
-
[解決済み】"配列のインデックスは正の整数または論理値でなければならない"
-
[解決済み] MATLABでctrl+Aを使わずにすべてのコードを自動インデントする
-
[解決済み] MATLABで軸の制限をグローバルに設定し、プロットされたデータの最小値と最大値にする方法は?
-
[解決済み] MATLABで1つの点の最近傍を検索する
-
[解決済み] Matlabでシンプソンの1-3 (h / 3)メソッド
-
[解決済み] 指定された矩形に含まれる配列中の点を見つける( matlab )
-
[解決済み] matlabでchi2gof関数を理解する
-
[解決済み] Matlab - 収束率を計算する
-
[解決済み] ホールドオンでセミログプロット
-
[解決済み】MATLABでxkcd風グラフを作る
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Matlab. 位置2のインデックスが配列の境界を越えています(1を超えてはいけません)。
-
[解決済み] Matlabで矢印を描くには?
-
[解決済み] KroneckerDelta - matlab
-
[解決済み] なぜSIFTはMatlabで利用できないのですか?
-
[解決済み] Matlabで描画しています。図形を保存するか、変数を保存するか?
-
[解決済み] MATLABによるパワーメソッド
-
[解決済み] mnrfitを用いたmatlabでのロジスティック回帰
-
[解決済み] 行列の行にノルム関数を適用する - Matlab [duplicate]
-
[解決済み] matlabで三角行列を作る
-
[解決済み] Matlab: 小図形ウィンドウでYラベルが表示されない