機械学習や深層学習も、手軽に試せるようになってきました。本書では、さまざまなサンプルプログラムを作って、業務で役立つプログラムを作り方を紹介するものです。
Pythonによる AI・機械学習・深層学習アプリのつくり方
- scikit-learnの0.18.2で試してください。最新版の0.22.xではサンプルが動きません。
本書では以前、OpenCV3を利用していましたが、OpenCV4になって、いくつかのメソッドの使い方が変わりました。具体的には、OpenCV4以降、findContoursの返り値が変わりました。
以下のコマンドを実行して、4.x.xが表示される場合が該当します。
python3 -c "import cv2;print(cv2.__version__)"
修正が必要なプログラムは、以下の通りです。
- p.152 --- find_contours.py
- p.156 --- detect_zip.py
- p.167 --- diff_camera.py
- p.177 --- fishvideo_find.py
- p.172 --- fishvideo_extract_diff.py
OpenCV4になり『[書式] 輪郭の抽出を行う』のfindContoursの使い方が変わりました。
- [x] images, contours, hierarchy = cv2.findContours(image, mode, method)
- [o] contours, hierarchy = cv.findContours(image, mode, method)
Anacondaをインストールした後、Pythonを3.5に切り替える際、仮想環境を作成する場合に、以下のコマンドが失敗する場合があります。
source activate py35
新しいcondaコマンドにactivateが追加されたので、以下のように書き換えます。
# condaを最新版に書き換え
conda update anaconda
conda init bash
# 一度シェルを開き直した後、以下のように環境を変更
conda activate py35
- [x] $ cat jawiki-latest-pages-articles-* > wiki.wp2txt
- [o] $ cat jawiki-latest-pages-articles-* > wiki.txt
GitHubのソースコードは修正されています。
- [冒頭に追加] import numpy as np, h5py
- [x] x, y, test_size=0.2)
- [o] np.array(x), np.array(y), test_size=0.2)
- (誤)モデルを作成するための大量の分かち書きデータを含め、コンピュータによる〜
- (正)モデルを作成するための大量の分かち書きデータを含むコンピュータによる〜
- 末尾2行のプログラムは削除しても問題なく動作します。
- [x]そして、始点となる単語を「魚」とするとしましょう。そうすると、「魚」につながる単語は、「魚 | は」になります。
- [o] そして、始点となる単語を「魚」とするとしましょう。そうすると、「魚」につながる単語は、「魚 | は」あるいは「魚 | を」となります。ここでは、「魚 | は」をランダムに選んだとしましょう。
- (誤) 基本語ドメイン辞書
- (正) 解析済みブログコーパス
- [x]『プレースホルダ』とは、値をテンプレートに値を当てはめるための仕組みです
- [o]『プレースホルダ』とは、テンプレートに値を当てはめるための仕組みです
- [x] その手法として、学習させるすべての文書で、その単語がどのくらいの頻度で使われているかを調べます。
- [o] その手法として、学習させるすべての文書で、その単語がどのくらいの頻度で使われているかを調べます。この時、IDFは全文書における単語の出現頻度の『逆数』です。逆数にすることで、ありふれた単語の重要度を下げます。
- [x] SQLiteであれば、Pythonの標準ライブラリなので、とくにモジュールをインストールしたり、データベース・サーバーの設定を行う必要はありません。
- [o] SQLiteであれば、Pythonに最初から同梱されているので、とくにモジュールをインストールしたり、データベース・サーバーの設定を行う必要はありません。
- (誤) そして、『人口知能((AI)』とは〜
- (正) そして、『人工知能(AI)』とは〜
- 誤:どのような手順を踏んだら良いのでしょうか。・・・・・以下のような順番で機械学習を実践しましょう。
- 正:まず、ゴールを決定しましょう。ここでは、「がく片や花びらの長さと幅から、アヤメの品種を分類する」ことをゴールとします。そのために、以下の順番で機械学習プログラムを実装しましょう。
- [x] precisionが精度、recallが再現率 (実際に正解した割合)、f1-scoreが精度と再現率の調和平均で、supportが正解ラベルのデータの数です。
- [o] precisionが精度(適合率)、recallが再現率、f1-scoreが精度と再現率の調和平均で、supportが正解ラベルのデータの数です。precision(精度)は、正と予測したデータのうち実際に正であるものの割合で、recall(再現率)は、実際に正であるもののうち正であると予測されたものの割合、つまり、実際に正解した割合です。
- (誤) 複数の分類記を用いて性能を向上させる
- (正) 複数の分類木を用いて性能を向上させる
- (誤) 以下のプログラムを実行して、Coraboratoryの仮想マシン上に
- (正) 以下のプログラムを実行して、Colaboratoryの仮想マシン上に
- [x] if i <= interval: continue
- [o] if i < interval: continue
条件式にイコールがあると、temps[0]のデータが説明変数xに含まれなくなってしまうため、イコールを消します。(具体的なソースコード
- ソースコード(※1)の下、「allAlgorithms = ・・・」の上に以下を追加。現在このコードの説明はあるが、コードにない状態
- warnings.filterwarnings('ignore')
- 学習データが少ない場合、評価の信ぴょう性を上げるためにクロスバリデーションを行うことが多くあります。
- (誤) 「.JPEG」にすれば、JPEG画像に変換されて保存します。
- (正) 「.jpg」にすれば、JPEG画像に変換されて保存します。
- [誤] img = cv2.resize(img, (im_size, im_size))
- [正] img = cv2.resize(img_gray, (im_size, im_size))
なお、GitHubにあるソースコードは既に修正済みです。
- [x] pyplot.subplot( 行数 , 列数 , 何番目を描画するか )
- [o] matplotlib.pyplot.subplot( 行数 , 列数 , 何番目を描画するか )