码迷,mamicode.com
首页 > 编程语言 > 详细

R语言数据分析系列之九 - 逻辑回归

时间:2015-04-15 19:38:05      阅读:737      评论:0      收藏:0      [点我收藏+]

标签:r语言   数据挖掘   数据分析   

R语言数据分析系列之九

                                                                       —— by comaple.zhang


      本节将一下逻辑回归和R语言实现,逻辑回归(LR,LogisticRegression)其实属于广义回归模型,根据因变量的类型和服从的分布可以分为,普通多元线性回归模型,和逻辑回归,逻辑回归是指因变量是离散并且取值范围为{0,1}两类,如果离散变量取值是多项即变为 multi-class classification,所以LR模型是一个二分类模型,可以用来做CTR预测等。那么我们现在来引出逻辑回归如何做二分类问题。

问题引入

在多元线性回归中我们的模型公式是这样子的(参考前两节内容),

技术分享

这里的f(x,w)是连续的变量,如果我们的因变量是离散的如何处理呢,比如我们得数据是这样子的。

 

x <- seq(-3,3,by=0.01)

y <- 1/(1+exp(-x))

gdf <- data.frame(x=x,y=y)

ggplot(gdf,aes(x=x,y=x+0.5)) +geom_line(col=‘green‘)

这样显然无法拟合我们{0,1}输出,为了能够拟合离散的{0,1}输出我们引入sigmoid函数如下:

 技术分享

ggplot(gdf,aes(x=x,y=y))+geom_line(col=‘blue‘)+ geom_vline(xintercept=c(0),col=‘red‘) + geom_hline(yintercept=c(0,1),lty=2)

用R将该函数的图行画出来如下图:

技术分享

又来这个函数我们可以很方便的将线性关系转换为离散的{0,1}输出

ggplot(gdf,aes(x=x,y=y))+geom_line(col=‘blue‘)+ geom_vline(xintercept=c(0),col=‘red‘) + geom_hline(yintercept=c(0,1),lty=2) +geom_line(aes(x=x,y=x+0.5),col=‘green‘)

技术分享


于是我们的类别概率可以表示为:

技术分享

 这样我们的转化就完成了,模型最后化简为如下形式:

 技术分享

LR的损失函数(cost function)

上面引出了sigomid得函数并将其用于我们得模型,那如何定义损失函数呢,总不能去做减法吧,除了做减法我们还可以怎么做呢,对于离散变量的模型,我们希望能够达到,每个分类预测正确的个数越多越好,即模型的联合概率密度最大:

技术分享

即我们要最大化L(w),为了优化L(w)取最大值,我们对L(w)去负对数似然,从而将最大化问题转化为最小化问题:

技术分享

接下来我们来优化这个损失函数的到是的L(w)最小的那组w。

优化方法有,牛顿法,梯度下降,L-BFGS这里不再对这几种方法详述,后面其他系列里面会讲到。

LR在R语言中的实现

            我们利用iris数据集,进行逻辑回归二分类测试,该数据集是R语言自带得数据集,包括我个属相,和三个分类。逻辑回归我们用glm函数实现,该函数提供了各种类型得回归,如:提供正态、指数、gamma、逆高斯、Poisson、二项。我们用的logistic回归使用的是二项分布族binomial。

 

 

index <- which(iris$Species == ‘setosa‘)

ir <- iris[- index,]

levels(ir$Species)[1] <- ‘‘

split <- sample(100,100*(2/3))

#生成训练集

ir_train <- ir[split,]

#生成测试集

ir_test <- ir[-split,]

fit <- glm(Species ~.,family=binomial(link=‘logit‘),data=ir_train)

 

summary(fit)

 

real <- ir_test$Species

data.frame(real,predict)

predict <- predict(fit,type=‘response‘,newdata=ir_test)

res <- data.frame(real,predict =ifelse(predict>0.5,‘virginca‘,‘versicorlor‘))

#查看模型效果

plot(res)

技术分享

R语言数据分析系列之九 - 逻辑回归

标签:r语言   数据挖掘   数据分析   

原文地址:http://blog.csdn.net/comaple/article/details/45062489

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!