MDS(多次元尺度構成法)
MDS(多次元尺度構成法)とは?
MDS(多次元尺度構成法、Multidimensional Scaling)は、様々なアイテム間の類似度や距離をもとに、アイテム間の関係を視覚的に表現する統計手法です。
この記事ではシミュレーション用にデータを用意し、scikit-learnライブラリに実装されているMDSクラスを利用して視覚化を行ってみたいと思います。
シミュレーション用のデータ
今回は東京、大阪、札幌、福岡の都市間の距離を元にMDSを使用してマッピングしてみたいと思います。
import numpy as np
# 東京、大阪、札幌、福岡の間の飛行距離(単位: km)
distances = np.array([
[0, 400, 830, 880], # 東京からの距離
[400, 0, 1160, 280], # 大阪からの距離
[830, 1160, 0, 1740], # 札幌からの距離
[880, 280, 1740, 0] # 福岡からの距離
])
MDSの実施
from sklearn.manifold import MDS
mds = MDS(n_components=2, dissimilarity="precomputed", random_state=0)
points = mds.fit_transform(distances)
MDSを実施します。
n_componentsパラメーターで次元数を2次元に設定しています。
またdissimilarity パラメータは、どのように距離データが提供されているかを指定するために使用されます。今回は都市間の距離が既に計算された状態なので、precomputedを指定します。
視覚化
最後に2次元空間に配置したデータを視覚化してみます。
import matplotlib.pyplot as plt
plt.figure(figsize=(8, 6))
plt.scatter(points[:, 0], points[:, 1], color='blue', label='Cities')
for i, city in enumerate(['Tokyo', 'Osaka', 'Sapporo', 'Fukuoka']):
plt.text(points[i, 0], points[i, 1], city, fontdict={'weight': 'bold', 'size': 12})
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.title('MDS Results')
plt.legend()
plt.grid(True)
plt.show()直感的に都市間の位置関係が理解できます。