简单的认识R语言和逻辑斯蒂回归

2016-12-28 03:13

在生活中并不是所有的问题都要预测一个连续型的数值,比如药剂量,某人薪水,或者客户价值;逻辑斯蒂回归回归它主要用于只有两个结果的分类问题,它定义结果的变量只有两类的值,然后根据线性模型来预测归属类的概率;本文可能写的浅显,如果有错还望能指出来,因为只是写了普及问而已; logistic回归

假设有一个变量它一共只有两类值,现在我们需要估计出A属于这两个类别的概率,假设他的线性模型是这样的一个形式;

简单的认识R语言和逻辑斯蒂回归0

然而在上面的式子中Y值的分布不是固定的,因为我们都知道概率只能是0-1之间,所以我们必须要变换一下式子,让Y的值和概率一样必须是0~1的数值,一个有效的办法就是用一个连接函数也有人称之为联系函数,它大概的作用就是就是将Y变换后成为服从正态分布的变量;这样就可以对A进行估计了,这就是logtistic思想;

在logistic回归中,预测变量和概率之间的关系可以通过Logistic函数表示

简单的认识R语言和逻辑斯蒂回归1

然后通过一系列的logit变换后就成为下面的式子,感兴趣的可以查阅一下资料,这里就不写详细的步骤:

简单的认识R语言和逻辑斯蒂回归2

这里我们用R语言核心技术手册里面的一系列代码和数据来说明逻辑斯蒂回归;

首先是我们先载入相应的包和数据,这个数据是关于足球射门命中的数据,对于球员来说每次射门都是由一定的概率进球,这个概率与距离有关,离球门越近越可能进球;

library(nutshell)

data("field.goals")

这时候我们先用summary()这个函数观察一下数据的分布

简单的认识R语言和逻辑斯蒂回归3

粗劣解读一下数据,进球的距离最近是18码,最远是62码;

我们下列函数是创建进球与否的份二分类变量

field.goals.forlr <- transform(field.goals,good=as.factor(ifelse(play.type=="FG good","good","bad")))

这时候我们在用summary()这个函数观察一下射门数据的分布

简单的认识R语言和逻辑斯蒂回归4

大部分都是进球的,那么我们继续进行数据探究,让我们看看根据距离计算一下进球比例

field.goals.table <- table(field.goals.forlr$good,field.goals.forlr$yards)

field.goals.table

得到的结果如下

简单的认识R语言和逻辑斯蒂回归5

当然我们也可以画图出来看

plot(colnames(field.goals.table),field.goals.table["good",]/(field.goals.table["bad",]+field.goals.table["good",]))

简单的认识R语言和逻辑斯蒂回归6

请各位自动忽略我的没给XY命名,人比较懒

从上图的结果上看进球的百分比在随着距离发生变化

这时候我们使用glm函数建模对数据进行建模,因为在测试数据中是每一次的射门都是独立的,因此我们可以认为是贝努力实验,因此我们在GLM函数中使用family='binomial',因此我们需要执行R代码如下

并打印结果;

field.goals.mdl <- glm(good~yards,data=field.goals.forlr,family = "binomial")

summary(field.goals.mdl)

简单的认识R语言和逻辑斯蒂回归7

下面是一些结果的解读

NULL deviance 是指仅包括截距项、不包括解释变量的模型和饱和模型比较得到的偏差统计量的值

residual deviance 是指既包括截距项,又包括解释变量的模型和饱和模型比较得到的偏差统计量的值

如变量的值不止两类的情况,可以使用其他的函数multinom函数预测概率;今天我们就讲到这里;有兴趣的可以和我一起交流