原文链接:http://tecdat.cn/?p=22966 

逻辑回归是一种拟合回归曲线的办法,y=f(x),当y是一个分类变量时。这个模型的典型用处是在给定一组预测因素x的状况下预测y,预测因素能够是间断的、分类的或混合的。

 一般来说,分类变量y能够是不同的值。在最简略的状况下,y是二进制的,意味着它能够是1或0的值。机器学习中应用的一个经典例子是电子邮件分类:给定每封电子邮件的一组属性,如字数、链接和图片,算法应该决定该电子邮件是垃圾邮件(1)或不是(0)。

在这篇文章中,咱们把这个模型称为 "二项逻辑回归",因为要预测的变量是二进制的,然而,逻辑回归也能够用来预测一个能够两个以上数值的因变量。在这第二种状况下,咱们称该模型为 "多项式逻辑回归"。例如,一个典型的例子是将电影分为 "搞笑片"、"纪录片 "或 "剧情片"等。

R中的逻辑Logistic回归实现

R使拟合一个逻辑回归模型变得非常容易。要调用的函数是glm(),其拟合过程与线性回归中应用的函数没有太大区别。在这篇文章中,我将拟合一个二元逻辑回归模型并解释每个步骤。

数据集

咱们将在泰坦尼克号数据集上工作。这个数据集在网上有不同的版本,然而我倡议应用Kaggle提供的版本,因为它简直曾经能够应用了(为了下载它,你须要在Kaggle注册)。
数据集(训练)是一些乘客(精确的说是889人)的数据汇合,较量的指标是依据一些特色,如服务等级、性别、年龄等来预测生存率(如果乘客幸存下来就是1,如果没有就是0)。正如你所看到的,咱们将同时应用分类和连续变量。

数据清理过程

在解决实在的数据集时,咱们须要思考到一些数据可能失落的状况,因而咱们须要为咱们的剖析筹备数据集。作为第一步,咱们应用read.csv()函数加载csv数据。
确保参数na.strings等于c(""),这样每个缺失值都被编码为NA。

加载和预处理数据

当初咱们须要查看缺失值,并应用sapply()函数查看每个变量有多少个惟一值,该函数将作为参数传递的函数利用于数据框的每一列。

sapply(function(x) sum(is.na(x)))

sapply(function(x) length(unique(x)))

绘制数据集并突出缺失值。 

map(training)

解决缺失值

变量cabin有太多的缺失值,不应用它。咱们也剔除PassengerId,因为它只是一个索引。
应用subset()函数,对原始数据集进行子集,只抉择相干列。 

当初须要思考其余的缺失值。在拟合狭义线性模型时,R能够通过在拟合函数中设置一个参数来解决它们。

然而,我集体更喜爱 "手动"替换缺失值。有不同的办法能够做到这一点,一个典型的办法是用平均数、中位数或现有数值来替换缺失的数值。我应用平均数。

Age\[is.na(Age)\] <- mean(Age,na.rm=T) ## 用平均数代替缺失

就分类变量而言,应用read.table()或read.csv()默认会把分类变量编码为因子。因子是R解决分类变量的形式。咱们能够应用以下几行代码来查看编码状况。

 

为了更好地理解R是如何解决分类变量的,咱们能够应用contrasts()函数。这个函数向咱们展现变量是如何虚构进去的,以及如何在模型中解释它们。

 

例如,你能够看到,在性别这个变量中,女性将被用作参考变量。Embarked中的缺失值,因为只有两个,咱们将剔除这两行(咱们也能够替换缺失值,保留数据点)。

data\[!is.na(Embarked),\]

在进行拟合之前,数据的荡涤和格式化很重要。这个预处理步骤对于取得良好的模型拟合和更好的预测能力是十分重要的。

模型拟合

咱们把数据分成两局部:训练集和测试集。训练集将被用来拟合咱们的模型,咱们将在测试集上进行测试。

##当初,让咱们来拟合这个模型。请务必在glm()函数中指定参数family=binomial。glm(Survived ~.,family=binomial(link='logit'))##通过应用函数summary(),咱们失去了咱们模型的后果。

解释咱们的逻辑回归模型的后果

首先,咱们能够看到,SibSp、票价都没有统计学意义。至于有统计学意义的变量,性别的P值最低,表明乘客的性别与存活的概率有很大关系。这个预测因素的负系数表明,在所有其余变量雷同的状况下,男性乘客生存的可能性较小。请记住,在Logit模型中,反应变量是对数几率:ln(odds) = ln(p/(1-p)) = ax1 + bx2 + 。+ z*xn。

因为男性是一个虚构变量,所以男性会使对数几率缩小2.75,而年龄减少一个单位会使对数几率缩小0.037。

当初咱们能够对模型剖析偏差表

有效偏差和_残差_之间的差别显示了咱们的模型与空模型(只有截距的模型)的比照状况。这个差距越大越好。剖析该表,咱们能够看到逐个增加每个变量时_残差_的降落。同样,退出Pclass、Sex和Age能够显著缩小残差。只管SibSp的p值很低,但其余变量仿佛对模型的改善较少。这里的大p值表明,没有变量的模型或多或少解释了雷同数量的变动。最终,咱们心愿看到的是_残差_和AIC的显著降落。

尽管不存在与线性回归的R2齐全等同的指标,但麦克法登R2指数能够用来评估模型的拟合度。

评估模型的预测能力

在下面的步骤中,咱们简要地评估了模型的拟合状况,当初咱们想看看在新的数据集上预测y时,模型的体现如何。通过设置参数type='response',R将以P(y=1|X)的模式输入概率。咱们的决策边界将是0.5。如果P(y=1|X)>0.5,那么y=1,否则y=0。

Error <- mean(fitted != Survived)print(paste('准确度',1- Error))

测试集上0.84的准确度是一个相当不错的后果。然而,请记住,这个后果在肯定水平上取决于我先前对数据的手动宰割,因而,如果想得到一个更准确的分数,最好运行某种穿插验证,如k-fold穿插验证。

作为最初一步,咱们将绘制ROC曲线并计算AUC(曲线下面积),这是二元分类器的典型性能测量。

ROC是在不同的阈值设置下,通过绘制真阳性率(TPR)与假阳性率(FPR)产生的曲线,而AUC是ROC曲线下的面积。依据教训,一个具备良好预测能力的模型的AUC应该比0.5更靠近于1(1是现实的)。

performance( measure = "tpr", x.measure = "fpr")plot(prf)

auc


最受欢迎的见解

1.R语言多元Logistic逻辑回归 利用案例

2.面板平滑转移回归(PSTR)剖析案例实现

3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)

4.R语言泊松Poisson回归模型剖析案例

5.R语言回归中的Hosmer-Lemeshow拟合优度测验

6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

7.在R语言中实现Logistic逻辑回归

8.python用线性回归预测股票价格

9.R语言如何在生存剖析与Cox回归中计算IDI,NRI指标