Slide 1

Slide 1 text

スモールデータ勉強会 2024.6.10 1

Slide 2

Slide 2 text

アジェンダ ・スモールデータとは ・標準化 ・PCA ・最小二乗法 ・不均衡データ問題 ・データ収集の心構え 2

Slide 3

Slide 3 text

スモールデータとは 3

Slide 4

Slide 4 text

4 スモールデータとは ビッグデータに比べて少ないデータ。 スモールデータはとはデータの発生自体がまれであったり、デ ータの収集やアノーテションのコストが高かったりして、大量 のデータをAIの学習に使うのが困難なデータ。 ・異常検知の業務における異常側のデータ ・データを取るコストが高いデータ。 装置が壊れる前後のデータ等。 ・アノーテションに非常にコストがかかるデータ 医者など専門家で無いと判断できないデータ ・契約が進むまででこれしか出せませんと言われた極一部のデ ータ https://www.ohmsha.co.jp/book/9784274227783/

Slide 5

Slide 5 text

5 スモールデータ解析の特徴 何も考えずDeep Learningを使うと容易に過学習してしまう。 古典的な手法を使わざるを得ない。 解析対象に対する知識(ドメイン知識)が重要。 データが不足しがちな為、あらかじめ妥当な仮説を立て、仮説に基づいてデータを収集、 解析する。表面的な機械学習やプログラミングの知識では駄目。

Slide 6

Slide 6 text

6 スモールデータで機械学習をするメリット スモールデータであっても、それを持っている競合がほとんどいない。 現場のデータやコストをかけたアノーテションデータは非常に貴重。 ビッグデータになるとGPU等の資本力勝負になるが、スモールデータだと対象や手法の 深い理解が必要で差別化要因となる。

Slide 7

Slide 7 text

標準化 7

Slide 8

Slide 8 text

8 データの標準化 まずやることはデータの標準化(Standardization)。 ・データの平均値を0 ・データの分散を1 標準化前 標準化後

Slide 9

Slide 9 text

9 データの標準化 実際のコード std_x = (x - np.mean(x, axis=0)) / np.std(x, axis=0)) グラフのコードはgithubに上げています https://github.com/natsutan/WorkshopHub

Slide 10

Slide 10 text

10 標準偏差メモ その1 1σに含まれる割合(正規分布の場合)は感覚として掴んでおこう 範囲 確率(1次元) ±1σ 68.3% ±2σ 95.4% ±3σ 99.7% ±1σで68%、3σで99%くらいは感覚として持っていても良い。 標準化されたデータに対して半径1(1σ)の円を描い たとき、その中に含まれるデータは上の表より少ない 気がするけど、理由わかるかな?

Slide 11

Slide 11 text

11 標準偏差メモ その2 サンプリングしたデータの分散の計算はN-1で割る。 標本分散 (sample variance) for n in [10, 20, 100]: x = gaussian_sampling(0, 2.0, n) print(f'n={n}, variance={np.var(x, ddof=0)}, sample variance={np.var(x, ddof=1)}') n variance sample variance 10 3.00 3.33 20 3.45 3.64 100 4.18 4.23 σ=2.0なので、4.0になって欲しい 実際にパラメータがわかっている確率分布からサンプリングして試してみる。 サンプリングすると実際の分散よりも小さい値になりがち。それをN-1で補正している。 ライブラリを使うときは、どちらの値が出てくるのかを確認する。キーワードddofをつけて検索する。 例えばscikit-learnの標準化では標本分散は使われない(ddof=0)

Slide 12

Slide 12 text

12 標準偏差メモ その3 Deep Learningだと、標本分散かどうかは割とどうでもよい。 実務で使っている物体検出やセグメンテーションでも、データ全体の平均と分散を計算して いる。 LabelMeでアノーテションしたデータからCOCOデータセットを作るとき、データ全部の平 均と分散を計算して、学習時、推論時に前処理として設定している。 厳密に言うとこれもサンプリングだからN-1が正しいけど、Nが1000を余裕で超えているの で無視できる。 ただし、スモールデータの時はこの違いが効いてくる。

Slide 13

Slide 13 text

13 データの標準化(再び) まずやることはデータの標準化(Standardization)。 ・データの平均値を0 ・データの分散を1 採用するアルゴリズムの前提条件を確認すること 例1:ランダムフォレストの場合は、標準化の意味は無い。 例2:距離が出てくるアルゴリズムは、標準化(もしくは正規化)がほぼ必須。 k-meansとか、SVM(RFBカーネル)とか。

Slide 14

Slide 14 text

14 スモールデータは疑似相関に注意 スモールデータはデータの極一部しか使わないため、データに偏りがあるという前提 で取り組む。 相関係数を取る前にプロットして目で見るのが大事。 相関関係があると思っていても疑似相関を疑うこと。 疑似相関の例「アイスクリームの売上と水難事故の数」 あるイベントXがあるイベントYの原因である3つの条件 ・XはYに先行して発生しないと行けない ・Xが発生していないときは、Yは発生してはならない ・Xが発生したら、Yは必ず発生しないと行けない

Slide 15

Slide 15 text

PCA(Principal component analysis) 15

Slide 16

Slide 16 text

16 スモールデータと変数の数 データの数より変数(パラメータ)の数が多いときは、上手くフィッテイングできない。 実務では時々ある。 例:工場から提供したもらったデータが40個なのに変数が50個ある。 センサーが10個あって、処理前、処理A、処理B、処理C、処理後とそれぞれ データを取っていると、それだけで50個になる。 EDAを行い手で特徴量を整理するのも良いが、受注前ということもあってそれぞれの値 の意味をヒアリングできないときがある。 そういうときにはPCAを使って次元圧縮を行う。

Slide 17

Slide 17 text

17 PCAの例 テストの結果(国語、英語、数学、物理、化学) https://estat.sci.kagoshima-u.ac.jp/data/cgi-bin/data/whats_data/data/img/932722923_9821.xls からダウンロードしました。 # データをutf-8で読み込む data = np.loadtxt('grade.csv', delimiter=',', skiprows=1, usecols=[1, 2, 3, 4, 5], encoding="utf-8") # データを標準化する。 std_data = (data - np.mean(data, axis=0)) / np.std(data, axis=0) # 主成分分析を行う pca = PCA() pca.fit(std_data)

Slide 18

Slide 18 text

18 PCAの例 PCAの結果をプロット。 5教科(五次元)のデータを2次元に圧縮 各軸に対しての寄与度もプロットできる。 5教科の点数に対して、第一主成分と第二主成分は何だと思いますか?

Slide 19

Slide 19 text

19 PCAの例 第一主成分に関しては、全ての特徴量が+の値 を取る。5教科の合計点のような数値が一つ目 の軸

Slide 20

Slide 20 text

20 PCAの例 国語と英語が+ 数学、物理、化学が- 国語と英語が 得意な人達 数学、物理、 化学が得意な 人達

Slide 21

Slide 21 text

21 PCAの元ネタ https://www.youtube.com/watch?v=Etjrjx6iSsQ ヨビノリの「主成分分析(PCA)の気持ち」が元ネタです。 詳しく知りたい人は動画を見てください

Slide 22

Slide 22 text

最小二乗法 22

Slide 23

Slide 23 text

23 最小二乗法 こういう回帰モデルを考える 正規方程式 正規方程式の解

Slide 24

Slide 24 text

24 最小二乗法 最小二乗法の注意点:多重共線性 データ(特徴量)に強い相関がある場合、上手く係数が求められない。 ・回帰の係数のばらつきが大きくなる。 ・時には符号が反転する ・わずかな測定のノイズにも過剰に反応する。 →推論精度が下がる、分析が出来なくなる。 https://www.slideshare.net/slideshow/interpretable-ml/177211332 機械学習の解釈勉強会を思いだして。 残念なことに、普通は特徴量はそれぞれ 相関を持っている。

Slide 25

Slide 25 text

25 最小二乗法 多重共線性を避ける方法 ・PCAを使って特徴量を減らす。 PCR(主成分回帰)と呼ぶ ・L2 normを使う(リッジ回帰) ・PLS(部分的最小二乗法) 狙いはPCAと同じ。 PCAとの違いは、出力も含めて潜在変数Tを作る。そのTを使って推論する。 (PCAは入力だけ見る)

Slide 26

Slide 26 text

不均衡データ問題 26

Slide 27

Slide 27 text

27 分類問題と不均衡データ問題 不均衡データの例 ・医療データは健康なデータはいくらでも集まるが、患者のデータは集めにくい。 ・災害時のデータ ・地下資源のデータ 不均衡データの問題 10000人に一人しか発症しない病気の場合、全て病気無しと回答すれば精度が99.99% になる。 実際に病気 実際に健康 病気と推論 TP(True Positiv) FP(False Positive) 健康と推論 FN(False Negatve) FN(False Negative) ROC曲線とか実際のアルゴリムは省略。 興味ある人は本を読んでください。 データにフォーカスします。

Slide 28

Slide 28 text

28 データの不均衡度 2つのクラス分類の時の、少数派データの割合を不均衡度という。 2つのクラスが同じ数であれば0.5になる。 r = 0.2程度まで低下すると通常の方法では学習が困難 r < 0.1となると十分に不均衡なデータといえる。 データのサンプリングを工夫して、不均衡度を制御する。 𝑟 = 𝑁𝑚𝑖𝑛 𝑁𝑚𝑎𝑗 + 𝑁𝑚𝑖𝑛

Slide 29

Slide 29 text

29 アンダーサンプリング 多数派データを間引く ・ランダムに間引く。単純だがまあまあ上手く行く ・クラスタ基準アンダーサンプリング。クラスタリングしてから間引く。 ・トメクリンク Human-in-the-loop機械学習勉強会おさらい。 Human-in-the-loop機械学習では、クラスタリングし て外れ値を見つけて学習データとした。 不均衡データでは、多数派データをクラスタリングし て、それぞれのクラスタからサンプリングする。 クラスターのセンターをサンプルした値にする手法も ある。

Slide 30

Slide 30 text

30 オーバーサンプリング 少数派データを増やす。アンダーサンプリングを組み合わせても良い SMOTE 少数派のデータから内挿してデータを作る。 4点から内挿するケース

Slide 31

Slide 31 text

31 サンプリングとBoostingの組み合わせ RUSboost ランダムアンダーサンプリングと、Boostingの組み合わせ。 Boosting時にランダムサンプリングを行うことで、不均衡なデータでも上手く学習できる。 https://www.biorxiv.org/content/10.1101/2021.10.06.463434v1.full.pdf

Slide 32

Slide 32 text

データ収集の心構え 32

Slide 33

Slide 33 text

33 データ収集の心構え 正しく問題を設定する。 何のためにスモールデータ解析をするのかを明確にする。それにより求める精度が変ってくる。 ベースラインを定義してベースラインと比較する 三現主義 ・現場に足を運び、現場の状況を把握する ・現物を触れて、物の状態を確認する ・現実をこの目で見て、事実を知る データを一つ一つ確認する スモールデータの意義 解析対象に対する知識(ドメイン知識)が重要。 データが不足しがちな為、あらかじめ妥当な仮説を立て、仮説に基づいてデータを収集、解析す る。表面的な機械学習やプログラミングの知識では駄目。 スモールデータだと対象や手法の深い理解が必要で、それが差別化要因となる。