Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

Related Books

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

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

  1. 1. glmnet 第48回 勉強会@東京(#TokyoR) @teramonagi 5分でわかるかもしれない
  2. 2. 誰や?
  3. 3. 俺や • ID: @teramonagi • 職種:データ分析おじさん • 業務:ブカーの育成&会議&翻訳 • 言語:/R/F#/Ruby/Python/C++/ • 特技:早起き・根回し 3 優秀な新人怖い
  4. 4. glmnetとは glmnet = glm+愛の鞭 4 ※glm:一般化線形モデル(用の関数) ※一般化線形モデルの解説はしない
  5. 5. glmnetとは • 愛の鞭(正則化)を一般化線形モデル (GLM)に適用できるパッケージ • 愛の鞭(正則化)の種類 –Lasso (ラッソ, L1正則化) –Ridge(リッジ , L2正則化) –Elastic-net(L1+L2正則化) • カバーされているGLMなモデル –線形、(多項 or 多クラス)ロジス ティック、ポアソン、コックスモデル 5
  6. 6. モデルの目的関数 6 ラッソリッジ 尤度関数(モデル依存) 愛の鞭(正則化) Elastic-Net ※パラメーター推計の際には これが最小化される
  7. 7. パラメータ計算 • パラメーター推定のアルゴリズム –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
  8. 8. 早速、使ってみる 8 #パッケージをインストールして読み込む install.packages("glmnet") library(glmnet)
  9. 9. データの取得 • 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)
  10. 10. 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での答え(混同行列)
  11. 11. 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と一致
  12. 12. 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) ※正解率が改善
  13. 13. 多クラスロジスティック回帰 • glmnetは多クラスロジステック回帰できる – 分類すべきクラス数が2ではなく複数 – 一対他分類器 ではない!!! • 他にもこれができるパッケージある – VGAMのvglm関数(2015年更新確認) – mlogitのmlogit関数(2013年更新停止) – nnetのmultinom関数(2015年更新確認) • でも、愛の鞭(正則化)があるし、あと開発者ら が「統計的学習の基礎」の著者らなんで、 glmnetでいきたい…(ちなみにnnetはRのコア メンバーBrian Ripley氏が開発されています) 13
  14. 14. 多クラスロジスティック回帰 • 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")
  15. 15. 多クラスロジスティック回帰 15 table(df$quality, quality_cv) • 結果を表示
  16. 16. みんな大好き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)
  17. 17. みんな大好きirisで 正解 予測値 17
  18. 18. ここがイケてないよglmnet • 引数(x, y)が行列限定 • 引数(x)が”数値”限定で、因子不可 • ガンガン使うようだったら、使い やすいように修正したパッケージ 作っちゃった方が楽かも? 18
  19. 19. 参考 • 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
  20. 20. Enjoy!!20

×