2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonで処理結果をファイルに保存

Last updated at Posted at 2021-01-29

Matlabではsave/loadコマンドでmatファイルを作るみたいなことをpythonでもやりたい。

#pickle or joblib
Matlabのsaveでやるようなシリアライズをするのには、よくpickleというモジュールが使われるようだ。
(ちなみに複数形はpickles,つまりピクルスだ。酢漬けにして保存しとくイメージなのか)

pickleはかなりメジャーなモジュールのようだが、最近ではjoblibというのも使われているらしい。
joblibはそもそもは並列処理用のモジュールらしく、なぜそれがシリアライズにも使えるのかは知らないが
オプションを指定するだけでいい感じに圧縮できて、そこそこ速いっぽいので、joblibを使ってみる。

#書き込み joblib.dump()
まずは処理をしてファイルに書き込む
例は何でも良かったのだけれど、巷で噂(?)のUMAP。

import os
import joblib
import umap
from sklearn.datasets import load_digits

digits = load_digits()
reducer3d = umap.UMAP()
reducer3d.n_components = 3

reducer2d.fit(digits.data)
reducer3d.fit(digits.data)

joblib.dump((reducer2d, reducer3d), os.path.expanduser('~/Desktop/umap.joblib'), compress=True)

複数のインスタンスもタプルにして渡せばOKっぽい。
compressに1~9またはTrueを渡すと圧縮してくれる。(Trueはcompress=3と同じらしい)
数字は大きいほど高圧縮。

#読み込み joblib.load()

import os
import numpy as np
import joblib

red = joblib.load(os.path.expanduser('~/Desktop/uMap.joblib'))
(reducer2d, reducer3d) = red

読み込むときは(当然ながら)タプルに入っているので、読み出してから切り出す。
どの変数を何番目に入れたか覚えているなら、最初からアンパックして読み出してもOK

(reducer2d, reducer3d) = joblib.load(os.path.expanduser('~/Desktop/uMap.joblib'))

いたってシンプル。

#おまけ
せっかくなので可視化しとく

from sklearn.datasets import load_digits
import matplotlib.pyplot as plt

digits = load_digits()
embedding2d = reducer2d.transform(digits.data)
embedding3d = reducer3d.transform(digits.data)

fig = plt.figure(figsize=(12, 5), dpi=72)
ax = fig.add_subplot(1, 2, 1, title='n_components = 2')
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
sc = ax.scatter(embedding2d[:, 0], embedding2d[:, 1], c=digits.target, cmap='Spectral', s=5)
cb = fig.colorbar(sc, boundaries=np.arange(11) - 0.5, shrink=0.6)
cb.set_ticks(np.arange(10))

ax = fig.add_subplot(1, 2, 2, projection='3d', title='n_components = 3')
sc = ax.scatter(embedding3d[:, 0], embedding3d[:, 1], embedding3d[:, 2], c=digits.target, cmap='Spectral', s=5)
cb = fig.colorbar(sc, boundaries=np.arange(11) - 0.5, shrink=0.6)
cb.set_ticks(np.arange(10))
plt.show()

結果

uMap-digit.png

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?