- 2020-12-25 17:29
*views 3*- LASSO
- Data analysis
- R language

LASSO Return is also called lasso return , By generating a penalty function, the variable coefficients in the regression model are compressed , To prevent over fitting , Solve the problem of serious collinearity ,LASSO

The return was first made by the British Robert

Tibshirani propose , At present, it is widely used in prediction model . In the new grand literature , There's Daniel's suggestion , For the model fitting with too many variables and less variables , The first thing to consider is to use LASSO

Penalty function . Today we'll talk about how to use it R Language through LASSO Regression construction prediction model .

First we need to download it R Of glmnet package , from LASSO The inventor of the return , Stanford statistician Trevor Hastie Leading development .

Load the required package , Import data （ It's what we used to be SPSS Breast cancer data ）, Delete missing values

library(glmnet) library(foreign) bc <- read.spss("E:/r/Breast cancer survival

agec.sav", use.value.labels=F, to.data.frame=T) bc <- na.omit(bc)

at present ,glmnet Packages can only accept data in matrix form , The data in the data frame will report an error , So first we need to convert the data into matrix form , This is an important step .

y<-as.matrix(bc[,8]) x<-as.matrix(bc[,c(2:7,9:11)])

After conversion , We get two data matrices ,Y It's the result ,X It's a variable of data

Start building the model

f1 = glmnet(x, y, family="binomial", nlambda=100, alpha=1)

# here alpha=1 by LASSO regression , If equal to 0 It's ridge return # parameter family The types of regression models are defined ： family="gaussian"

It is suitable for one-dimensional continuous dependent variable （univariate） family="mgaussian" It is suitable for multidimensional continuous dependent variables （multivariate） family=

"poisson" It is suitable for non negative dependent variables （count） family="binomial" It is suitable for binary discrete dependent variable （binary） family=

"multinomial" It is suitable for multivariate discrete dependent variables （category） What is the outcome indicator here 2 Categorical variables , So use binomial print(f1)# hold f1 Result output

You can see that with lambdas increase , The degree of freedom and residual error are reduced , minimum lambda by 0.000233

Output graphics

plot(f1, xvar="lambda", label=TRUE)

The abscissa follows lambdas Logarithm of , The ordinate is the variable coefficient , You can see that with lambdas With the increase of variables, the coefficient decreases , Part of the variable coefficient becomes 0（ It means there is no such variable ）

Next, cross validation

We can take a part of the data set for verification （ It's OK not to do this step ）

predict(f1, newx=x[2:5,], type = "response")

And then through glmnet Cross test with function , And output graphics

cvfit=cv.glmnet(x,y) plot(cvfit)

We have two dashed lines in this picture , One is the least mean square error λ value , One is the standard error of the minimum distance mean square error λ value , It doesn't matter if it's a bit awkward , We just need to know how much it is

cvfit$lambda.min# Find the minimum cvfit$lambda.1se# A standard error method for finding the minimum value λ value

OK, We get these two values and take them into the model to have a look

l.coef2<-coef(cvfit$glmnet.fit,s=0.004174369,exact = F) l.coef1<-coef(cvfit$

glmnet.fit,s=0.04272596,exact = F) l.coef1 l.coef2

We see that the first model variable is gone , The second model has 5 Variables , Therefore, we can only choose the second one 2 It's a long time .

We take these coefficients out to form a generalized linear equation , Time variable time I'm too lazy to take it （ It's just a demonstration , It's OK to take it ）

mod<-glm(status~age+pathsize+lnpos+pr,family="binomial",data = bc) summary(mod)

yes 3 Three indicators were selected , We can also find out OR and 95%CI

OK, Do it here , All the models have been made , Have you learned it ?

Technology

- Python149 blogs
- Java133 blogs
- Vue86 blogs
- Flow Chart79 blogs
- C++42 blogs
- javascript42 blogs
- programing language38 blogs
- MySQL37 blogs
- more...

Daily Recommendation

views 6

©2020-2021 ioDraw All rights reserved

python-6 Lists & Tuples Appgamekit Making Xiaole games （ Code attached ）#3python One line of code _ Baidu information search _python One line of code python Altman code _【Python】 Ultraman VS Little monster , War 300 round java_ Asynchronous callback Error updating database. Cause: java.sql.SQLSyntaxErrorException: ORA-00947: Not enough values ForkJion Baidu interview questions ： One thread OOM after , Can other threads run ?Gantt chart