多次元尺度構成法
多次元尺度構成法は、(非) 類似度を元に対象のデータ間の関係性を視覚的に分かりやすい形に変換することができる解析手法です。
ここでは寿司ネタの非類似度データが手元に有るとして、寿司ネタ同士の関係性を可視化します。
環境は MATLAB R2023a です。
データ作成:
D = [1.6, 2.6, 3.9, 4.2, 2.5, 2.9, 4.1, 3.1, 3.9, 2.7];
DT = squareform(D); % 非類似度行列
neta = {'Tuna','Salmon','Shrimp','Salmon roe','Sea urchin'}; % 寿司ネタ
非類似度行列
寿司ネタが似ているか似ていないか (1-似ている, 5-似ていない) で点数をつけます。
こういうのを非類似度行列と言います。
disp(array2table(DT,'VariableNames',neta,'RowNames',neta)); % 非類似度行列
Tuna Salmon Shrimp Salmon roe Sea urchin
____ ______ ______ __________ __________
Tuna 0 1.6 2.6 3.9 4.2
Salmon 1.6 0 2.5 2.9 4.1
Shrimp 2.6 2.5 0 3.1 3.9
Salmon roe 3.9 2.9 3.1 0 2.7
Sea urchin 4.2 4.1 3.9 2.7 0
マグロと鮭は比較的似ているのかなと。この様なデータをマーケッティングのアンケート等で入手できると思います。
こんな時、それぞれの寿司ネタの位置ベクトルが欲しくなります。ここで登場するのが多次元尺度構成法。
詳細は置いておいて、1つ目の戻り値が位置ベクトルを返してくれます。この位置ベクトルは元の関係性を再構築するために支配的な要素の順番に並んでいます (細かく言うと固有値問題を解いていて、固有値の大きさに対応している)。
X=[x_1 ,x_1 ,\cdots ,x_n ]^{\top }
[X,eigvals] = cmdscale(DT) % 多次元尺度構成法 MDS
X = 5x4
-1.7449 -1.0391 -0.1902 -0.2083
-1.2763 0.2307 -0.9132 0.2447
-0.8009 0.6886 1.4895 0.0412
1.3992 1.2282 -0.6166 -0.1657
2.4229 -1.1085 0.2304 0.0882
eigvals = 5x1
13.1433
4.3446
3.5219
0.1402
-0.0000
負の固有値が有るとか、その辺の細かいことは置いておいて、元の関係性 (非類似度) を得られた $X$ で再現できるのかを一応、確認しておきます:
max(abs(D-pdist(X(:,1:3)))) % 部分空間における距離の最大誤差
ans = 0.0655
大丈夫そうですね。
今回扱っている非類似度行列が距離行列であれば (距離の公理を満たすかどうか?)、どうやら固有値は全てゼロ以上になるようなのですが、今回のデータは違ったようです。まぁ、固有値上位3つが支配的なのでそのまま分析を進めても問題有りません。
可視化
こんな感じになります:
(ちなみに、Salmon roe はイクラ、Sea urchin はウニです)
scatter3(X(:,1),X(:,2),X(:,3),'*');
text(X(:,1)+0.25,X(:,2),X(:,3),neta);
title("寿司ネタ同士の関係性");