Top Banner
glmnet 48勉強会@東京(#TokyoR) @teramonagi 5分でわかるかもしれない
20

5分でわかるかもしれないglmnet

Aug 06, 2015

Download

Technology

tera monagi
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 5分でわかるかもしれないglmnet

glmnet

第48回 勉強会@東京(#TokyoR)

@teramonagi

5分でわかるかもしれない

Page 2: 5分でわかるかもしれないglmnet

誰や?

Page 3: 5分でわかるかもしれないglmnet

俺や

• ID: @teramonagi

•職種:データ分析おじさん

•業務:ブカーの育成&会議&翻訳

•言語:/R/F#/Ruby/Python/C++/

•特技:早起き・根回し

3

優秀な新人怖い

Page 4: 5分でわかるかもしれないglmnet

glmnetとは

glmnet = glm+愛の鞭

4

※glm:一般化線形モデル(用の関数)

※一般化線形モデルの解説はしない

Page 5: 5分でわかるかもしれないglmnet

glmnetとは

• 愛の鞭(正則化)を一般化線形モデル(GLM)に適用できるパッケージ

• 愛の鞭(正則化)の種類

–Lasso (ラッソ, L1正則化)

–Ridge(リッジ , L2正則化)

–Elastic-net(L1+L2正則化)

• カバーされているGLMなモデル

–線形、(多項 or 多クラス)ロジスティック、ポアソン、コックスモデル

5

Page 6: 5分でわかるかもしれないglmnet

モデルの目的関数

6

ラッソ リッジ

尤度関数(モデル依存) 愛の鞭(正則化)

Elastic-Net ※パラメーター推計の際には

これが最小化される

Page 7: 5分でわかるかもしれないglmnet

パラメータ計算 • パラメーター推定のアルゴリズム

–Coordinate Descent • 詳細

–Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010

–http://www.jstatsoft.org/v33/i01/

7

Page 8: 5分でわかるかもしれないglmnet

早速、使ってみる

8

#パッケージをインストールして読み込む

install.packages("glmnet") library(glmnet)

Page 9: 5分でわかるかもしれないglmnet

データの取得 • irisじゃつまらないので、 UCI machine learning

repositoryからワインデータ取得

9

library(dplyr) #ワインデータの読み込み(ダウンロード)

URL <- "http://archive.ics.uci.edu/ml/machine-learning-

databases/wine-quality/winequality-white.csv"

df <- read.csv(URL, sep = ";", stringsAsFactor=FALSE)

#ワインの質(quality)が5, 6のものだけ残して,0,1化する

wine <- df %>%

filter(quality==5|quality==6) %>%

mutate(quality=quality-5)

Page 10: 5分でわかるかもしれないglmnet

glmとの比較(2クラス分類)

10

#statsパッケージのglm(説明変数は適当)

wine_glm <- glm(

quality ~ residual.sugar+sulphates+alcohol,

data=wine, family=binomial) #質(quality)の予測(確率が0.5以上ならクラス1)

quality_glm <- predict(wine_glm, wine, type='response')

table(wine$quality, round(quality_glm))

※glmでの答え(混同行列)

Page 11: 5分でわかるかもしれないglmnet

glmとの比較(2クラス分類)

11

#いちいち行列に変換する必要がある

x <- wine %>%

select(residual.sugar, sulphates, alcohol) %>%

as.matrix

y <- wine %>% select(quality) %>% unlist #glmと同じ結果を出させる

#lambda単一の値は非推奨(らしい)が動く…

#lamdbaに複数入れておいて、predictの引数をs=0にするでもOK

wine_glmnet <- glmnet(x, y, family=“binomial”, lambda=0)

quality_glmnet <- predict(wine_glmnet, newx=x, type=“class”)

table(wine$quality, quality_glmnet)

※glmnetでの答え(混同行列)

※愛の鞭なしでglmと一致

Page 12: 5分でわかるかもしれないglmnet

glmnetのクロスバリデーション

• クロスバリデーションで愛の鞭の痛さを調整できます

12

#CVで最適な"お仕置き"を決定して計算

wine_cv <-

cv.glmnet(x, y, family="binomial", type.measure="class")

quality_cv <-

predict(wine_cv, newx=x, type="class", s="lambda.min")

table(wine$quality, quality_cv)

※正解率が改善

Page 13: 5分でわかるかもしれないglmnet

多クラスロジスティック回帰

• glmnetは多クラスロジステック回帰できる

–分類すべきクラス数が2ではなく複数

–一対他分類器 ではない!!!

• 他にもこれができるパッケージある

–VGAMのvglm関数(2015年更新確認)

–mlogitのmlogit関数(2013年更新停止)

– nnetのmultinom関数(2015年更新確認)

• でも、愛の鞭(正則化)があるし、あと開発者らが「統計的学習の基礎」の著者らなんで、glmnetでいきたい…(ちなみにnnetはRのコアメンバーBrian Ripley氏が開発されています)

13

Page 14: 5分でわかるかもしれないglmnet

多クラスロジスティック回帰

• family=“multinomial”とするだけ

•ワインデータはワイン全種類のものを使用(複数クラスなんで)

14

x <- df %>%

select(residual.sugar, sulphates, alcohol) %>%

as.matrix

y <- df %>% select(quality) %>% unlist

wine_cv <-

cv.glmnet(x, y, family="multinomial", type.measure="class")

quality_cv <-

predict(wine_cv, newx=x, type="class", s="lambda.min")

Page 15: 5分でわかるかもしれないglmnet

多クラスロジスティック回帰

15

table(df$quality, quality_cv)

•結果を表示

Page 16: 5分でわかるかもしれないglmnet

みんな大好きirisで

16

x <- as.matrix(iris[,-5])

y <- iris[,5]

iris_cv <-

cv.glmnet(x, y, family="multinomial", type.measure="class")

species_cv <-

predict(iris_cv, newx=x, type="class", s="lambda.min")

table(y, species_cv)

Page 17: 5分でわかるかもしれないglmnet

みんな大好きirisで

正解 予測値

17

Page 18: 5分でわかるかもしれないglmnet

ここがイケてないよglmnet

•引数(x, y)が行列限定

•引数(x)が”数値”限定で、因子不可

•ガンガン使うようだったら、使いやすいように修正したパッケージ作っちゃった方が楽かも?

18

Page 19: 5分でわかるかもしれないglmnet

参考 • glmnetパッケージのvignette

– http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html

• Friedman, J., Hastie, T. and Tibshirani, R. (2008) Regularization Paths for Generalized Linear Models via Coordinate Descent, Journal of Statistical Software, Vol. 33(1), 1-22 Feb 2010

– http://www.jstatsoft.org/v33/i01/

• LASSO and Ridge regression

– http://d.hatena.ne.jp/isseing333/20110309/1299675311 • リッジ/Ridge回帰、Lasso回帰、Elastic Net (R - glmnet)

– http://highschoolstudent.hatenablog.com/entry/2015/02/08/142354

• RでL1 / L2正則化を実践する

– http://tjo.hatenablog.com/entry/2015/03/03/190000

19

Page 20: 5分でわかるかもしれないglmnet

Enjoy!! 20