OKIYUKI99 Blog

データ分析や日常に関するブログ

仕事ではじめる機械学習を読んだ(1章)

今年もおつかれさまでした。読みたかった本を少しずつ読んでます。

この本を読んだ動機

www.oreilly.co.jp

現在、機械学習システム(と真に呼べるものか分からないが)の運用や構築をちょくちょくしていて、ベストプラクティスを再確認したいなというのがありました。この本を手に取りました。以下は、読書メモです1

機械学習プロジェクトの流れ

  1. 問題を定式化する
  2. 機械学習をしないで良い方法を考える
  3. システム設計を考える
  4. アルゴリズムを選定する
  5. 特徴量、教師データとログの設計をする
  6. 前処理をする
  7. 学習・パラメータチューニング
  8. システムに組み込む
  • 1と2:問題設定
  • 3から6:道具選びと前処理
  • 7:モデルの作成
  • 8:サービスへの組み込み

という4STEPの流れ。この中でデータをEDA(Exploratory Data Analysis)して可視化したりする部分は1と2に当たる部分なのかなと。つまり、自分が関わった多くのプロジェクトは3に行く前に終わったなーというのが多い…笑

おもしろいのは、明示的に 2.機械学習をしないで良い方法を考える を流れに含んでいる点。その原因はモデルのメンテナンスコストが大きいこと。以下、6つの例をあげている。

  1. 確率的な処理があるため自動テストがしにくい
  2. 長期運用しているとトレンドの変化などで入力の傾向が変化する
  3. 処理のパイプラインが複雑になる
  4. データの依存関係が複雑になる
  5. 実験コードやパラメータが残りやすい
  6. 開発と本番の言語 / フレームワークがバラバラになりやすい

機械学習システムを維持するためのメンテナンスコストが多くある点と時間とともに変わるデータのトレンドの変化から100%正しい結果を常に出すとは限らないので、誤りを運用でカバーする仕組みが必須 というところは理解してもらわないといけない。

そういうところをちゃんと理解した上で、さらに導入をする前に、MVP(Minimum Viable Product)を作る点。これにより、本当にもっと高度な方法が必要かが明らかになる。いきなり難しいことをするのではなく、まず一番簡単なモデル(たとえば、平均値を返すモデル)でシステムの性能をチェックし、そのモデルに満足しない場合、エンジニアリング技術(次節で必須になる)とともに、改善していくのが正しい道と読めました。

実システムにおける機械学習の問題点への対処方法

その大きなメンテナンスコストに対して、著者らは以下のポイントを述べています。

  • 人手でゴールドスタンダードを用意して、予測性能のモニタリングをする

  • 予測モデルをモジュール化をしてアルゴリズムのA/Bテストができるようにする

  • モデルのバージョン管理をして、いつでも切り戻し可能にする

  • データ処理のパイプラインごと保存する

  • 開発/本番環境の言語/フレームワークは揃える

とくに、機械学習システムは一度作って終わることはないので、高度なアルゴリズムを作れる人だけではなくて、エンジニアリング技術が必須になってくる というのがこのポイントからも明らか。

機械学習システムは本来アップデートが激しいところが多いはずなので、パイプライン作りとバージョン管理 も間違いなく必要になります。

さらなるベストプラクティスについてはRules of Machine Learning Best Practices for ML Engineeringを参考にあげていた。また時間あるときに読みたい。

機械学習を含めたシステムを成功させるには

重要なプレイヤーとして、4人のプレイヤーをあげている

  1. プロダクトに関するドメイン知識を持った人
  2. 統計や機械学習に明るい人
  3. データ分析基盤を作れるエンジニアリング能力のある人
  4. 失敗しても構わないとリスクを取ってくれる責任者

とくに、現場・分析者・エンジニアの3人+責任者1人 の存在が必要。構築や運用ではこのとおりなんですが、その機械学習システムを作って見せる人(利用者)もプレイヤーとして出てきます。その利用者からの無茶振りも色々ある。なので、その利用者も機械学習プロジェクトの流れを理解して、長く付き合ってくれるか もありますね。その辺の説明(説得?)方法での良い資料が欲しいですね。

まとめ

読んだのは1章だけですが、道筋を明確に記述して読みやすかったです。1章だけでも、チーム全員必読してもらって、議論して理解を深めたいなと思いました。


  1. しかし、すでに多くの方がレビューしているみたいなので、内容が被りそうですが、あまりその辺は気にしていません。

RのSlidifyを触ったけど、色々問題でた

RのSlidifyと言えば、

Rでパワーポイントを作成できるパッケージです。

触ってみた感想、
・ローカルのRStudioで実行したが、文字化け(SHIFT-JIS、UTF8等が混ざっている?)が激しい(結局なおらなかった)
・サーバー版のRStudioだと問題なかった
・RPubsに公開したら、あとから見れなくなった
というのに、色々ハマる。

インストールは超簡単。

・事前準備

install.packages("devtools")
library(devtools)
install_github("slidify", "ramnathv")
install_github("slidifyLibraries", "ramnathv")

・"sample"というフォルダができて、サンプルコードがでてくる。(適宣、変更して下さい)

library(slidify)
library(slidifyLibraries)
author("sample")

・好きなように編集
パッケージslidify - 浅井拓也 研究室用ページパッケージslidify - 浅井拓也 研究室用ページ

・実行

slidify("index.Rmd")

・出来上がるはず。このとき、ローカルなら文字化け激しかった。

・RPubsへの公開(titleの部分は適宣変更してください)

publish(title = 'test_slidify', 'index.html', host = 'rpubs')

すると、RPubsのアップロード画面に遷移する。

以上です。もう少しオプション等、見てみよう。

Google Refineとか

クレンジングツールなんてあったとは….

Google Refine便利そう.データ集めるのが簡単になるのかな.

Webに載ってるデータをコピーして処理できるっぽい.

詳しい解説ページないかな.日本語希望w

■参考
『米Google、データクリーニングツール「Google Refine 2.0」をリリース』
http://sourceforge.jp/magazine/10/11/15/0514235

Google Refineの使い方』
http://wiki.kazusa.or.jp/Google_Refine%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9

『第7回 大相撲のアノーマリー (1)』
http://www.atmarkit.co.jp/fcoding/articles/stat/07/stat07b.html

クラスタリングとか

「Rで学ぶクラスタ解析」を購入した.

Rで学ぶクラスタ解析

Rで学ぶクラスタ解析

図書館で借りてパラパラと見ると良さ気だった.
何分,クラスタだけの本って持っておらず,Rで学べるってのも今の流行かなと思い,中古本を購入.

2000+250円でアマゾンさんでね.

届くのが楽しみです.

決定木とか

今更ながら決定木強っ!って思った.

ランダムフォレストって今のところ最強の分類器じゃ….

CHAIDとかC5.0とかCARTとか色々あるけど,どれ選べばいいのでしょうか?

CARTジニ係数使ってて,純度で分岐点を作る.純度が増す=ばらつきが少なくなるね.

ランダムフォレストのようなアンサンブル学習はほかの分類器にも使えるよね.計算時間やばそうだけど.

ggplot2とか

■感想
Rで流行してるものといえば,ggplotかと思い,サンプル動かしてみた.確かに綺麗に描画されるし,シンプルに使える.

レイヤーのように後からポイポイ載せていくって感じ.

『ggplot2 の自分用メモ集を作ろう』はかなり詳しく紹介してくれていました.

■参考
『ggplot2のqplot関数のまとめ』

『ggplot2の概要』

『ggplot2できれいなグラフ-スライド』

『一粒で3回おいしいggplot2』

『ggplot2 の自分用メモ集を作ろう』

『ggplotはただの綺麗系graphics libraryではない』