Pythonで、処理をより効率化するためのTips集
by
hiroaki
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Pythonで、 処理をより効率化するための Tips集 PyCon JP 2019 長谷川大耀(@Hase8388)
Slide 2
Slide 2 text
自己紹介 長谷川大耀(@Hase8388) で 主に広告分野での 機械学習の開発やってます
Slide 3
Slide 3 text
広告配信では、効率的な前処理が重要 機械学習のモデルは「生物(なまもの)」 データを効率的に処理してモデルに食わせたい そのためにやっている工夫について紹介します
Slide 4
Slide 4 text
TIPS: 1 巨大なデータセットを 逐次処理するための工夫
Slide 5
Slide 5 text
問題 まだ使用しないオブジェクトも、 メモリに乗ってしまう list( ) model.fit( )
Slide 6
Slide 6 text
解決策 yield文で必要な分だけ乗せて処理 model.fit( ) yield( )
Slide 7
Slide 7 text
さらにパイプラインも簡単に作れる yield( ) yield( ) yield( )
Slide 8
Slide 8 text
Tips: 2 重い処理を何度も何度も しないための工夫
Slide 9
Slide 9 text
for i in range(N): request( ) 問題 何度も重い計算や外部APIを叩いてしまう 外部 サーバー
Slide 10
Slide 10 text
解決策 @lru_cacheで取得値を保存しておく 外部 サーバー for i in range(N): request
Slide 11
Slide 11 text
状態が変わる処理は、キャッシュをクリアに
Slide 12
Slide 12 text
TIPS3: データを加工するときに 行っている工夫
Slide 13
Slide 13 text
問題 One-Hot Encodingの処理に 時間とメモリを食う
Slide 14
Slide 14 text
解決策 scipy.sparseのcoo(座標)形式をうまく使う A : (y=0, x= 0) B : (y=1, x= 1) C : (y=2, x= 2) A : (y=3, x=0)
Slide 15
Slide 15 text
その他形式も、うまく使えば パフォーマンスUP! ● 他にも様々な特性が異なる形式が存在 ● どの形式も一長一短なことに注意 ! csc_matrix 列方向の処理に強い 行方向の処理に弱い csr_matrix 行方向の処理に強い 列方向の処理に弱い dia_matrix 算術演算に強い 疎行列は対角のみ
Slide 16
Slide 16 text
まとめ メモリを効率化するために、yieldでストリーム処理に置き換える 逐一取得しなくても良いようにキャッシュできないか考える 疎な行列の場合は、用途ごとにあった疎行列をうまく使う Python楽しい ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌
Slide 17
Slide 17 text
エンジニアを積極採用中です ! Front-end Back-end Scala / Go Python JS / Elm React / RN
Slide 18
Slide 18 text
オフィス見学 / カジュアル面談も実施しております Wantedlyからお気軽にお申し込みください!