SlideShare a Scribd company logo
Pythonによる機械学習の最前線
2016/2/4
ソフトウェアジャパン
ビッグデータ活用実務フォーラム
シルバーエッグ・テクノロジー(株)
加藤公一
自己紹介
加藤公一(かとうきみかず)
シルバーエッグ・テクノロジー(株)
博士(情報理工学) (修士は数理科学)
Twitter: @hamukazu
機械学習歴・Python歴ともに3年
今の仕事: 機械学習に関する研究開発
特にレコメンデーション(自動推薦)システム、自然言語処理、画
像処理など
過去の仕事: データ分析ツールの開発、3次元CADの開発、幾何計
算のアルゴリズム設計、偏微分方程式のソルバなど
Pythonで使える
機械学習・データ分析のツール
• 汎用数値計算、科学技術計算:Numpy, Scipy
• 機械学習:scikit-learn
• 自然言語処理:nltk
• データ分析:pandas
• データ可視化:matplotlib
• 統合分析環境:jupyter-notebook
Pythonで使える
ディープラーニングのライブラリ
• Pylearn2
• Caffe
• TensorFlow
• Chainer
Scikit-learn + matplotlib
分類 クラスタリング
回帰
機械学習アルゴリズムの適用と結
果の可視化をとても便利にできる
絵はすべてscikit-learnホームページ(http://scikit-learn.org)より
matplotlib + scikit-learn入門にお薦め
データサイエンティスト養成講座機械学習入門編
第2部特集2「Pythonによる機械学習入門」
可視化応用編
• さらにインタラクティブな可視化をしたいとき
– 例えば…
• クリックした部分だけ拡大したい
• マウスオーバーすると詳細情報を表示したい
• そういうときはPython+JavaScriptが便利
• Pythonでアプリケーションサーバを立ち上げるの
は簡単
– Bottle、Flaskなどの軽量フレームワーク
– サーバと連携してのJavaScriptでの可視化
• ウェブアプリの仕組みはデータ分析にも有用
などなど…
• 便利なツールとその使い方を挙げていくとき
りがありません
• これ以降は、ライブラリを使ってというより、フ
ルスクラッチからアルゴリズムを書きたい人を
対象の話
今日のターゲット
• 機械学習のアルゴリズムをゴリゴリ書きたい
人
• (機械学習とは限らない)数値計算、アルゴリ
ズムなどの分野で、他の言語で実装していて
苦労している人
つまり、Pythonを使うべきなのに使ってない人
がいるのでは?
スクリプト言語とは
「アプリケーションソフトウェアを作成するための簡
易的なプログラミング言語の一種を指す」
-- Wikipedia
Perl, Ruby, Pythonなど
特徴:
• 短い行数で(少ないタイプ数で)書ける
– つまり生産性が高い
– 初心者が学習しやすい
• インタプリタ型である
• 実行速度が遅い
注意:Pythonは汎用言語です!
数学的用途以外にも使えます。
• ウェブアプリ作ったり
• ゲーム作ったり
• ツイッターのボット作ったり
• ラズベリーパイからLED光らせたり
もできます。
でも今日はその話はしません。
数値計算・数学的アルゴリズムで
Pythonを使うべき理由
• ライブラリが充実
• 結果の可視化が便利
• (うまくコードを書くと)速い⇨以降この話
数値計算、アルゴリズム系の人、
「Pythonは遅いからイヤ」と思ってる人が多いの
では?
Pythonでやってはいけないこと
s = 0
for i in range(1, 100000001):
s += i
print(s)
1から1億までの和を計算する
これはPython的な書き方ではない
改善例
s = sum(range(1, 100000001))
print(s)
1から1億を返すイテレータを用意し、その和を計算する
Numpyを使う
import numpy as np
a = np.arange(1, 100000001, dtype=np.int64)
print(a.sum())
1から1億が入った配列を用意し、その和を計算する
ベンチマーク
s = 0
for i in range(1, 100000001):
s += i
print(s)
s = sum(range(1, 100000001))
print(s)
30.21秒
12.33秒
0.38秒
import numpy as np
a = np.arange(1, 100000001, dtype=np.int64)
print(a.sum())
問題点(?)
• Numpy版は1~100000000が入った配列をあ
らかじめ用意している
• つまりメモリが無駄
• メモリにデータを入れるコストも無駄
⇨Pythonistaはそんなこと気にしない!
ここまでのまとめ
• Pythonの数値計算系ライブラリはC言語等で書
かれているので速い
• できるだけ計算はライブラリに任せたほうがいい
• ライブラリとのやり取りを大量にするより、一度ラ
イブラリに仕事を投げたらしばらく返ってこないく
らいの処理がよい
– Numpyには高速化のための仕組みがたくさんある
(indexing, slicing, broadcasting, etc…)
• そのためにメモリ量やメモリコピーコストがか
かっても気にしない
でもそれができないときがある
• ライブラリ内ではなく、Python側で条件分岐が
大量に必要になる場合
• どうしてもfor文(while文)で細かい処理をたく
さん回さなければいけないとき
• 例えば探索系アルゴリズム、組み合わせ最
適化など
そんなときに…
Cython
• PythonをベースにしたC言語のジェネレータ
• Pythonで書いたものをそのまま速くすること
ができる
• ちょっと手を入れることでさらに速く
ベンチマーク例
def prime(n):
p = [True] * (n + 1)
m = 2
while m < n + 1:
if p[m]:
i = m * 2
while i < n + 1:
p[i] = False
i += m
m += 1
i = n
while not p[i]:
i -= 1
return i
n以下の最大の素数を返す関数
(エラトステネスのふるい)
通常のPython版:4.75秒 Cython化版:3.04秒
prime(10000000)を計算
(コードには手を入れず)
def prime(int n):
cdef int i, m
p = [True] * (n + 1)
m = 2
while m < n + 1:
if p[m]:
i = m * 2
while i < n + 1:
p[i] = False
i += m
m += 1
i = n
while not p[i]:
i -= 1
return i
def prime(n):
p = [True] * (n + 1)
m = 2
while m < n + 1:
if p[m]:
i = m * 2
while i < n + 1:
p[i] = False
i += m
m += 1
i = n
while not p[i]:
i -= 1
return i
型宣言をいれる
3.04秒 0.41秒
def prime(int n):
cdef int m, i
cdef int * p = <int * >malloc((n + 1) * sizeof(int))
for i in range(n + 1):
p[i] = 1
m = 2
while m < n + 1:
if p[m]:
i = m * 2
while i < n + 1:
p[i] = 0
i += m
m += 1
i = n
while not p[i]:
i -= 1
free(p)
return i
0.41秒 0.17秒
リスト(配列)についてもC言語風の型宣言と動的割当て
FAQ
これって、最初からC言語で書いたほうが早くな
いですか?
Answer
• 確かに最初から最終形がわかっていればC言
語で書いたほうが早いかもしれないです。
• しかし、とりあえずPythonで書いて動作を確
認し、それから徐々に高速化するというのに
はCythonは便利です。
まとめ
• Pythonには数値計算、機械学習、データ分析
に便利なライブラリがそろっている
• Pythonはうまくつかうとかなり速い
– できるだけ仕事はまとめてライブラリに任せる
– それができないときはCythonを使う
– Cythonならではの工夫(型宣言)などが必要

More Related Content

PDF
Pythonデータ分析 第3回勉強会資料 8章
PDF
Python 機械学習プログラミング データ分析ライブラリー解説編
PDF
機械学習ゴリゴリ派のための数学とPython
PDF
NumPy闇入門
PDF
数式をnumpyに落としこむコツ
PDF
Introduction to NumPy & SciPy
PDF
DS Exercise Course 3
PPTX
Python 学習教材 (300~309ページ)
Pythonデータ分析 第3回勉強会資料 8章
Python 機械学習プログラミング データ分析ライブラリー解説編
機械学習ゴリゴリ派のための数学とPython
NumPy闇入門
数式をnumpyに落としこむコツ
Introduction to NumPy & SciPy
DS Exercise Course 3
Python 学習教材 (300~309ページ)

What's hot (20)

PPTX
Python 学習教材 (~299ページ)
PDF
TensorFlowによるニューラルネットワーク入門
PDF
2013.07.15 はじパタlt scikit-learnで始める機械学習
PPTX
Python 学習教材
PDF
DS Exercise Course 2
PPTX
Python基礎その2
PDF
Python 機械学習プログラミング データ分析演習編
PPTX
Python基礎その1
PDF
科学技術計算関連Pythonパッケージの概要
PDF
NumPyが物足りない人へのCython入門
PDF
Introduction to Chainer and CuPy
PDF
実践コンピュータビジョン 3章 画像間の写像
PDF
アルゴリズムを楽しく!@PiyogrammerConference
PDF
Pythonによる機械学習
PDF
Python for Data Anaysis第2回勉強会4,5章
PDF
「深層学習」勉強会LT資料 "Chainer使ってみた"
PDF
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
PDF
Introduction to Chainer (LL Ring Recursive)
PPTX
Deep Learning基本理論とTensorFlow
PPTX
Pythonとdeep learningで手書き文字認識
Python 学習教材 (~299ページ)
TensorFlowによるニューラルネットワーク入門
2013.07.15 はじパタlt scikit-learnで始める機械学習
Python 学習教材
DS Exercise Course 2
Python基礎その2
Python 機械学習プログラミング データ分析演習編
Python基礎その1
科学技術計算関連Pythonパッケージの概要
NumPyが物足りない人へのCython入門
Introduction to Chainer and CuPy
実践コンピュータビジョン 3章 画像間の写像
アルゴリズムを楽しく!@PiyogrammerConference
Pythonによる機械学習
Python for Data Anaysis第2回勉強会4,5章
「深層学習」勉強会LT資料 "Chainer使ってみた"
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Introduction to Chainer (LL Ring Recursive)
Deep Learning基本理論とTensorFlow
Pythonとdeep learningで手書き文字認識
Ad

Similar to Pythonによる機械学習の最前線 (20)

PDF
High performance python computing for data science
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PPTX
Wacode5thでのpython講義資料
PDF
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
PDF
DATUM STUDIO PyCon2016 Turorial
PDF
Introduction to Numpy (and Python) [JPN]
PDF
ディープラーニングフレームワーク とChainerの実装
PDF
次世代言語 Python による PyPy を使った次世代の処理系開発
PDF
弁理士が知っておきたいPython①
PPTX
Tfug kansai vol1
PDF
Cython intro prelerease
PPTX
Django_Fukuoka
PDF
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
PDF
多次元配列の効率的利用法の検討
PDF
PyPy 紹介
PDF
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
PDF
Django_fukuoka
KEY
ひのきのぼうだけで全クリ目指す
High performance python computing for data science
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
Wacode5thでのpython講義資料
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
DATUM STUDIO PyCon2016 Turorial
Introduction to Numpy (and Python) [JPN]
ディープラーニングフレームワーク とChainerの実装
次世代言語 Python による PyPy を使った次世代の処理系開発
弁理士が知っておきたいPython①
Tfug kansai vol1
Cython intro prelerease
Django_Fukuoka
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
多次元配列の効率的利用法の検討
PyPy 紹介
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
Django_fukuoka
ひのきのぼうだけで全クリ目指す
Ad

More from Kimikazu Kato (20)

PDF
Tokyo webmining 2017-10-28
PDF
Pythonを使った機械学習の学習
PDF
Fast and Probvably Seedings for k-Means
PDF
Pythonで機械学習入門以前
PDF
Introduction to behavior based recommendation system
PDF
Sparse pca via bipartite matching
PDF
正しいプログラミング言語の覚え方
PDF
養成読本と私
PDF
Introduction to NumPy for Machine Learning Programmers
PDF
Recommendation System --Theory and Practice
PDF
A Safe Rule for Sparse Logistic Regression
PDF
特定の不快感を与えるツイートの分類と自動生成について
PDF
Effective Numerical Computation in NumPy and SciPy
PDF
Sapporo20140709
PDF
【論文紹介】Approximate Bayesian Image Interpretation Using Generative Probabilisti...
PDF
Zuang-FPSGD
PDF
About Our Recommender System
PDF
ネット通販向けレコメンドシステム提供サービスについて
PPTX
関東GPGPU勉強会資料
PDF
2012-03-08 MSS研究会
Tokyo webmining 2017-10-28
Pythonを使った機械学習の学習
Fast and Probvably Seedings for k-Means
Pythonで機械学習入門以前
Introduction to behavior based recommendation system
Sparse pca via bipartite matching
正しいプログラミング言語の覚え方
養成読本と私
Introduction to NumPy for Machine Learning Programmers
Recommendation System --Theory and Practice
A Safe Rule for Sparse Logistic Regression
特定の不快感を与えるツイートの分類と自動生成について
Effective Numerical Computation in NumPy and SciPy
Sapporo20140709
【論文紹介】Approximate Bayesian Image Interpretation Using Generative Probabilisti...
Zuang-FPSGD
About Our Recommender System
ネット通販向けレコメンドシステム提供サービスについて
関東GPGPU勉強会資料
2012-03-08 MSS研究会

Pythonによる機械学習の最前線