如何在R中进行逻辑回归

9月13日,二千零一十五

(本文首次发表于 数据科学+,请并对 188bet appR博客)

逻辑回归是拟合回归曲线的一种方法。,请y=f(x),请当y是一个分类变量时。这个模型的典型用途是预测给定一组预测器X.预测器可以是连续的,分类的或两者混合的。

分类变量,请一般来说,可以假设不同的值。在最简单的情况下是二进制的意思是它可以假定值1或0。机器学习中使用的一个经典例子是电子邮件分类:为每个电子邮件提供一组属性,例如单词数,链接和图片,算法应该决定电子邮件是否是垃圾邮件(1)或不是(0)。在这篇文章中我们称之为模型他说:“这是一个很好的选择。”二项逻辑回归”他说:“这是一个很好的选择。”,请因为要预测的变量是二进制的,然而,逻辑回归也可以用来预测一个可以假设2个以上值的因变量。在第二种情况下,我们称之为模型”多项式逻辑回归.例如,一个典型的例子,将电影分为娱乐性的,请他说:“这是一个很好的选择。”边界线“或“无聊的”.

R中的逻辑回归实现

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

数据集

我们将致力于泰坦尼克号数据集.有不同版本的数据集可以在网上免费使用,不过,我建议使用卡格勒,请因为它几乎可以使用(为了下载它,你需要注册到kaggle)。
数据集(培训)是一些乘客的数据收集(准确地说是889)。金宝搏网址比赛的目标是根据一些特征,如服务类别,请这个性别,请这个年龄等。正如你所看到的,我们将同时使用分类变量和连续变量。

数据清理过程

在处理真实数据集时,我们需要考虑一些数据可能丢失或损坏的事实,因此,我们需要为我们的分析准备数据集。作为第一步,我们加载csv数据使用读取.csv()功能。
确保参数不适用字符串等于C(“他说:“这是一个很好的选择。”(见表1)使每个缺少的值都编码为.这将在接下来的步骤中帮助我们。

training.data.raw<-read.csv('train.csv',头=t,弦乐= C(“他说:“这是一个很好的选择。”)

现在,我们需要检查缺少的值,并使用很好())函数,将作为参数传递的函数应用于数据帧的每一列。

SAPPLY(training.data.raw,函数(x)和(is.na(x)))passengerid幸存pclass name sex 0 0 0 0 0 0 age sibsp parch机票票价177 0 0 0 0 0 0客舱登机687 2SAPPLY(training.data.raw,函数(x)长度(唯一(x)))passengerid幸存pclass name sex 891 2 3 891 2 age sibsp parch机票费用89 7 681 248客舱登机148 4

对缺少的值进行可视化处理可能会有所帮助:Amelia包具有特殊的绘图功能MISSMAP()它将绘制数据集并突出显示缺少的值:

图书馆(Amelia)Missmap(training.data.raw,主=缺失值与观察值”(见表1)

r绘图
可变座舱的缺失值太多,我们不会使用它。我们还将删除passengerid,因为它只是一个索引和门票。
使用子集()功能我们子集仅选择相关列的原始数据集。

数据<-子集(training.data.raw,选择=C(2),三,5个,6,7,8个,10个,12)

注意丢失的值

现在我们需要考虑其他缺失的值。在拟合广义线性模型时,R可以通过在拟合函数中设置参数来方便地处理这些问题。然而,就我个人而言,我更喜欢替换NAS他说:“这是一个很好的选择。”用手,请可能的时候。有不同的方法可以做到这一点,一种典型的方法是用平均值替换缺失的值,中间值现有的中间值或模式。我用平均数。

数据$age[is.na(data$age)]<-平均值(data$age,n= rm=t)

就分类变量而言,使用读表()读取.csv()默认情况下,将分类变量编码为因子。一个因素是R如何处理分类变量。
我们可以使用以下代码行检查编码

是因子(数据$sex)真的是.factor(数据$已加载)真的

为了更好地理解R将如何处理分类变量,我们可以使用对比度()功能。这个函数将向我们展示变量是如何被r虚拟化的,以及如何在模型中解释它们。

对比度(数据$sex)雌雄同体0比例1对比度(数据$已加载)Q SC 0 0 Q 1 0S 0 1

例如,你可以看到在变化莫测的性别中,女性将作为参考。对于上船时丢失的价值观,因为只有两个,我们将丢弃这两行(我们还可以用模式替换丢失的值并保留数据点)。

数据<-数据[!是.na(数据$已加载)]行名称(数据)<-空

在进行装配过程之前,让我提醒你有多重要清除和格式化数据.这一预处理步骤往往是获得模型的良好拟合和更好的预测能力的关键。

模型拟合

我们将数据分成两部分:培训和测试集。培训集将用于适应我们将在测试集上测试的模型。

列车<-数据[1:800,]测试<-数据[801:889,]

现在,让我们调整一下模型。一定要指定参数家庭=二项式GLM-()功能。

模型<-glm(存活~,家族=二项式(link='logit'),数据=列车)

通过使用函数摘要()我们得到了模型的结果:

摘要(模型)呼叫:GLM(公式=生存~,家族=二项式(链接=““逻辑”)数据=列车)偏差残差:最小1q中值3q最大-2.6064-0.5954-0.4254 0.6220 2.4165系数:估计标准。错误Z值pr(>Z)(截距)5.137627 0.594998 8.635<2e-16***pclass-1.087156 0.15168-7.192 6.40E-7.192 6.40E-13***SexMal-2.756819 0.756819 0.212026-13.002<2e-16***年龄-0.037267 0.037267 0.008195-4.547 5.43E-06***sibssp-0.29292920 0.292929292920 0.114642-2.5550.5550.0 0 0.635 0.635<2e-2e-2.635<2e-2-2.635<2e-0.3629车费0.001528 0.002353 0.649 0.5160上船Q-0.002656 0.400882-0.007 0.9947上船-0.318786 0.252960-1.260 0.2076---表示。代码:0'***'0.001'**'0.01'*'0.05''0.1''1(二项族的分散参数取1)空偏差:1065.39,799自由度剩余偏差:709.39,791自由度剩余偏差:727.39费希尔评分迭代次数:5次

解释我们的逻辑回归模型的结果

现在我们可以分析拟合并解释模型告诉我们什么。
首先,我们可以看到西伯斯,请,请票价上船无统计学意义。对于统计显著变量,性别的p值最低,表明乘客的性别与存活概率有很强的相关性。这个预测因子的负系数表明所有其他变量都相等,男性乘客生还的可能性较小。记住,在logit模型中,响应变量是log odds:ln(odds)=ln(p/(1-p))=a*x1+b*x2+…+z*xn。因为男性是一个虚拟变量,男性降低了2.75的对数概率,而单位年龄增长则降低了0.037的对数概率。

现在我们可以运行ANOVA()模型上的函数分析偏差表

方差分析(模型)测试=“基什克”(见表1)偏差表模型分析:二项式,链接:logitresponse:survivedterms按顺序添加(从第一个到最后一个)df偏差剩余。DF渣油。dev pr(>chi)null 799 1065.39 pclass 1 83.607 798 981.79<2.2e-16***sex 1 240.014 797 741.77<2.2e-16***age 1 17.495 796 724.28 2.881e-05***sibsp 1 10.842 795 713.43 0.000992***parch 1 0.863 794 712.57 0.352873 faRE 1 0.994 793 711.58 0.318717登上2 2.187 791 709.39 0.334990---意符。代码:0'***'0.001'**'0.01'*'0.05''0.1''1

零偏差和剩余偏差之间的差异显示了我们的模型如何对抗零模型(一个只有截距的模型)。差距越大,更好。通过分析表,我们可以看到每次添加一个变量时偏差的下降。再一次,正在添加,请,请年龄显著减少残余偏差。其他变量似乎对模型的改进不多,尽管西伯斯具有较低的p值。这里的大p值表示没有变量的模型或多或少解释了相同数量的变化。最终,你想看到的是一个明显的偏离和AIC公司.

虽然没有完全等同于R存在线性回归,麦克法登R指数可以用来评估模型的适合性。

库(pscl)pr2(型号)llh llhnull g2 mcfadden r2ml r2cu-354.6950111-532.6961008 356.0021794 0.3341513 0.3591775 0.4880244

评估模型的预测能力

在上述步骤中,我们简单地评估了模型的拟合情况,现在我们想看看这个模型在预测时的表现一组新的数据。通过设置参数类型=“响应”,请r将以p(y=1_x)的形式输出概率。我们的决策边界是0.5。如果p(y=1_x)>0.5,则y=1,否则y=0。请注意,对于某些应用程序,不同的阈值可能是更好的选择。

拟合结果<-预测(模型,newdata=子集(测试,选择=C(2),三,4,5个,6,7,8)type='response')fitted.results<-ifelse(fitted.results>0.5,1,0)误诊错误<-平均值(拟合结果!=测试$survived)打印(粘贴(“准确性”,1-流产错误)他说:“这是一个很好的选择。”精度0.842696629213483”他说:“这是一个很好的选择。”

测试集的0.84精度是相当好的结果。然而,请记住,这个结果在某种程度上取决于我之前对数据的手动拆分,因此,如果你想要更精确的分数,您最好运行一些交叉验证,如k-fold交叉验证。

作为最后一步,我们将绘制ROC曲线然后计算AUC(曲线下面积)是二元分类器的典型性能测量。
ROC是在各种阈值设置下绘制真阳性率(TPR)与假阳性率(FPR)的曲线,而AUC是ROC曲线下的面积。根据经验,具有良好预测能力的模型的AUC应接近1(1为理想值),而不是0.5。

库(rocr)p<-预测(模型,newdata=子集(测试,选择=C(2),三,4,5个,6,7,8)类型=反应“)pr<-预测(p,测试$survived)prf<-性能(pr,措施=TPR“,请X.度量=首件评审”)图(prf)auc<-性能(pr,措施=AUC英寸)[电子邮件受保护][[1 ] ] AUC零点八六四七一八六

这里是ROC图:
RPLOT01型

我希望这篇文章会有用。可以找到包含此示例的完整代码的gist在这里.

感谢你阅读这篇文章,如果您有任何问题,请在下面留言。

留下评论对于作者来说,请关注他们博客上的链接和评论: 数据科学+.

188bet appR博客提供 每日电子邮件更新金宝搏网址 R新闻与 教程关于以下主题: 数据科学,请,请 大数据,,请 r作业,请可视化( ggplot2型,请,请 箱形图,请,请 地图,请,请 动画)程序设计( RSTUDIO公司,请,请 斯维夫,请,请 乳胶,请,请 SQL,请,请 日食,请,请 吉特,请,请 哈多普,请,请 刮网)统计 回归,请,请 主成分分析,请,请 时间序列,请,请 交易还有更多…



如果你走这么远,为什么不 订阅更新 从站点?选择您的口味: 电子邮件,请,请 推特,请,请 1188bet app,请或 脸谱网……

注释已关闭。

搜索R-Blo188bet appggers


赞助商

千万不要错过更新!你说什么?
订阅R-Bloggers188bet app接收
最新R帖子的电子邮件。
(您将不再看到此消息。)

单击此处关闭(此弹出窗口将不再出现)