Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rubyにおける機械学習と統計分析のための環境整備の取り組み
Search
Kenta Murata
February 23, 2017
Technology
11
9k
Rubyにおける機械学習と統計分析のための環境整備の取り組み
Ruby Business Users Conference 2017
Kenta Murata
February 23, 2017
Tweet
Share
More Decks by Kenta Murata
See All by Kenta Murata
waitany と waitall を作った話
mrkn
0
160
HolidayJp.jl を作りました
mrkn
0
170
Calling Julia functions from Streamlit applications
mrkn
1
390
Red Data Tools で切り開く Ruby の未来
mrkn
3
1.1k
Method-based JIT compilation by transpiling to Julia
mrkn
0
6.9k
Apache Arrow C++ Datasets
mrkn
4
1.5k
Reducing ActiveRecord memory consumption using Apache Arrow
mrkn
0
1.6k
RubyData and Rails
mrkn
0
3k
Tensor and Arrow
mrkn
0
910
Other Decks in Technology
See All in Technology
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
370
なぜCodeceptJSを選んだか
goataka
0
160
NW-JAWS #14 re:Invent 2024(予選落ち含)で 発表された推しアップデートについて
nagisa53
0
250
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
150
ゼロから創る横断SREチーム 挑戦と進化の軌跡
rvirus0817
2
260
AI時代のデータセンターネットワーク
lycorptech_jp
PRO
1
280
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
5
38k
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
220
【re:Invent 2024 アプデ】 Prompt Routing の紹介
champ
0
140
20241220_S3 tablesの使い方を検証してみた
handy
3
360
どちらを使う?GitHub or Azure DevOps Ver. 24H2
kkamegawa
0
700
株式会社ログラス − エンジニア向け会社説明資料 / Loglass Comapany Deck for Engineer
loglass2019
3
31k
Featured
See All Featured
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
Making Projects Easy
brettharned
116
5.9k
Embracing the Ebb and Flow
colly
84
4.5k
Making the Leap to Tech Lead
cromwellryan
133
9k
How to train your dragon (web standard)
notwaldorf
88
5.7k
Writing Fast Ruby
sferik
628
61k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
810
What's in a price? How to price your products and services
michaelherold
243
12k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Bash Introduction
62gerente
608
210k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Transcript
Rubyにおける機械学習と 統計分析のための 環境整備の取り組み Kenta Murata Speee Inc. 2017.02.23 Ruby Business
Users Conference 2017 Rubyにおける機械学習と 統計分析のための 環境整備の取り組み Kenta Murata Speee Inc. 2017.02.23 Ruby Business Users Conference 2017
Ruby Business Users Conference 2017 (2017.02.23) self.introduction • Kenta Murata
(mrkn) • Speee Inc. ‣ Researcher • CRuby committer ‣ A bigdecimal maintainer
Ruby Business Users Conference 2017 (2017.02.23) gems • bigdecimal •
enumerable-statistics • daru-td • iruby-rails
Ruby Business Users Conference 2017 (2017.02.23) 謝辞
Ruby Business Users Conference 2017 (2017.02.23) はじめに
Ruby Business Users Conference 2017 (2017.02.23) Topics • 統計分析、機械学習、データサイエンスに ついての基礎知識
• Ruby ではデータサイエンスのお仕事はで きない → なぜか? • Ruby のためのデータサイエンス環境整備 プロジェクトの進捗
Ruby Business Users Conference 2017 (2017.02.23) 今日の流れ • はじめに •
統計分析と機械学習 • Ruby とデータサイエンスの関係 • Ruby のためのデータサイエンス環境 • まとめ
Ruby Business Users Conference 2017 (2017.02.23) 統計分析と機械学習 • はじめに •
統計分析と機械学習 • Ruby とデータサイエンスの関係 • Ruby のためのデータサイエンス環境 • まとめ
Ruby Business Users Conference 2017 (2017.02.23) 統計分析と機械学習 • 数学と計算機科学のサブカテゴリ •
データから知識を取り出す仕組み • データサイエンスで使う道具
Ruby Business Users Conference 2017 (2017.02.23) データサイエンス • ビッグデータ ‣
政府や企業が大量にデータを蓄積している • サイエンス ‣ 大量のデータから科学的な知識を取り出し て政策や事業開発に活かしたい
Ruby Business Users Conference 2017 (2017.02.23) データサイエンスのイメージ
Ruby Business Users Conference 2017 (2017.02.23) 統計分析? 機械学習? • データサイエンスのための手法
• 既知のデータ (訓練データ) から統計 モデルを作る • 何が違う?
Ruby Business Users Conference 2017 (2017.02.23) 統計分析と機械学習の違い
Ruby Business Users Conference 2017 (2017.02.23) 統計分析 • 統計分析で作った統計モデルの目的 ‣
統計モデルを使って既知のデータの性質 を説明する • 要求されること ‣ 統計モデルの中身が解釈しやすいこと ‣ 過学習していないこと
Ruby Business Users Conference 2017 (2017.02.23) データの性質の説明 • 「なぜそうなるのか?」を説明できること ‣
例1: 一般化線形モデル - 目的変数に対する説明変数の関与の仕方: 線形結合 ‣ 例2: 単一決定木 - サンプルを分ける規準: ジニ係数, エントロピー ‣ 例3: 統計的検定、ベイズ推定 - 「どうしてそうなるのか?」の確率を与える • シンプルな統計モデルを利用する必要がある ‣ 未知のデータに対する予測性能は頭打ちになる
Ruby Business Users Conference 2017 (2017.02.23) 機械学習 • 機械学習で作った統計モデルの目的 ‣
未知のデータに対して良い精度の予測を 与える • 要求されること ‣ 予測の精度が高いこと ‣ 過学習していないこと
Ruby Business Users Conference 2017 (2017.02.23) 良い精度の予測 • 大量の訓練データを使用 ‣
できるだけ広いケースで学習したい • 交差検定による過学習の回避 ‣ 統計モデルが複雑でも過学習しないように • ハイパーパラメータの機械的な最適化 • 複数の統計モデルを組み合わせて精度を高める ‣ 予測結果を説明する必要がないから可能
Ruby Business Users Conference 2017 (2017.02.23) 統計分析と機械学習の違い • 統計モデルに対して解釈性と予測性のど ちらを求めるか
‣ 統計分析では解釈性 ‣ 機械学習では予測性 • 理論的背景は同じ • 人間と機械のどちらが学ぶか?
Ruby Business Users Conference 2017 (2017.02.23) 人間と機械のどっちが学ぶか? 統計モデル 統計分析 機械学習
Ruby Business Users Conference 2017 (2017.02.23) 機械 に 学習 させる
Ruby Business Users Conference 2017 (2017.02.23) 機械 に 学習 させる
• 人間が自然に行っている学習能力 を コンピュータ上で実現するための技術 • 問題の解き方を直接プログラムとして 記述せずに、いろいろ 試行錯誤を通し て正しい解き方を見つけ出す ように記 述されたプログラム
Ruby Business Users Conference 2017 (2017.02.23) 機械学習の厳密な定義 あるプログラムの 問題 T
に対する性能 を 性能尺度 P で評価したとき 経験 E に よって性能が向上しているとき、 そのプログラムは 問題 T と 性能尺度 P について 経験 E から 学習 している
Ruby Business Users Conference 2017 (2017.02.23) 例: 料理レシピのジャンル分類 • 問題
T ‣ レシピのジャンルを予測 • 経験 E ‣ レシピに対する適切なジャンルを人間が指定する • 性能尺度 P ‣ ジャンル予測が正しかったレシピの件数
Ruby Business Users Conference 2017 (2017.02.23) プログラムが経験から学習
Ruby Business Users Conference 2017 (2017.02.23) なぜ統計分析や機械学習が 必要なのか? • ビジネス上の意思決定をデータに基づいて
行うことが主目的 • 統計分析や機械学習の利用は必須ではない • 大量のデータから知識を取り出してビジネ スに活かすには、特に機械学習の利用は避 けられない
Ruby Business Users Conference 2017 (2017.02.23) 機械学習によって実現できること • 人間には不可能なタスク •
手書きのプログラムで直接表現できな いタスク • プログラムが自ら変化することで正解 が変化する問題に対応する
Ruby Business Users Conference 2017 (2017.02.23) 人には不可能なタスクの例 • 大量のデータから知識を取り出す ‣
医療診断記録から予後を予測 ‣ 10万人のユーザを購買履歴に基づいて グループ分けする方法 ‣ Web のクリックログから将来のコン バージョンを予測
Ruby Business Users Conference 2017 (2017.02.23) 手でプログラミング できないタスクの例 • 将棋や囲碁の指し手を求める
• 自動車やヘリコプターの自動操縦 • 手書き文字認識 • 線画に対する自動色塗り • スパムメール判定
Ruby Business Users Conference 2017 (2017.02.23) プログラムが自ら変化することで 正解が変化する問題に対応する • ユーザの行動履歴に基づくコンテンツ掲出
‣ e.g. おすすめ商品の推薦 • A/B テストにおける掲出パターン選択の自 動最適化 ‣ バンディットアルゴリズムと呼ばれてるやつ
Ruby Business Users Conference 2017 (2017.02.23) 要求されるスキルセットの違い • 統計分析では、統計モデルを理解する ための能力が要求される
• 機械学習では、統計分析のプロセスを 自動化するためのプログラミング能力 も要求される ‣ 場合によってはインフラ構築・運用スキ ルまで要求される
Ruby Business Users Conference 2017 (2017.02.23) 統計分析と機械学習 • 統計分析はデータから人間が学んでビ ジネス上の意思決定に活かす
• 機械学習はデータから機械が学び、そ の機械を人間が仕事に活用する • どちらも同じ道具を使うが、要求され るスキルセットが違う
Ruby Business Users Conference 2017 (2017.02.23) Ruby とデータサイエンスの関係 • はじめに
• 統計分析と機械学習 • Ruby とデータサイエンスの関係 • Ruby のためのデータサイエンス環境 • まとめ
Ruby Business Users Conference 2017 (2017.02.23) データサイエンスのワークフロー • データ収集 •
探索的データ解析 • データ・クレンジング • 複数データソースの統合 • 前処理 • 統計モデルの学習 • 実世界への適用
Ruby Business Users Conference 2017 (2017.02.23) 統計分析・機械学習が 絡むプロセス • データ収集
• 探索的データ解析 • データ・クレンジング • 複数データソースの統合 • 前処理 • 統計モデルの学習 • 実世界への適用
Ruby Business Users Conference 2017 (2017.02.23) Ruby のみで完了できるもの • データ収集
• 探索的データ解析 • データ・クレンジング • 複数データソースの統合 • 前処理 • 統計モデルの学習 • 実世界への適用
Ruby Business Users Conference 2017 (2017.02.23) Ruby ではデータサイ エンスはできない
Ruby Business Users Conference 2017 (2017.02.23) なぜできないのか? • 使える道具がない •
使ってる人がいない • 作ろうとする人がいない
Ruby Business Users Conference 2017 (2017.02.23) 使える道具がない • 道具自体は存在する •
でも実用的ではない • 品質も信頼できない
Ruby Business Users Conference 2017 (2017.02.23) どんな道具があるか? • nmatrix •
numo-narray • daru • statsamples • ai4r • etc.
Ruby Business Users Conference 2017 (2017.02.23) 実用的ではない • 機能が足りない •
道具間の連携が不十分 • かなり頑張らなければならない
Ruby Business Users Conference 2017 (2017.02.23) プルリクエストする? • データサイエンスがやりたいのである •
データサイエンスのための道具を作る ことが目的でない • データサイエンスの道具を実装するの は、利用する人には結構大変
Ruby Business Users Conference 2017 (2017.02.23) 利用者と実装者の違い • 利用者に要求されるスキル ‣
利用する道具の理論的背景 ‣ ビジネス領域の知識と経験 • 実装者に要求されるスキル ‣ 実装する道具の理論的背景 ‣ 高度なコンピュータサイエンスの知識と経験 ‣ 実装する道具に特有のプログラミング技能
Ruby Business Users Conference 2017 (2017.02.23) 品質も信頼できない • ユーザが少ない •
情報も少ない • 開発が継続していない
Ruby Business Users Conference 2017 (2017.02.23) なぜできないのか? • 使える道具がない •
使ってる人がいない • 作ろうとする人がいない
Ruby Business Users Conference 2017 (2017.02.23) 使ってる人がいない • 使える道具がないから •
Python と R を使ってる人が多い • Python と R の求人が多い
Ruby Business Users Conference 2017 (2017.02.23) 作ろうとする人がいない • 作ることが目的の人は少ない •
使われないものを作りたい人は少ない • 作り始めようとすると障壁が大きい
Ruby Business Users Conference 2017 (2017.02.23) 障壁の例 • 数値配列、グラフィックスなどの基礎 となるライブラリの定番がない
• 仕事では Python と R を使っているの で、作っても使う機会がなさそう
Ruby Business Users Conference 2017 (2017.02.23) 負のサイクル • Ruby でデータサイエンスができない
状態がより強くなる経済原理が働いて いる • できるだけ早く Ruby でデータサイエ ンスができる状態を作ってユーザを集 め、負のサイクルを止める必要がある
Ruby Business Users Conference 2017 (2017.02.23) Ruby のためのデータサイエンス環境 • はじめに
• 統計分析と機械学習 • Ruby とデータサイエンスの関係 • Ruby のためのデータサイエンス環境 • まとめ
Ruby Business Users Conference 2017 (2017.02.23) 求められる条件 • 実用的に使える機能と品質を持つものでないと 使ってもらえない
• Python や R で作られた資産を捨てずに使い続 けられないと使ってもらえない • できれば1年くらいでシュッと実現したい ‣ 早くしないと Ruby が使われなくなっちゃうかも
Ruby Business Users Conference 2017 (2017.02.23) Ruby から Python と
R をそのまま使えれば良い
Ruby Business Users Conference 2017 (2017.02.23) 他の言語をそのまま使う • 主流の環境を Ruby
からそのまま利用できる • スイッチングコストが低いのでユーザを集め やすい ‣ 知ってる技術だから ‣ 既存の資産を使い続けられる • ユーザが集まれば、Ruby のための独自システ ムを作るサイクルが軌道にのるかも
Ruby Business Users Conference 2017 (2017.02.23) PyCall を作り始めた
Ruby Business Users Conference 2017 (2017.02.23) PyCall Ruby と Python
の橋渡し
Ruby Business Users Conference 2017 (2017.02.23) PyCall • Ruby から
Python の処理系を呼び出 せるようにする • Python のオブジェクトを Ruby から 操作できる (一部実装完了) • Ruby のオブジェクトを Python から 操作できる (未実装)
Ruby Business Users Conference 2017 (2017.02.23) PyCall の使い方 $ git
clone https://github.com/mrkn/pycall.git $ git checkout -t origin/eval $ bundle install $ bundle exec ruby example/hist.rb ⚠ まだ実用段階ではない
Ruby Business Users Conference 2017 (2017.02.23) デモンストレーション
Ruby Business Users Conference 2017 (2017.02.23)
Ruby Business Users Conference 2017 (2017.02.23)
Ruby Business Users Conference 2017 (2017.02.23)
Ruby Business Users Conference 2017 (2017.02.23)
Ruby Business Users Conference 2017 (2017.02.23) Python → Ruby #
Python のこのコードを from sklearn.datasets import fetch_olivetti_faces data = fetch_olivetti_faces() x = data.images.reshape((len(data.images), -1)) y = data.target # 現状の PyCall を使って Ruby で書くとこうなる require 'pycall/import' import PyCall::Import pyfrom 'sklearn.datasets', import: 'fetch_olivetti_faces' data = fetch_olivetti_faces.() x = data.images.reshape.(PyCall.tuple(PyCall.len(data.images), -1)) y = data.target
Ruby Business Users Conference 2017 (2017.02.23) Python → Ruby #
Python のこのコードを from sklearn.datasets import fetch_olivetti_faces data = fetch_olivetti_faces() # numpy.ndarray オブジェクト x = data.images.reshape((len(data.images), -1)) y = data.target # 現状の PyCall を使って Ruby で書くとこうなる require 'pycall/import' import PyCall::Import pyfrom 'sklearn.datasets', import: 'fetch_olivetti_faces' data = fetch_olivetti_faces.() x = data.images.reshape.(PyCall.tuple(PyCall.len(data.images), -1)) y = data.target 不自然な部分を隠すための ラッパーライブラリを作る 必要がある
Ruby Business Users Conference 2017 (2017.02.23) Ruby VM Python VM
OVNQZOEBSSBZ ΦϒδΣΫτ 1Z$BMM1Z0CKFDU ΦϒδΣΫτ Python 側のオブジェクト のポインタを保持 SFTIBQFؔͷ ΦϒδΣΫτ reshape 属性 1Z$BMM1Z0CKFDU ΦϒδΣΫτ [2] call メソッドの呼び出し [3] PyObject_Call 関数の呼び出し 例: NumPy 配列の reshape の動き [1] reshape 属性の取り出し
Ruby Business Users Conference 2017 (2017.02.23) PyCall の今後の開発予定 • Python
オブジェクトを Ruby から操作するための機能の完成 • Ruby オブジェクトを Python から操作するための機能 • Ruby ←→ Python 両方向のコールバック機能 • PyCall が事前に知らない型変換のサポート • Python オブジェクトの IRuby 対応 • PyCall を生で使った時の Ruby としての不自然さを隠すラッ パーライブラリの開発
Ruby Business Users Conference 2017 (2017.02.23) PyCall 以外 • R
とのブリッジ • Julia とのブリッジ • Python、R、Julia、Ruby の4者間で の自然なデータ交換の実現 • etc.
Ruby Business Users Conference 2017 (2017.02.23) マイルストーン http://www.s-itoc.jp/report/reaserch_results/439 図: 多言語ブリッジの開発計画(上段)とRuby
Grant 2016(下段)との関係
Ruby Business Users Conference 2017 (2017.02.23) ITOC Report • 『データサイエンスにおけるRubyの
現在の位置づけと可能性』 • http://www.s-itoc.jp/report/ reaserch_results/439
Ruby Business Users Conference 2017 (2017.02.23) まとめ • はじめに •
統計分析と機械学習 • Ruby とデータサイエンスの関係 • Ruby のためのデータサイエンス環境 • まとめ
Ruby Business Users Conference 2017 (2017.02.23) まとめ • Ruby でデータサイエンスができる世界を作るために
‣ Python の機能を Ruby から使うブリッジ機能を提供す るライブラリを開発中 ‣ matplotlib, scikit-learn などが動く ‣ Ruby を Python に見せるブリッジも必要 ‣ R と Julia のブリッジも開発する
Ruby Business Users Conference 2017 (2017.02.23) sciruby.slack.com • Slack で意見交換をしましょう
‣ https://sciruby-slack.herokuapp.com/ • 日本語でも英語でも可
Ruby Business Users Conference 2017 (2017.02.23) まとめ • Ruby でデータサイエンスができる世界を作るために
‣ Python の機能を Ruby から使うブリッジ機能を提供す るライブラリを開発中 ‣ matplotlib, scikit-learn などが動く ‣ Ruby を Python に見せるブリッジも必要 ‣ R と Julia のブリッジも開発する https://sciruby-slack.herokuapp.com/