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()直感的に都市間の位置関係が理解できます。