3次元点群に対して主​成分分析を使用した直​交回帰の近似の仕方

20 views (last 30 days)
雄大
雄大 on 5 Jul 2023
MATLAB内で提供されている以下のコードについてです
openExample('stats/orthoregdemo')
求めたいのは平面ではなく、直線です。
点群のデータを任意のものに変換するとしたらどういった変更を加えたら良いでしょうか。
例えば、csvファイル等から3次元の点群の座標を読み込みたいです。

Answers (1)

交感神経優位なあかべぇ
Edited: 交感神経優位なあかべぇ on 23 Jul 2023
下記に3次元空間内での近似直線を示すサンプルを書きました。
近似直線の通る点 s は、s = [dirVect] .* t + [meanX]になります。
% サンプルデータの作成(CSVデータなどからの読み取りに変更)
rng(5,'twister');
X = mvnrnd([0 0 0], [1 .2 .7; .2 1 0; .7 0 1],50);
% 主成分分析(https://jp.mathworks.com/help/stats/principal-component-analysis-pca.html)
% 1行目は、サンプルデータの近似直線の傾きを示す方向ベクトル。
% (2行目は、上記近似直線の直行成分に対する方向ベクトル。近似平面を作成する場合は、1行目と2行目が必要。)
% (3行目は、近似平面の法線ベクトル。近似平面の作成は、3行目のみでも可。)
coeff = pca(X)
coeff = 3×3
0.6774 -0.0790 0.7314 0.2193 0.9707 -0.0982 0.7022 -0.2269 -0.6749
dirVect = coeff(:,1)'; % 近似直線の傾き成分のみ選択
meanX = mean(X, 1); % サンプルデータの平均値(近似直線は、この点を必ず通る)
% サンプルデータに近似する空間の1次直線の描画(t=0 ~ 10までの直線を描画)
t = [0,10];
lctn = zeros(2,3);
lctn(1,:) = coeff(:,1)' .* t(1) + meanX;
lctn(2,:) = coeff(:,1)' .* t(2) + meanX;
plot3(lctn(:,1), lctn(:,2), lctn(:,3));

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!