1 of 31

はじめての機械学習

@y__mattu 2024-04-20

Tokyo.R #112

2 of 31

2

誰?

  • 名前: 松村優哉
  • 学⽣時代の専⾨: 計量経済学、

ベイズ統計、因果推論、マーケティング

  • マーケティング系企業でデータサイエンティスト
  • Tokyo.R 運営(初⼼者セッション等)

@y__mattu

ymattu

近況

ガールズバンドクライはいいぞ

3 of 31

3

宣伝

  • 『RユーザのためのRStudio[実践]入門』
  • 『Rユーザのためのtidymodels[実践]入門』

4 of 31

4

5 of 31

5

目次

  • 機械学習とは
  • 教師あり学習 vs 教師なし学習
  • 分類 vs 回帰
  • モデル選択
  • Rで機械学習

6 of 31

この資料の対象・目的

対象

  • 「AI」は聞いたことがあるけど「機械学習」という言葉を初めて聞く
  • これからデータ分析を勉強する

目的

  • 「機械学習って結局何をやってるの?」をざっくり理解する
    • 「機械学習 = 難しい」or「AIめっちゃすごい」というイメージの払拭
  • これから勉強するときの持っておくといいイメージを身につける
  • よく出てくるキーワードの理解

話さないこと

  • 数式による解説

5

7 of 31

機械学習とは

7

  • ⼀⾔で

データからパターンを認識し、

未知の答えを予測するためのルールを自動的に作り出すように、

マシン(コンピュータ)をトレーニングする

8 of 31

簡単なイメージ

8

  • 残業時間で退職の有無およそ判断できるように、線を引く

=パターン認識

  • 残業時間と退職のデータがあったとします

退職した

退職しない

残業時間

残業時間

0

30

60

100

0

30

60

100

9 of 31

簡単なイメージ

9

  • 新しいデータが得られたとき、引いた線によって、退職の有無を予 測できる

残業時間

0

30

60

100

アルゴリズム

データ

モデル

線の引き⽅

線が引かれている状態

10 of 31

教師あり学習 vs 教師なし学習

11 of 31

どのようにモデルを学習するか

11

退職

残業時間

給与

・・・

年齢

1

0

0

1

目的変数従属変数

  • 教師あり学習
    • 過去のデータの中にラベルがある
    • モデルとは、ラベルと変数の関係性を表したもの

説明変数

独立変数

特徴量

12 of 31

教師あり学習の代表的なアルゴリズム

12

  • 線形回帰
  • ロジスティック回帰、GLM
  • SVM
  • 決定木、ランダムフォレスト
  • XGBoost、LightGBM
  • ニューラルネットワーク

ほかにもたくさん

13 of 31

13

退職

残業時間

給与

・・・

年齢

1

0

0

1

アルゴリズム

モデル

退職

残業時間

給与

・・・

年齢

退職

残業時間

給与

・・・

年齢

0

0

1

1

予測

14 of 31

どのようにモデルを学習するか

14

  • 教師なし学習
    • 過去のデータの中にラベルがない
    • モデルの中身は、グループ分けのルール
    • ラベルは、分けられた結果を見て人がつける

残業時間

給与

・・・

年齢

残業・多給与・多

残業・少給与・多

説明変数

独立変数

特徴量

15 of 31

教師なし学習の代表的なアルゴリズム

15

  • クラスタリング

k-means

主成分分析

  • 異常検知
  • トピックモデル

ほかにもたくさん

16 of 31

ここからは、教師あり学習に

焦点を当てて

17 of 31

分類 vs 回帰

18 of 31

分類と回帰

  • 回帰
    • 目的変数が数値

来期の受注数は?来店数は?

17

  • 分類
    • 目的変数がカテゴリー

辞める?辞めない?

犬?猫?ライオン?

株価は?

二値分類

多値分類・多クラス分類

19 of 31

モデル選択

(モデルの当てはまりと汎化性)

20 of 31

モデル選択

20

  • 一番良い線の引き方は?
    • 学習データに対する精度
    • 未知のデータに対する予測力

給料

300万

50

10

30

残業時間

20

40

600万

21 of 31

モデル選択

21

  • 究極的には、こう
    • 学習データに対する予測力: 100%
    • 未知のデータに対する予測力: 弱そう

給料

300万

50

10

30

残業時間

20

40

600万

未知のデータがここのとき、モデルはどちらと予測する?

22 of 31

モデル選択

22

  • このくらいがバランス良さそう
    • 学習データに対する予測力: 90%
    • 未知のデータに対する予測力: 強そう

給料

300万

50

10

30

残業時間

20

40

600万

23 of 31

モデル選択

22

  • 未知のデータへの予測力: 強そう、弱そうをどう判断するか?

→データを学習用、テスト用に分割して、テスト用で予測力を測る

  • 参考: クロスバリデーション

退職

1

0

0

1

残業時間

年齢

給与

・・・

学習用

テスト用

ランダムに7:3くらいが多い

https://qiita.com/Takayoshi_Makabe/items/d35eed0c3064b495a08b

24 of 31

分類をRでやってみる

25 of 31

扱うデータ

24

  • ペンギンデータ

install.packages("palmerpenguins")

library(palmerpenguins) data(package = 'palmerpenguinsʼ)

head(penguins) #> # A tibble: 6 x 8

#> species island bill_length_mm bill_depth_mm flipper_length_… body_mass_g sex

#> <fct> <fct> <dbl> <dbl> <int> <int> <fct>

#> 1 Adelie Torge… 39.1 18.7 181 3750 male

#> 2 Adelie Torge… 39.5 17.4 186 3800 fema…

#> 3 Adelie Torge… 40.3 18 195 3250 fema… #> 4 Adelie Torge… NA NA NA NA <NA>

#> 5 Adelie Torge… 36.7 19.3 193 3450 fema…

#> 6 Adelie Torge… 39.3 20.6 190 3650 male

#> # … with 1 more variable: year <int>

dat <- penguins %>% dplyr::filter(!is.na(sex)) # sexが欠損の列を除外

26 of 31

決定木モデル

26

# データを分割

idx <- sample(nrow(dat), nrow(dat) * 0.8)

data.train <- dat[idx, ] data.test <- dat[-idx, ]

model.dt <- partykit::ctree(species ~ . , data = data.train) plot(model.dt, type = "simple")

27 of 31

ランダムフォレスト

27

https://speakerdeck.com/kanaugust/exploratory-semina-number-46-ji-jie-xue-xi-101?slide=69

28 of 31

ランダムフォレスト

27

model.rf <- ranger::ranger(species ~ . , data = data.train,

mtry = 2,num.trees = 50) result.rf <- predict(model.dt, data.test)

cm.rf <- caret::confusionMatrix(result.rf, data.test$species)

#> Confusion Matrix and Statistics #>

#> Reference

#> Prediction Adelie Chinstrap Gentoo

#> Adelie 24

#> Chinstrap 4

#> Gentoo 0

0 0

13 0

0 26

#>

#> Overall Statistics #>

Accuracy : 0.9403

95% CI : (0.8541, 0.9835)

#> #>

#> No Information Rate : 0.4179

#> P-Value [Acc > NIR] : < 2.2e-16

#> ・・・

29 of 31

まとめ

30 of 31

29

まとめ

  • 機械学習は、要するにパターン認識
    • データをマッピングして、線を引くイメージ
  • ⽅法として、教師あり学習と教師なし学習がある
    • 教師あり→データにラベルがある
    • 教師なし→データにラベルがない
  • ラベルが数値の場合、回帰。ラベルがカテゴリの場合、分類
  • モデルの当てはまり・汎化性に気をつけよう
  • Rでは様々なアルゴリズムに対応するパッケージが⽤意されている
    • 使ってみて、統⼀感がないなあと思う場合はtidymodelsもおすすめ

31 of 31

31

tidymodels

  • 『Rユーザのためのtidymodels[実践]入門』