Pro Yearly is on sale from $80 to $50! »

Pythonで、処理をより効率化するためのTips集

Fa3d9249af0282b96d0a348955044bcb?s=47 hiroaki
September 17, 2019
9.6k

 Pythonで、処理をより効率化するためのTips集

PyConJP 2019 二日目LT

Fa3d9249af0282b96d0a348955044bcb?s=128

hiroaki

September 17, 2019
Tweet

Transcript

  1. Pythonで、 処理をより効率化するための Tips集 PyCon JP 2019 長谷川大耀(@Hase8388)

  2. 自己紹介 長谷川大耀(@Hase8388)         で 主に広告分野での 機械学習の開発やってます

  3. 広告配信では、効率的な前処理が重要 機械学習のモデルは「生物(なまもの)」 データを効率的に処理してモデルに食わせたい そのためにやっている工夫について紹介します

  4. TIPS: 1 巨大なデータセットを 逐次処理するための工夫

  5. 問題 まだ使用しないオブジェクトも、 メモリに乗ってしまう list( ) model.fit( )

  6. 解決策 yield文で必要な分だけ乗せて処理  model.fit( ) yield( )

  7. さらにパイプラインも簡単に作れる yield( ) yield( ) yield( )

  8. Tips: 2 重い処理を何度も何度も       しないための工夫

  9. for i in range(N): request( ) 問題 何度も重い計算や外部APIを叩いてしまう 外部 サーバー

  10. 解決策 @lru_cacheで取得値を保存しておく 外部 サーバー for i in range(N): request

  11. 状態が変わる処理は、キャッシュをクリアに

  12. TIPS3: データを加工するときに       行っている工夫

  13. 問題 One-Hot Encodingの処理に 時間とメモリを食う

  14. 解決策 scipy.sparseのcoo(座標)形式をうまく使う A : (y=0, x= 0) B : (y=1,

    x= 1) C : (y=2, x= 2) A : (y=3, x=0)
  15. その他形式も、うまく使えば パフォーマンスUP! • 他にも様々な特性が異なる形式が存在 • どの形式も一長一短なことに注意 ! csc_matrix 列方向の処理に強い 行方向の処理に弱い

    csr_matrix 行方向の処理に強い 列方向の処理に弱い dia_matrix 算術演算に強い 疎行列は対角のみ
  16. まとめ メモリを効率化するために、yieldでストリーム処理に置き換える 逐一取得しなくても良いようにキャッシュできないか考える 疎な行列の場合は、用途ごとにあった疎行列をうまく使う Python楽しい ✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

  17. エンジニアを積極採用中です ! Front-end Back-end Scala / Go Python JS /

    Elm React / RN
  18. オフィス見学 / カジュアル面談も実施しております Wantedlyからお気軽にお申し込みください!