質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2137閲覧

GPyを使ってGPLVMを実行して、潜在空間の座標だけを取り出したい。

physics303

総合スコア89

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/19 00:33

やりたいこと

はじめてGPyを使います。12次元のoil flowデータをGPLVMを使って潜在空間に埋め込んで、潜在空間での各データの座標を取得していです。

Datasetに関して

oil flowデータはここのgzipped MATLAB workspaceからダウンロードして、解凍することで3Class.matファイルとして使えます。

oil flowデータには12次元のベクトルと3次元のラベルが1000データ分保管されています。
3次元のラベルというのは、
Class A なら [0,0,1]
Class B なら [0,1,0]
Class C なら [1,0,0]
といった形です。

python

1import scipy.io 2oil_flow_dataset = scipy.io.loadmat("3Class.mat") 3oil_flow_dataset.keys() 4#dict_keys(['DataTrnLbls', 'DataVdnLbls', 'DataTrn', 'DataTstFrctns', 'DataTrnFrctns', 'DataTst', 'DataVdn', 'DataVdnFrctns', 'DataTstLbls']) 5oil_flow_dataset["DataTrnLbls"].shape 6#(1000,3) 7oil_flow_dataset["DataTrn"].shape 8#(1000,12)

TrnはTrain, VdnはValid, TstはTestを表してます。

やったこと

次のコードを実行することで、oil_flow_dataのGPLVMによる2次元の潜在空間での埋め込みの様子を知ることができます。

python

1import numpy as np 2import GPy 3import scipy.io 4import matplotlib.pyplot as plt 5 6oil_flow_dataset = scipy.io.loadmat("3Class.mat") 7observed_data = oil_flow_dataset["DataTrn"] 8normalized_observed_data = (observed_data - observed_data.mean(axis=0)) / observed_data.var(axis=0) 9GT = oil_flow_dataset["DataTrnLbls"].nonzero()[1] 10 11model = GPy.models.GPLVM(normalized_observed_data, input_dim=2) 12model.optimize(messages=True, max_iters=1e3) 13model.plot_latent(labels=GT) 14plt.savefig("gplvm.png")

イメージ説明

私がやりたいのは、この2次元の潜在空間における各データ(上の図における各△)の座標を取得したいのです。要はplot_latentなんてものを使わずに普通にmatplotlibを使って潜在空間をプロットしたいのです。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

GPLVMの使い方の参考にさせていただきました. ありがとうございました.

ご質問に関して, model.Xで潜在変数にアクセスできるようです.
以下のコードでplot_latentと同じような表示が得られます.

import matplotlib.pyplot as plt %matplotlib inline spec = oil_flow_dataset["DataTrnLbls"].nonzero()[1] for c in range(0,3): arg = np.where(spec==c)[0] plt.plot(model.X[arg,1], model.X[arg,0], '.', c='C'+str(c))

イメージ説明

投稿2019/12/05 03:32

iino

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

physics303

2019/12/05 11:18

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問