R语言数据分析系列之九,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)


相关内容