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

More Related Content

What's hot

比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
takehikoihayashi
 
PRML上巻勉強会 at 東京大学 資料 第1章前半
PRML上巻勉強会 at 東京大学 資料 第1章前半PRML上巻勉強会 at 東京大学 資料 第1章前半
PRML上巻勉強会 at 東京大学 資料 第1章前半
Ohsawa Goodfellow
 

What's hot (20)

階層ベイズとWAIC
階層ベイズとWAIC階層ベイズとWAIC
階層ベイズとWAIC
 
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
SSII2020SS: グラフデータでも深層学習 〜 Graph Neural Networks 入門 〜
 
Stan超初心者入門
Stan超初心者入門Stan超初心者入門
Stan超初心者入門
 
比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!比例ハザードモデルはとってもtricky!
比例ハザードモデルはとってもtricky!
 
DARM勉強会第3回 (missing data analysis)
DARM勉強会第3回 (missing data analysis)DARM勉強会第3回 (missing data analysis)
DARM勉強会第3回 (missing data analysis)
 
心理学者のためのGlmm・階層ベイズ
心理学者のためのGlmm・階層ベイズ心理学者のためのGlmm・階層ベイズ
心理学者のためのGlmm・階層ベイズ
 
潜在クラス分析
潜在クラス分析潜在クラス分析
潜在クラス分析
 
pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話pymcとpystanでベイズ推定してみた話
pymcとpystanでベイズ推定してみた話
 
実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと
 
変分ベイズ法の説明
変分ベイズ法の説明変分ベイズ法の説明
変分ベイズ法の説明
 
Stanの便利な事後処理関数
Stanの便利な事後処理関数Stanの便利な事後処理関数
Stanの便利な事後処理関数
 
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM) 一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
 
『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会『バックドア基準の入門』@統数研研究集会
『バックドア基準の入門』@統数研研究集会
 
階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について階層モデルの分散パラメータの事前分布について
階層モデルの分散パラメータの事前分布について
 
[DL輪読会]ドメイン転移と不変表現に関するサーベイ
[DL輪読会]ドメイン転移と不変表現に関するサーベイ[DL輪読会]ドメイン転移と不変表現に関するサーベイ
[DL輪読会]ドメイン転移と不変表現に関するサーベイ
 
2 3.GLMの基礎
2 3.GLMの基礎2 3.GLMの基礎
2 3.GLMの基礎
 
2 7.一般化線形混合モデル
2 7.一般化線形混合モデル2 7.一般化線形混合モデル
2 7.一般化線形混合モデル
 
PRML上巻勉強会 at 東京大学 資料 第1章前半
PRML上巻勉強会 at 東京大学 資料 第1章前半PRML上巻勉強会 at 東京大学 資料 第1章前半
PRML上巻勉強会 at 東京大学 資料 第1章前半
 
「統計的学習理論」第1章
「統計的学習理論」第1章「統計的学習理論」第1章
「統計的学習理論」第1章
 
20180118 一般化線形モデル(glm)
20180118 一般化線形モデル(glm)20180118 一般化線形モデル(glm)
20180118 一般化線形モデル(glm)
 

Viewers also liked (8)

機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話機械学習によるデータ分析まわりのお話
機械学習によるデータ分析まわりのお話
 
Data assim r
Data assim rData assim r
Data assim r
 
機械の代わりに人間が学習入門
機械の代わりに人間が学習入門機械の代わりに人間が学習入門
機械の代わりに人間が学習入門
 
MCMCによる回帰分析@ベイズセミナー
MCMCによる回帰分析@ベイズセミナーMCMCによる回帰分析@ベイズセミナー
MCMCによる回帰分析@ベイズセミナー
 
Ml ch7
Ml ch7Ml ch7
Ml ch7
 
カルマンフィルタについて
カルマンフィルタについてカルマンフィルタについて
カルマンフィルタについて
 
状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較状態空間モデルの実行方法と実行環境の比較
状態空間モデルの実行方法と実行環境の比較
 
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
スパースモデリング、スパースコーディングとその数理(第11回WBA若手の会)
 

More from Nagi Teramo

healthplanetパッケージで 体組成データを手に入れて 健康な体も手に入れる
healthplanetパッケージで体組成データを手に入れて健康な体も手に入れるhealthplanetパッケージで体組成データを手に入れて健康な体も手に入れる
healthplanetパッケージで 体組成データを手に入れて 健康な体も手に入れる
Nagi Teramo
 
続わかりやすいパターン認識11章(11.1 - 11.4)
続わかりやすいパターン認識11章(11.1 - 11.4)続わかりやすいパターン認識11章(11.1 - 11.4)
続わかりやすいパターン認識11章(11.1 - 11.4)
Nagi Teramo
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
Nagi Teramo
 

More from Nagi Teramo (20)

第86回R勉強会@東京 LT資料
第86回R勉強会@東京 LT資料第86回R勉強会@東京 LT資料
第86回R勉強会@東京 LT資料
 
Rでを作る
Rでを作るRでを作る
Rでを作る
 
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 DockerマンReproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
 
healthplanetパッケージで 体組成データを手に入れて 健康な体も手に入れる
healthplanetパッケージで体組成データを手に入れて健康な体も手に入れるhealthplanetパッケージで体組成データを手に入れて健康な体も手に入れる
healthplanetパッケージで 体組成データを手に入れて 健康な体も手に入れる
 
闇と向き合う
闇と向き合う闇と向き合う
闇と向き合う
 
機械の体を手に入れるのよ、 鉄郎!!!
機械の体を手に入れるのよ、鉄郎!!!機械の体を手に入れるのよ、鉄郎!!!
機械の体を手に入れるのよ、 鉄郎!!!
 
続わかりやすいパターン認識11章(11.1 - 11.4)
続わかりやすいパターン認識11章(11.1 - 11.4)続わかりやすいパターン認識11章(11.1 - 11.4)
続わかりやすいパターン認識11章(11.1 - 11.4)
 
Ultra Lightning Talk × 3
Ultra Lightning Talk × 3Ultra Lightning Talk × 3
Ultra Lightning Talk × 3
 
F#談話室(17)
F#談話室(17)F#談話室(17)
F#談話室(17)
 
RFinanceJはじめました
RFinanceJはじめましたRFinanceJはじめました
RFinanceJはじめました
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
 
お前の逐モン、GETだぜ!
お前の逐モン、GETだぜ!お前の逐モン、GETだぜ!
お前の逐モン、GETだぜ!
 
Trading volume mapping R in recent environment
Trading volume mapping R in recent environment Trading volume mapping R in recent environment
Trading volume mapping R in recent environment
 
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
 
とある金融屋の統計技師が時系列解析してみた
とある金融屋の統計技師が時系列解析してみたとある金融屋の統計技師が時系列解析してみた
とある金融屋の統計技師が時系列解析してみた
 
可視化周辺の進化がヤヴァイ~rChartsを中心として~
可視化周辺の進化がヤヴァイ~rChartsを中心として~可視化周辺の進化がヤヴァイ~rChartsを中心として~
可視化周辺の進化がヤヴァイ~rChartsを中心として~
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」
 
レプリカ交換モンテカルロ法で乱数の生成
レプリカ交換モンテカルロ法で乱数の生成レプリカ交換モンテカルロ法で乱数の生成
レプリカ交換モンテカルロ法で乱数の生成
 
Rで学ぶ逆変換(逆関数)法
Rで学ぶ逆変換(逆関数)法Rで学ぶ逆変換(逆関数)法
Rで学ぶ逆変換(逆関数)法
 

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