しょぼん(´・ω・`)基底をGPLVMで獲得する
データの作成
以下の画像から,しょぼん(´・ω・`)基底を作成します.
まず,画像を読み込みます.
import numpy as np from PIL import Image image = np.asarray(Image.open('./data/shobon.png').convert('L'))
次に,2値化を行いしょぼん(´・ω・`)基底を作成します.
# binarization a = np.where(image < 240) shobon = np.c_[a[1], np.flipud(a[0])] # shobon.shape = (896, 2)
プロットすると以下のような,しょぼん(´・ω・`)基底が得られたことが確認できます.
高次元変換
ガウス分布に従う重みを用いて,100次元の高次元にしょぼん(´・ω・`)基底を変換します. そしてノイズを加えておきます.
dim = 100 w = np.random.normal(size=2*dim).reshape(2, dim) high = shobon @ w high = high + np.random.normal(size=high.shape[0]*high.shape[1]).reshape(high.shape[0], high.shape[1]) # high.shape = (896, 100)
GPLVMによる低次元埋め込み
Gaussian Process Latent Variable Models(GPLVM)とはガウス過程を利用して潜在変数空間に変換する教師なし学習のアルゴリズムです. 応用例として以下の動画のように人間のポーズを低次元埋め込みするなどの試みがあります.
今回はGPLVMを使うためにGPyを使用します.
GPLVMを使って100次元のデータを2次元の低次元埋め込みをします.
# latent gplvm = GPLVM(high, 2) latent = gplvm.X # latent.shape = (896, 2)
結果
得られた潜在変数をプロットすると以下のようになります.
しょぼん(´・ω・`)基底と似たものが獲得できたので成功ですね!!