Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pythonで不均衡で一貫性のないデータセットを少しだけマシにする話

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Makoto Koike Makoto Koike
September 11, 2021

 Pythonで不均衡で一貫性のないデータセットを少しだけマシにする話

Python Charity Talks in Japan 2021.09 コミュニティセッション2:Unagi.py/Python駿河
https://pyconjp.connpass.com/event/218154/

Avatar for Makoto Koike

Makoto Koike

September 11, 2021
Tweet

More Decks by Makoto Koike

Other Decks in Programming

Transcript

  1. 自己紹介 小池 @ike_jpn • キュウリ農家 • 組み込みエンジニア • Pythonでやってること ◦ 機械学習(時系列データ分析・画像認識)

    ◦ プロトタイプ開発全般 • 最近やってること ◦ 農業に使えるモノづくり! ◦ ロボットアーム作りたい! <キュウリ等級判別装置の開発> <自作ロボットアーム(開発中)>
  2. • スマート農業 • 省力化&高品質生産の実現 農業でもデータ活用! Data Analysis sensing Auto mation

    ハウス環境センサ 培地重センサ ボイラー稼働モニタ 等級選別の自動化 灌水自動化 データドリブン な経営判断
  3. 農業現場でのデータ活用の難しさ • 農業は感と経験の世界 ◦ 基本的には自然が相手 ◦ 明確な基準がない(定めるべきでない) • データ収集のための機材設置が困難 ◦

    電源がない ◦ 厳しい環境(冬は-2℃ ~ 夏50℃,防水) • 栽培失敗のデータが集まりにくい ◦ 失敗したら生活していけないからね! ⇒ 農業で扱うデータは不均衡で一貫性のないことが多い 等級:高 等級:中 【キュウリの等級判別の例】 違いなんて 見たらわかる だろ! なるほど, (わからん...)
  4. 不均衡なデータへの主な対策 • Data-Centric ◦ Sampling Method ▪ Over-sampling ▪ Under-sampling

    ▪ Combination ◦ Active Learning Method [1]H.He, Y.Ma, “IMBALANCED LEARNING:Foundations, Algorithms, and Applications”, Wiley IEEE Press, 2013. [2]P.Branco, L.Torgo, R.P.Ribeiro, “A Survey of Predictive Modeling on Imbalanced Domains”, ACM Computing Surveys(CSUR), No. 42(2), 2016. ※これらを組み合わせたHybridな手法もある • Model-Centric ◦ Cost-Sensitive Method ▪ Loss weighting ▪ Ranking etc... ◦ Ensemble(+resampling) Method ▪ Boosting ▪ Bagging etc... ◦ One-Class Learning Method ▪ Anomaly Detection etc... imbalanced-learnで対応
  5. SMOTE(Over-Sampling) • k近傍法を用いたover-sampling手法 • 最もデータ数が多いクラスに合わせデータ数を均等にする from imblearn.over_sampling import SMOTE X

    = [データ配列] # 不均衡なデータセット y = [ラベル配列] # 不均衡なデータセット X_resampled, y_resampled = SMOTE().fit_resample(X, y) k=3の場合の例: 破線上にデータが追加 される :元データ :追加 たった1行で均等なサンプル数のデータセットが生成 できる!
  6. 一貫性のないデータセットへの対策 [3]C.Northcutt, L.Jiang, I.Chuang, “Confident Learning: Estimating Uncertainty in Dataset

    Labels”, JAIR, Vol.70, 2021. • Confident Learning[3] ◦ 誤ったラベルを学習から排除しよう! ◦ 誤ラベルの確率分布Q y^,y* を予測 ◦ Q y^,y* に基づき誤ラベルデータを取り除く ▪ 5つの手法がある • 論文著者による実装がCLEANLAB 鹿 鳥 馬 ・「鹿」を「鳥」と間違えてラベル付けする確率:0% ・「鹿」を「馬」と間違えてラベル付けする確率:10% ⇒ 誤ラベルが確率的に発生すると仮定
  7. CELANLABを使った学習 • sklearnのAPIとほぼ同じ感じで使える from cleanlab.classification import LearningWithNoisyLabels tr_X = [一貫性のない教師データ]

    tr_y = [一貫性のない教師データラベル ] # SVC clf = SVC(C=6) lnl = LearningWithNoisyLabels(clf=clf) lnl.fit(tr_x, tr_y) y_ = lnl.predict(ts_y)