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

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

Makoto Koike
September 11, 2021

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

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

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)