2022年1月下旬から2月上旬にかけて読んだ技術書を紹介します。いままでと同様、今回も機械学習についての書籍を選び、実践していましたよ。
サラッと立ち読みした感じ、悪くなさそうでしたので、読んでみることにしました。なお、書籍では「jupyter notebook」環境であることを前提にコードが載っていますが、僕が大好きな「Google Colaboratory 」でも問題なく全てのコードが動きました。
環境設定が面倒くさい人、python環境があらかじめインストールしてあり内部的にぶつかりそうな人、についてはGoogleブラウザでの実行をおススメします。
ここから本題です。
『スッキリわかる Pythonによる 機械学習入門』
出版社:インプレス 、著者:須藤秋良
おススメ度:★★★★★
題名のとおり「ザ・機械学習の入門書」という書籍です。ページ数は全体で600ページ強あり、入門書とはいうものの、かなりガッツリした構成になっています。
全体を通じて解説は分かりやすく、特段の数学知識がなくても実践できます。ただし、やはりというか、pythonの基本構文が分からないと意味不明になってしまうと思いますね。
また頻繁に使う構文やメソッドについて随所で要約がありますし、最後のほうのページは辞書のようになっていますので、後からでも参照しやすいのがメリットですかね。
ただし、いわゆる「ディープラーニング関係」の技術については、省略されています。あくまで古典的というか、いわゆる「機械学習」がメインです。こちらについては、あとで章立てで触れています。
概要
章立て
大まかな章立ては、次のような感じ。
第Ⅱ部:本題部分。「教師あり学習」の回帰と分類をひと通り眺める感じ。
第Ⅲ部:応用。「教師あり学習」の応用技術に加えて、「教師なし学習」のクラスタリングと次元削除を扱う。
そもそも論(必見)
そもそも、の話。AI、機械学習、ディープラーニングあたりの単語がごちゃ混ぜになっている方って、案外多いのかな、と。僕も最近まで全く知らなかったのですが。ここで一つ整理します。
AI(人工知能)という大きな括りがあって、そのなかの一要素として機械学習があります。さらに、機械学習のうち、最近流行のものがディープラーニング技術というわけ。AIっていうタームは実際のところボヤっとした定義でして、すごく抽象的なんですよね。たぶん、pythonや機械学習自体には興味が無い人でも、知っておいたほうがいい括りだと思います。
でもって。機械学習ってそもそも何、って話で。ずばり「データの集合を機械(コンピュータ)に投げて、法則性を見つける。分類させる」方法論ってところ。すごくざっくりですけれども。この定義自体は変わりがないもので、これも覚えておいたほうが良いです。
プログラミング自体が思っているよりも、すごく原始的な営みなんですよね。人間が法則を見つけて、条件分岐(ifとかwhile)を実装しなきゃならない。面倒くさいし、そもそも分類条件を人間が書くのにも限界があって。人間がプログラミングをする手間を省きたいわけです。
ですので、機械自体に判断させる技術、というのが脚光を浴びたわけです。
教師あり学習 と 教師なし学習
教師、って単語を聞くと、なんか小難しい気がしますが。なんてことはなくて、実際には「データのセット」というだけ。
・教師あり学習、の場合、「入力データ」と「正解(分類だったり数値だったり)」がセットで機械に与えられます。セットで与えてあげて、たとえば数値を予測したり分類を当てさせたりするわけです。
・教師なし学習、の場合、「入力データ」のみを機械に与えて、たとえばデータを整理したり、という風に加工するわけです。
流れ
書籍中ではPandasという表計算に使うライブラリと、scikit-learnという機械学習モデル作成のライブラリを使っています。Pandasの使い方が、かなり独特なので、こちらは興味があれば書籍を買ってみてください。
「事業目標の明確化→データ確保→前処理(Pandas)→学習(scikit-learn)→評価」
というPDCAサイクルを回すイメージです。
ちなみに、上でいうと、前処理は得られたデータを加工して解析しやすくする課程です。学習は文字通り、データを与えて機械に学習させて、法則をあぶりだす過程です。
個人的見解
すぐに大規模な開発に使用できる、というものでもありませんが。
個人や小企業レベルで使う予測モデルを作るぶんには、十分に通用すると思います。
ただ、やってて思ったのは「機械学習って結局データが命だよな」と。画像にしろ何にしろ、データがないことには話が進みません。またデータ数が小さいと、ノイズが入り込みやすく、これまた有効なモデルが作れないのです。
プログラミングや機械学習技術うんぬんの前に、そもそも膨大なデータを集めるほうが有効な投資になると思います。費用対効果的に。
ですので、もし会社で機械学習やらディープラーニングの開発部門を立ち上げたいのなら、とにもかくにも「膨大なデータベース」を確保してください。社内サーバーを立てて、SQLでデータベース構築するくらいまでなら、IT素人でも全然、余裕で出来ると思います。技術屋を呼ぶのは、そこから先で十分間に合うでしょう。
そんな風に感じました。
語郎