umapの実行結果をインタラクティブな図で表示

Source Code Software Computerpython

多次元データの次元を削減し、2次元平面などで可視化するためにumapという手法がよく使用されるようです。

umap-learnというパッケージが活用すれば、pythonで実行できます。

今回は、jupyter lab上にumapの実行結果を表示する方法について紹介します。

インストール方法

conda install -c conda-forge umap-learn

実行例

sklearnのMNISTデータにumapを適用した例が以下になります。

作図パッケージのbokehを活用してインタラクティブな図が作図可能になっています。

図上のプロットに、マウスカーソルを合わせることで、hover_dataの内容を表示させることができます。

umapの機能を使用して作図する場合には、umapだけでなく、umap.plotをimportする必要があることに注意が必要です。

import sklearn.datasets
import pandas as pd
import numpy as np
import umap
import umap.plot #作図を実行するのに必要
from bokeh.plotting import show, save, output_notebook, output_file

# データセットのロード
fmnist = sklearn.datasets.fetch_openml('Fashion-MNIST')

# umapの実行
mapper = umap.UMAP(random_state=0).fit(fmnist.data[:30000])

# ラベルデータの準備
hover_data = pd.DataFrame({'index':np.arange(30000),
                           'label':fmnist.target[:30000]})
hover_data['item'] = hover_data.label.map(
    {
        '0':'T-shirt/top',
        '1':'Trouser',
        '2':'Pullover',
        '3':'Dress',
        '4':'Coat',
        '5':'Sandal',
        '6':'Shirt',
        '7':'Sneaker',
        '8':'Bag',
        '9':'Ankle Boot',
    }
)

# 可視化の準備
p = umap.plot.interactive(mapper, labels=fmnist.target[:30000], hover_data=hover_data, point_size=2)

# jupyter lab上での可視化
output_notebook()
output_notebook() #2回記載が必要
show(p)

表示データの内容

hover_dataのデータ内容は、以下のような形になります。

jupyter labで作図するときの注意

umap ver0.4.6時点では、jupyter labまたはnotebook上で、umap.plotの機能を使用すると、以下のようなエラーが表示されます。

AttributeError: module ‘umap.plot’ has no attribute ‘output_notebook’

以下のようにoutput_notebook()を二回実行することで、jupyter lab上でも表示が出来るようになるようです。

# jupyter lab上での可視化
output_notebook()
output_notebook() #2回記載が必要
show(p)

参考

AttributeError: module 'umap.plot' has no attribute 'output_notebook' · Issue #422 · lmcinnes/umap
import umap import umap.plot umap.__version__ '0.4.2'. After import umap in Jupyter notebook I get the same issue as in #321. I assumed that with versio...

コメント

タイトルとURLをコピーしました