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