2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

寿司ネタの関係性を可視化してみた - 多次元尺度構成法

Posted at

多次元尺度構成法

多次元尺度構成法は、(非) 類似度を元に対象のデータ間の関係性を視覚的に分かりやすい形に変換することができる解析手法です。
ここでは寿司ネタの非類似度データが手元に有るとして、寿司ネタ同士の関係性を可視化します。
環境は MATLAB R2023a です。

データ作成:

Code
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-似ていない) で点数をつけます。

こういうのを非類似度行列と言います。

Code
disp(array2table(DT,'VariableNames',neta,'RowNames',neta)); % 非類似度行列
Output
                  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 }
Code
[X,eigvals] = cmdscale(DT) % 多次元尺度構成法 MDS
Output
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$ で再現できるのかを一応、確認しておきます:

Code
max(abs(D-pdist(X(:,1:3)))) % 部分空間における距離の最大誤差
Output
ans = 0.0655

大丈夫そうですね。

今回扱っている非類似度行列が距離行列であれば (距離の公理を満たすかどうか?)、どうやら固有値は全てゼロ以上になるようなのですが、今回のデータは違ったようです。まぁ、固有値上位3つが支配的なのでそのまま分析を進めても問題有りません。

可視化

こんな感じになります:
(ちなみに、Salmon roe はイクラ、Sea urchin はウニです)

Code
scatter3(X(:,1),X(:,2),X(:,3),'*');
text(X(:,1)+0.25,X(:,2),X(:,3),neta);
title("寿司ネタ同士の関係性");

untitled1.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?