
5.10
詳細:多様体学習
453
5.10.4
非線形埋め込み:
MDS
がうまくいかない場合
これまでの議論では、高次の空間で構成されるデータの回転、平行移動、および拡大などの線形
埋め込みについて考えてきました。埋め込みが非線形であるとき、つまりこの単純な操作の集合を
超えた場合には
MDS
はうまく働きません。次の埋め込みを考えてみましょう。入力を
3
次元空間
内で「
S
」の形に曲げた配置にします。
In[12]: def make_hello_s_curve(X):
t = (X[:, 0] - 2) * 0.75 * np.pi
x = np.sin(t)
y = X[:, 1]
z = np.sign(t) * (np.cos(t) - 1)
return np.vstack((x, y, z))
.T
XS = make_hello_s_curve(X)
これもまた
3
次元データですが、埋め込みがはるかに複雑であることがわかります(図 5-100)。
In[13]: from mpl_toolkits import mplot3d
ax = plt.axes(projection='3d')
ax.scatter3D(XS[:, 0], XS[:, 1], XS[:, 2],
**colorize);
図5-100 3次元に非線形に埋め込まれたデータ
データポイント間の基本的な関係は依然として存在しますが、今回はデータが非線形に変換され
ました。これは「
S
」の形に巻かれています。
このデータに対して単純な ...