多次元尺度構成法(MDS: Multi-Dimensional Scaling)

Author: Yoshimasa Ogawa
LastModified: 2015-12-19

圓川隆夫『多変量のデータ解析』(1988年, 朝倉書店)第7章「多次元尺度構成法」をPythonで実行します。


In [1]:
%matplotlib inline
import numpy as np
import pandas as pd
from sklearn.manifold import MDS
import matplotlib.pyplot as plt

In [2]:
# データの読み込み
data = pd.read_csv("data/tab71.csv", header=None)
labels = ["Urawa", "Chiba", "Tokyo", "Yokohama", "Hachiouji"]
data.head()


Out[2]:
0 1 2 3 4
0 0 49 22 44 37
1 49 0 34 47 71
2 22 34 0 27 39
3 44 47 27 0 33
4 37 71 39 33 0

In [3]:
# 古典的MDS
mds = MDS(2, dissimilarity="precomputed")
result = mds.fit_transform(data)
pd.DataFrame(result, index=labels)


Out[3]:
0 1
Urawa 12.950357 19.164610
Chiba 24.287706 -29.301523
Tokyo 6.244494 -1.289034
Yokohama -19.041379 -10.677186
Hachiouji -24.441177 22.103133

In [4]:
# プロット
plt.scatter(result[:, 0], result[:, 1])
for i in range(result.shape[0]):
    plt.text(result[:, 0][i], result[:, 1][i], labels[i], fontsize=12)
plt.title("MDS")


Out[4]:
<matplotlib.text.Text at 0x10926c650>