前回、いろいろなライブラリをインストールしたりしたんだけども、著者お手製のmglearnっていうのをインストールしてねというところでちょっと面倒くさいなーという気持ちになった。そこで、この本のGitHubページをcloneして、そこのnotebookを使うことにした。自分でやった感が一気になくなるので気持ちはそそらないんだけども、まあ、とりあえずね。
で、そのnotebookである 01-introduction.ipynb を走らせたら、1行目でエラーになるという。まあ、あるあるである。
from preamble import * %matplotlib inline --------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) Input In [1], in <cell line: 1>() ----> 1 from preamble import * 2 get_ipython().run_line_magic('matplotlib', 'inline') File ~/study/introduction_to_ml_with_python/preamble.py:5, in <module> 3 import numpy as np 4 import matplotlib.pyplot as plt ----> 5 import mglearn 6 from cycler import cycler 8 set_matplotlib_formats('pdf', 'png') File ~/study/introduction_to_ml_with_python/mglearn/__init__.py:1, in <module> ----> 1 from . import plots 2 from . import tools 3 from .plots import cm3, cm2 File ~/study/introduction_to_ml_with_python/mglearn/plots.py:2, in <module> 1 from .plot_linear_svc_regularization import plot_linear_svc_regularization ----> 2 from .plot_interactive_tree import plot_tree_progressive, plot_tree_partition 3 from .plot_animal_tree import plot_animal_tree 4 from .plot_rbf_svm_parameters import plot_svm File ~/study/introduction_to_ml_with_python/mglearn/plot_interactive_tree.py:8, in <module> 6 from io import StringIO 7 from sklearn.tree import export_graphviz ----> 8 from imageio import imread 9 from scipy import ndimage 10 from sklearn.datasets import make_moons ModuleNotFoundError: No module named 'imageio'
imageioがないってさ。インストールしてみるかね。
> pip3 install -U imageio DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621 Collecting imageio Downloading imageio-2.16.2-py3-none-any.whl (3.3 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.3/3.3 MB 14.0 MB/s eta 0:00:00 Requirement already satisfied: numpy>=1.20.0 in /usr/local/lib/python3.9/site-packages (from imageio) (1.22.3) Requirement already satisfied: pillow>=8.3.2 in /usr/local/lib/python3.9/site-packages (from imageio) (9.1.0) Installing collected packages: imageio DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621 DEPRECATION: Configuring installation scheme with distutils config files is deprecated and will no longer work in the near future. If you are using a Homebrew or Linuxbrew Python, please see discussion at https://github.com/Homebrew/homebrew-core/issues/76621 Successfully installed imageio-2.16.2
入った。もう一度やってみよう。
from preamble import * %matplotlib inline --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) Input In [2], in <cell line: 1>() ----> 1 from preamble import * 2 get_ipython().run_line_magic('matplotlib', 'inline') File ~/study/introduction_to_ml_with_python/preamble.py:16, in <module> 13 plt.rcParams['lines.linewidth'] = 2 14 plt.rcParams['legend.numpoints'] = 1 15 plt.rc('axes', prop_cycle=( ---> 16 cycler('color', mglearn.plot_helpers.cm_cycle.colors) + 17 cycler('linestyle', ['-', '-', "--", (0, (3, 3)), (0, (1.5, 1.5))]))) 19 np.set_printoptions(precision=3, suppress=True) 21 pd.set_option("display.max_columns", 8) AttributeError: module 'mglearn' has no attribute 'plot_helpers'
なんでほわーい。mglearn/prot_helpers.py
はちゃんとあるし。
preamble.py
や、mglearn/__init__.py
を見てみたりしてみたけど、わからん・・・。
ところが、preamble.py
のimport
をコメントアウトして、エラーメッセージが変わることなんかを確認したりして、なんどかnotebookも再起動させたりしているウチに、動くようになった。
どゆこと?
preamble.py
を書き換えて、import
直後にprint(dir(mglearn))
してみたら、確かにplot_helpersいるし
['ReBl', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', 'cm2', 'cm3', 'datasets', 'discrete_scatter', 'plot_2d_separator', 'plot_agglomerative', 'plot_animal_tree', 'plot_cross_validation', 'plot_dbscan', 'plot_decomposition', 'plot_grid_search', 'plot_helpers', 'plot_improper_preprocessing', 'plot_interactive_tree', 'plot_kmeans', 'plot_knn_classification', 'plot_knn_regression', 'plot_linear_regression', 'plot_linear_svc_regularization', 'plot_metrics', 'plot_nmf', 'plot_nn_graphs', 'plot_pca', 'plot_rbf_svm_parameters', 'plot_ridge', 'plot_scaling', 'plot_tree_nonmonotonous', 'plots', 'tools']
ホント、そういうとこやぞ!
というわけで、Pythonのモジュールの仕組みはさっぱりわからない。だけど、この1章のnotebookはエラーなく実行されたみたい。
さて、一緒に勉強会をやっているメンバーでもmglearnのインストール忘れでエラーになる人はちょいちょいいる。そりゃそうだろうし、なんか入れるのやだなと後回しにしているとひっかかる。
図の1.3でグラフを書いているんだけども、そこでmglearnがパラメータに使われていて、ある人が「抜いても別にプロットはされます」と言っている。ふむ。
これが、cloneしたnotebookそのままでプロットしたグラフ
こっちが、cmap=mglearn.cm3
を抜いたもの
cmapはcolor mapなのかな。探してみる
mglearn/plot_helpers.py
に
cm3 = ListedColormap(['#0000aa', '#ff2020', '#50ff50'])
ってのがある。これだけだね。
というわけで、本はなにひとつ読み進んでないんだけども、今日のところはここまで。