R语言笔记之广义线性模型压缩方法2
2018-01-15 15:05
1611 查看
逻辑回归
1.普通逻辑回归在逻辑回归中,当变量个数相对观测较大时,很容易发生完全分离或者准完全分离的现象,这时候没有唯一的极大似然估计,因此参数估计的方差极大。
> dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/sim1_da1.csv") > fit=glm(y~.,dat,family="binomial") Warning messages: 1: glm.fit:算法没有聚合 2: glm.fit:拟合機率算出来是数值零或一 >
如上,该算法没有聚合,就是完全分离了的情况,这时收缩方法可以解决这个问题。
2.收缩逻辑回归
在逻辑回归的似然函数后添加罚函数来收缩参数估计
> dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/sim1_da1.csv") > trainx=dplyr::select(dat,-y) > trainy=dat$y > fit=glmnet(as.matrix(trainx),trainy,family="binomial")
如上,并没有错误信息。
我们绘制参数收缩的路径图,提取对应的参数估计,并进行预测。
> plot(fit,xvar="dev") >
> levels(as.factor(trainy)) [1] "0" "1" > newdat=as.matrix(trainx[1:3,]) > predict(fit,newdat,type="link",s=c(2.833e-02,3.110e-02)) 1 2 1 0.1943472 0.1442796 2 -0.9913159 -1.0076600 3 -0.5840566 -0.5496074
> cvfit=cv.glmnet(as.matrix(trainx),trainy,family="binomial",type.measure = "class") > plot(cvfit) >
上面使用的是误判率作为标准,进行10层交互校验。
#最小误判率的调优参数取值 > cvfit$lambda.min [1] 0.0004726514 #距离最小误判率的一个标准差的调优参数取值 > cvfit$lambda.lse NULL >
收缩多项回归
> library(glmnet) > dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/SegData.csv") > trainx=dat[,grep("Q",names(dat))] > trainy=dat$segment > fit=glmnet(as.matrix(trainx),trainy,family="multinomial") > plot(fit,xvar="lambda",label=T,type.coef="2norm")
也可以用cv.glment()函数进行交互效应
> cvfit=cv.glmnet(as.matrix(trainx),trainy,family="multinomial") Warning messages: 1: In doTryCatch(return(expr), name, parentenv, handler) : display list redraw incomplete 2: In doTryCatch(return(expr), name, parentenv, handler) : invalid graphics state 3: In doTryCatch(return(expr), name, parentenv, handler) : invalid graphics state > plot(cvfit)
同样可以得到最优lambda取值,并用其拟合模型
> cvfit$lambda.min [1] 0.0004697201 > newdat=matrix(sample(1:9,60,replace=T),nrow=6) > predict(cvfit,newdat,s="lambda.min",type="class") 1 [1,] "Conspicuous" [2,] "Conspicuous" [3,] "Conspicuous" [4,] "Conspicuous" [5,] "Conspicuous" [6,] "Price"
泊松收缩回归
泊松回归处理的是因变量为计数的情况。> library(glmnet) > dat=read.csv("https://raw.githubusercontent.com/happyrabbit/DataScientistR/master/Data/SegData.csv") > trainx=dat[,grep("Q",names(dat))] > trainy=dat$store_trans > fit=glmnet(as.matrix(trainx),trainy,family="poisson") > plot(fit,label=T) >
我们可以使用cv.glment()函数进行交互校验
> cvfit=cv.glmnet(as.matrix(trainx),trainy,family="poisson") > plot(cvfit) >
这里用来调优的准则是泊松离差。
当然也可以得到最优lambda取值,然后用该取值拟合模型
> coef(fit,s=cvfit$lambda.min) 11 x 1 sparse Matrix of class "dgCMatrix" 1 (Intercept) 0.143412732 Q1 -0.004219577 Q2 0.111675071 Q3 . Q4 -0.001634939 Q5 0.122729313 Q6 0.319613267 Q7 -0.019542550 Q8 0.026830491 Q9 0.020186677 Q10 .
由上可见,喜欢买同一个服装品牌 的,明确表明喜欢实体店购买以及由明确风格偏好的 人更多地关顾实体店。
相关文章推荐
- R语言笔记之广义线性模型压缩方法1
- R语言实战笔记--第十三章 广义线性模型
- 机器学习笔记四 - 牛顿方法、指数分布族、广义线性模型、广义线性模型(多项式分布)
- 机器学习笔记—指数分布簇和广义线性模型
- 【机器学习-斯坦福】学习笔记4 ——牛顿方法;指数分布族; 广义线性模型(GLM)
- 牛顿方法、指数分布族、广义线性模型—斯坦福ML公开课笔记4
- 机器学习笔记—再谈广义线性模型
- 牛顿方法、指数分布族、广义线性模型、多项式分布——斯坦福ML公开课笔记4
- [机器学习笔记]三:Generalized Linear Models(广义线性模型)
- 机器学习笔记—再谈广义线性模型
- scikit-learn中文文档-学习笔记二-广义线性模型
- 机器学习笔记五:广义线性模型(GLM)
- 【转】牛顿方法、指数分布族、广义线性模型—斯坦福ML公开课笔记4
- 从GLM广义线性模型到线性回归、二项式及多项式分类——机器学习笔记整理(一)
- Andrew Ng机器学习笔记(四)——GLM广义线性模型
- 【学习笔记】斯坦福大学公开课(机器学习) 之广义线性模型
- 机器学习笔记_回归_3: 广义线性模型
- R语言-广义线性模型
- 牛顿方法、指数分布族、广义线性模型—斯坦福ML公开课笔记4
- 监督学习之广义线性模型——Andrew Ng机器学习笔记(三)