Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

「Pythonではじめる機械学習」を読んでみる(2)

前回、いろいろなライブラリをインストールしたりしたんだけども、著者お手製の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.pyimportコメントアウトして、エラーメッセージが変わることなんかを確認したりして、なんどか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そのままでプロットしたグラフ

f:id:Tambourine:20220413172254p:plain

こっちが、cmap=mglearn.cm3を抜いたもの

f:id:Tambourine:20220413172418p:plain

cmapはcolor mapなのかな。探してみる

mglearn/plot_helpers.py

cm3 = ListedColormap(['#0000aa', '#ff2020', '#50ff50'])

ってのがある。これだけだね。

というわけで、本はなにひとつ読み進んでないんだけども、今日のところはここまで。