Pythonの本を教えてもらいましたが、難しく感じます。どうすべきでしょうか。
質問をいただきました。
先日、次の記事でオススメした、「Python 機械学習プログラミング 達人データサイエンティストによる理論と実践 」が難しく感じるがどうするべきかという質問ですね。
質問いただいた方にとって、何がベストかはわからないところなんですが、一般的に良いと思う方法や、私がどのように読んだかを書いてみたいとおもいます。
本の全体像を理解する
細かい内容に入り込む前に、本の全体像を知るのが良いと思います。
全体像を知って、今自分が知る必要がある知識は深く読むけど、知る必要がないことは、さらっと読むとか、読まないという選択をするわけです。
そのために、まず目次を読みます。
目次を読むと、初めの方で分類・前処理・パラメータチューニング・アンサンブルと機械学習を学ぶのに重要なことが書いてあることがわかります。
・その次に、重要そうな、回帰分析が書いてあり
・その後ろに、ディープラーニングのことが書いてある
・最後に付録。
ということがわかります。
と目次を把握したところで、Webを探してみると、監訳者の福島さんによる解説記事があることがわかります。(第1版のものですが、第2版を読むときでも参考になる内容だと思います)
この記事を読んで全体の流れを意識しましょう。(本のコードは難しいということで書いてくれている、簡略版のコードも参考になると思います)
特に次の図は、自分が何を学んでいるかを意識するのにとても使えると思います。
簡単なデータセットで試してみて理解する
はじめのつまづくポイントが第2章だと思います。
この本ではIrisというデータセットを使って、分類をしていますが、データ数が多すぎて自分で手元で計算するのが難しいんですよね。
そういう場合は、自分で簡単なデータセットを作って試してみます。
私は、次の4点からなるデータ場合に、パーセプトロンでどのように分類されるかということをやってみました。
実際に使ったコードは、このjupyter notebookにありますので、よければ参考にしてみてください。
わからないところはまずは深入りしない
読んでいて、難しいところは無理して深入りする必要はありません。
例えば、SVMがわからない場合に、SVMを次のように分解してみましょう。
1. scikit-learnでSVMを使う
2. SVMがどういうことをやっているのか概要を知る
3. SVMがどういうアルゴリズムか(どうやって計算しているか)理解する
1.と2.は本を読めばわかるのではないでしょうか。
1.はscikit-learnを使ってデータをいれるだけですし、2.はマージンを最大化するように分類するということも納得感があると思います。
3.については、この本だけで理解するのは難しいので、後回しにします。
このように、「概要を理解して使える」ということを意識すると、スラスラよめると思います。
なお、「単に使える」というだけでは、全く応用が効かないのでよくないと思います。最低限どういうモチベーションでそのアルゴリズムが作られ、どういうことをやっているのかは知るべきです。
後回しにしたことは覚えておいて、知る必要がある場合に、良い本やWebページを探し、その時に学ぶようにします。
学ぶにあたり、ベースとなる部分を先に学ぶ
可視化の方法(matplotlibの使いかなど)やJuputer notebookの使い方は、今後もずっと使っていくので先に十分に学んで損はありません。
本の付録にもついていますし、ネット上にも良い記事がたくさんあるので、先にやってしまいましょう。
なお、この本の途中に書いてある、分類結果を可視化しているコードは難しいので、そういうやり方もあるんだ程度でいいと思います。
まとめ
必ずしも本を全部理解する必要はなく、自分が知る必要にあることに絞って学びましょうという回答となりました。
質問に対しては、自分が読む目的を達せられないのであれば、別の何かを探したほうが良いでしょうし、そうでないのであれば探す必要はないと思います。
「この本に書いていること全てを理解したい」、「本の内容を人に説明できるようになりたい」、「紹介されている手法を使えるようになりたい」、など色々な目的が考えられるので、自分の目的に合わせて読んでいくといいと思います。
コメントお待ちしています。匿名の質問はマシュマロから→https://marshmallow-qa.com/currypurin