はじめての機械学習
@y__mattu 2024-04-20
Tokyo.R #112
2
誰?
ベイズ統計、因果推論、マーケティング
@y__mattu
ymattu
近況
ガールズバンドクライはいいぞ
3
宣伝
4
5
目次
この資料の対象・目的
対象
目的
話さないこと
5
機械学習とは
7
データからパターンを認識し、
未知の答えを予測するためのルールを自動的に作り出すように、
マシン(コンピュータ)をトレーニングする
簡単なイメージ
8
=パターン認識
退職した
退職しない
残業時間
残業時間
0
30
60
100
0
30
60
100
簡単なイメージ
9
残業時間
0
30
60
100
アルゴリズム
データ
モデル
線の引き⽅
線が引かれている状態
| | | |
| | | |
| | | |
| | | |
教師あり学習 vs 教師なし学習
どのようにモデルを学習するか
11
退職 | 残業時間 | 給与 | ・・・ | 年齢 |
1 | | | | |
0 | | | | |
0 | | | | |
1 | | | | |
目的変数従属変数
説明変数
独立変数
特徴量
教師あり学習の代表的なアルゴリズム
12
ほかにもたくさん
13
退職 | 残業時間 | 給与 | ・・・ | 年齢 |
1 | | | | |
0 | | | | |
0 | | | | |
1 | | | | |
アルゴリズム
モデル
退職 | 残業時間 | 給与 | ・・・ | 年齢 |
︖ | | | | |
︖ | | | | |
︖ | | | | |
︖ | | | | |
退職 | 残業時間 | 給与 | ・・・ | 年齢 |
0 | | | | |
0 | | | | |
1 | | | | |
1 | | | | |
予測
どのようにモデルを学習するか
14
残業時間 | 給与 | ・・・ | 年齢 |
| | | |
| | | |
| | | |
| | | |
残業・多給与・多
残業・少給与・多
説明変数
独立変数
特徴量
教師なし学習の代表的なアルゴリズム
15
k-means
主成分分析
ほかにもたくさん
ここからは、教師あり学習に
焦点を当てて
分類 vs 回帰
分類と回帰
来期の受注数は?来店数は?
17
辞める?辞めない?
犬?猫?ライオン?
株価は?
二値分類
多値分類・多クラス分類
モデル選択
(モデルの当てはまりと汎化性)
モデル選択
20
給料
300万
50
10
30
残業時間
20
40
600万
モデル選択
21
給料
300万
50
10
30
残業時間
20
40
600万
未知のデータがここのとき、モデルはどちらと予測する?
モデル選択
22
給料
300万
50
10
30
残業時間
20
40
600万
モデル選択
22
→データを学習用、テスト用に分割して、テスト用で予測力を測る
退職
1
0
0
1
残業時間
年齢
給与
・・・
学習用
テスト用
ランダムに7:3くらいが多い
https://qiita.com/Takayoshi_Makabe/items/d35eed0c3064b495a08b
分類をRでやってみる
扱うデータ
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
# データを分割
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
https://speakerdeck.com/kanaugust/exploratory-semina-number-46-ji-jie-xue-xi-101?slide=69
ランダムフォレスト
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
まとめ
31
tidymodels