R逻辑回归 iris数据

3.29

https://www.cnblogs.com/nxld/p/6170690.html很详细

在实际应用中,Logistic模型主要有三大用途:

1)寻找危险因素,找到某些影响因变量的"坏因素",一般可以通过优势比发现危险因素;

2)用于预测,可以预测某种情况发生的概率或可能性大小;

3)用于判别,判断某个新样本所属的类别。

Logistic模型实际上是一种回归模型,但这种模型又与普通的线性回归模型又有一定的区别:

1)Logistic回归模型的因变量为二分类变量;

2)该模型的因变量和自变量之间不存在线性关系;

3)一般线性回归模型中需要假设独立同分布、方差齐性等,而Logistic回归模型不需要;

4)Logistic回归没有关于自变量分布的假设条件,可以是连续变量、离散变量和虚拟变量;

5)由于因变量和自变量之间不存在线性关系,所以参数(偏回归系数)使用最大似然估计法计算。

logistic回归模型概述

        广义线性回归是探索“响应变量的期望”与“自变量”的关系,以实现对非线性关系的某种拟合。这里面涉及到一个“连接函数”和一个“误差函数”,“响应变量的期望”经过连接函数作用后,与“自变量”存在线性关系。选取不同的“连接函数”与“误差函数”可以构造不同的广义回归模型。当误差函数取“二项分布”而连接函数取“logit函数”时,就是常见的“logistic回归模型”,在0-1响应的问题中得到了大量的应用。

         Logistic回归主要通过构造一个重要的指标:发生比来判定因变量的类别。在这里我们引入概率的概念,把事件发生定义为Y=1,事件未发生定义为Y=0,那么事件发生的概率为p,事件未发生的概率为1-p,把p看成x的线性函数;

         回归中,最常用的估计是最小二乘估计,因为使得p在[0,1]之间变换,最小二乘估计不太合适,有木有一种估计法能让p在趋近与0和1的时候变换缓慢一些(不敏感),这种变换是我们想要的,于是引入Logit变换,对p/(1-p)也就是发生与不发生的比值取对数,也称对数差异比。经过变换后,p对x就不是线性关系了。

logistic回归的公式可以表示为:

​ 

​其中P是响应变量取1的概率,在0-1变量的情形中,这个概率就等于响应变量的期望。

​这个公式也可以写成:

 

实例见开头博文连接

R语言 逻辑回归

由 xiaoxiaogang 创建,youj 最后一次修改 2016-12-12

逻辑回归是回归模型,其中响应变量(因变量)具有诸如True / False或0/1的分类值。 它实际上基于将其与预测变量相关的数学方程测量二元响应的概率作为响应变量的值。

逻辑回归的一般数学方程为 -

y = 1/(1+e^-(a+b1x1+b2x2+b3x3+...))

以下是所使用的参数的描述 - 

  • y是响应变量。
  • x是预测变量。
  • ab是作为数字常数的系数。

用于创建回归模型的函数是glm()函数。

语法

逻辑回归中glm()函数的基本语法是 -

glm(formula,data,family)

以下是所使用的参数的描述 - 

  • formula是表示变量之间的关系的符号。
  • data是给出这些变量的值的数据集。
  • family是R语言对象来指定模型的细节。 它的值是二项逻辑回归。

相关R应用包

普通二分类 logistic 回归 用系统的 glm

因变量多分类 logistic 回归

有序分类因变量:用 MASS 包里的 polrb

无序分类因变量:用 nnet 包里的 multinom

条件logistic回归,用 survival 包里的 clogit

R运行逻辑回归

R可以让逻辑回归建模过程变得很简单。我们可以使用glm()函数进行逻辑回归建模,而且,它的拟合过程和我们之前所做的线性回归没有很大的区别。在这篇博客中,我们将介绍如何一步一步的进行逻辑回归建模。

我们用r来看一下曲线的形状:

x <- seq(from = -10, to = 10, by = 0.01)
y = exp(x)/(1+exp(x))
library(ggplot2)
p <- ggplot(data = NULL, mapping = aes(x = x,y = y))
p + geom_line(colour = 'blue')
+ annotate('text', x = 1, y = 0.3, label ='y==e^x / 1-e^x', parse = TRUE)
+ ggtitle('Logistic曲线')

  • p在0和1附近变化不敏感,ps:这条曲线帮了我一个大忙,最近做RTB竞价算法时,需要按照CTR设定一个CTR指导价,然后以CPC做曲线的修正,出于成本考虑,我们的出价不会高于某个固定值K,所以把这条曲线变换一下就派上大用场了。(扯远了)
  • 这条曲线的主要特性是θ函数取值可以在-∞变到+∞,p的取值在[0,1],且极值端变化不敏感。这就是我们想要的。值得注意的是,经过logit变换,已经不是线性模型

 

内置数据集“mtcars”描述具有各种发动机规格的汽车的不同型号。 在“mtcars”数据集中,传输模式(自动或手动)由am列描述,它是一个二进制值(0或1)。 我们可以在列“am”和其他3列(hp,wt和cyl)之间创建逻辑回归模型。

# Select some columns form mtcars.

input <- mtcars[,c("am","cyl","hp","wt")]

 

print(head(input))

当我们执行上面的代码,它产生以下结果 -

                  am   cyl  hp    wt

Mazda RX4          1   6    110   2.620

Mazda RX4 Wag      1   6    110   2.875

Datsun 710         1   4     93   2.320

Hornet 4 Drive     0   6    110   3.215

Hornet Sportabout  0   8    175   3.440

Valiant            0   6    105   3.460

创建回归模型

我们使用glm()函数创建回归模型,并得到其摘要进行分析。

input <- mtcars[,c("am","cyl","hp","wt")

 

m.data = glm(formula = am ~ cyl + hp + wt, data = input, family = binomial)

 

print(summary(am.data))

当我们执行上面的代码,它产生以下结果 -

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

结论

在总结中,对于变量“cyl”和“hp”,最后一列中的p值大于0.05,我们认为它们对变量“am”的值有贡献是无关紧要的。 只有重量(wt)影响该回归模型中的“am”值。

 

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

 

index=which(iris$Species == 'setosa')

 

#将种类为setosa的数据排除出我们需要的数据集

 

ir=iris[- index,]

 

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

 

#生成训练集

 

split=sample(100,100*(2/3))

 

ir_train=ir[split,]

 

#生成测试集

ir_test=ir[-split,]

 

#通过训练集建立模型

model=glm(Species ~.,family=binomial(link='logit'),data=ir_train)

 

summary(model)

 

real=ir_test$Species

 

 

predict=predict(fit,type='response',newdata=ir_test)

 

data.frame(real,predict)

 

res=data.frame(real,predict =ifelse(predict>0.5,'virginca','versicorlor'))

 

#查看模型效果

 

plot(res)

 

#通过anova()函数 对模型进行方差分析

 

anova(model, test="Chisq")

 

 

 

 

plot(ir,main="iris逻辑回归")

  • 7
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值