【R言語】glmnetでlasso回帰 plotmoパッケージでsoluthion pathにラベルを付け
soluthion pathにラベルを付けるには?
glmnetのplotではsoluthion pathにラベルが付かない。
変数が多いと似たような色になるので、
ラムダを変化したとき偏回帰係数の変化がわからない。
plotmoパッケージでラベルを付けることができた。
・ コード
#American Community SurveyのデータセットをDL acs <- read.table("http://jaredlander.com/data/acs_ny.csv",sep=",",header=TRUE) #ロジスティック回帰のため二値のIncome変数を作成します acs$Income <- with(acs,FamilyIncome >= 15000) library(glmnet) library(glmnetUtils) library(ggfortify) acs_lasso <- glmnet(Income~NumBedrooms +NumChildren + NumPeople + NumRooms + NumUnits + NumVehicles + NumWorkers + OwnRent +YearBuilt + ElectricBill+FoodStamp+HeatingFuel+Insurance+Language, data = acs) autoplot(acs_lasso,xvar ="lambda") #係数パスにラベルをつける #1 plotmoパッケージを使う install.packages("plotmo") library(plotmo) # for plot_glmnet #ラベルを10個表示 plot_glmnet(acs_lasso) #x軸の向きを変更、ラベルの表示数を5個に変更 plot_glmnet(acs_lasso, xvar = "lambda", label = 5) #gridを表示 plot_glmnet(acs_lasso, xvar = "lambda", label = 5,grid.col="lightgray") #2 ラベルを上書きする関数を作成する lbs_fun <- function(fit, ...) { L <- length(fit$lambda) x <- log(fit$lambda[L]) y <- fit$beta[, L] labs <- names(y) text(x, y, labels=labs, ...) } plot(acs_lasso, xvar="lambda") lbs_fun(acs_lasso) #ハイパーパラメータのラムダを変化させる acsCV4 <- cv.glmnet(Income~NumBedrooms +NumChildren + NumPeople + NumRooms + NumUnits + NumVehicles + NumWorkers + OwnRent +YearBuilt + ElectricBill+FoodStamp+HeatingFuel+Insurance+Language,data=acs,family="binomial",nfolds = 5,parallel = TRUE,alpha = 1) autoplot(acsCV4) acsCV4$lambda.1se acsCV4$lambda.min #library(glmnetUtils)の場合 newdata = でデータを入れる lasso_pred2 <- predict(acsCV4,s=acsCV4$lambda.min,newdata=acs,type="class") #混合行列を確認 table(acs$Income,lasso_pred2)
・ まとめ
plotmoパッケージを使うと、ラベルが重なって表記されることも防げることが分かった。
ラベル数を変更したり、グリッドを表示したりできる。色々調べてみよう。
・ 参考URL