精华内容
下载资源
问答
  • 拓端tecdat|在R语言实现Logistic逻辑回归

    万次阅读 多人点赞 2019-06-17 17:12:48
    原文链接 http://tecdat.cn/?p=2652 逻辑回归是拟合回归曲线的方法,当y是分类变量时,y = f(x)。典型的使用这种模式被预测Ÿ给定一组预测的X。预测因子可以是连续的,分类的或两者的混合。

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

    原文出处:拓端数据部落公众号

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

    R中的逻辑回归实现

    R可以很容易地拟合逻辑回归模型。要调用的函数是glm(),拟合过程与线性回归中使用的过程没有太大差别。在这篇文章中,我将拟合一个二元逻辑回归模型并解释每一步。

    数据集

    我们将研究泰坦尼克号数据集

    目标是预测生存(如果乘客幸存,则为1,否则为0)基于某些诸如等级,性别,年龄等特征。我们将使用分类变量和连续变量。

    数据清理过程

    在处理真实数据集时,我们需要考虑到一些数据可能缺失的情况,因此我们需要为我们的分析准备数据集。作为第一步,我们使用该函数加载csv数据read.csv()。

    使每个缺失值编码为NA。

    training.data.raw < - read.csv('train.csv',header = T,na.strings = c(“”))

    现在我们需要检查缺失的值,查看每个变量的唯一值,使用sapply()函数将函数作为参数传递给数据框的每一列。

    
    
    PassengerId    Survived      Pclass        Name         Sex 
              0           0           0           0           0 
            Age       SibSp       Parch      Ticket        Fare 
            177           0           0           0           0 
          Cabin    Embarked 
            687           2 
    
    length(unique(x)))
    
    PassengerId    Survived      Pclass        Name         Sex 
            891           2           3         891           2 
            Age       SibSp       Parch      Ticket        Fare 
             89           7           7         681         248 
          Cabin    Embarked 
            148           4

    对缺失值进行可视化处理:可以绘制数据集并显示缺失值:

    船舱有太多的缺失值,我们不使用它。

    使用subset()函数我们对原始数据集进行子集化,只选择相关列。

    data < - subset(training.data.raw,select = c(2,3,5,6,7,8,10,12))

    现在我们需要解释其他缺失的值。通过在拟合函数内设置参数来拟合广义线性模型时,R可以处理它们。有不同的方法可以做到这一点,一种典型的方法是用现有的平均值,中位数或模式代替缺失值。我使用平均值。

    data$ Age [is.na(data $ Age)] < - mean(data$ Age,na.rm = T)
    
    

    就分类变量而言,使用read.table()或read.csv()默认会将分类变量编码为因子。

    为了更好地理解R如何处理分类变量,我们可以使用contrasts()函数。

    在进行拟合过程之前,先清理和格式化数据。这个预处理步骤对于获得模型的良好拟合和更好的预测能力通常是至关重要的。

    模型拟合

    我们将数据分成两部分:训练和测试集。训练集将用于拟合我们的模型。

    通过使用函数,summary()我们获得了我们模型的结果:

    
    Deviance Residuals: 
        Min       1Q   Median       3Q      Max  
    -2.6064  -0.5954  -0.4254   0.6220   2.4165  
    Coefficients:
                 Estimate Std. Error z value Pr(>|z|)    
    (Intercept)  5.137627   0.594998   8.635  < 2e-16 ***
    Pclass      -1.087156   0.151168  -7.192 6.40e-13 ***
    Sexmale     -2.756819   0.212026 -13.002  < 2e-16 ***
    Age         -0.037267   0.008195  -4.547 5.43e-06 ***
    SibSp       -0.292920   0.114642  -2.555   0.0106 *  
    Parch       -0.116576   0.128127  -0.910   0.3629    
    Fare         0.001528   0.002353   0.649   0.5160    
    EmbarkedQ   -0.002656   0.400882  -0.007   0.9947    
    EmbarkedS   -0.318786   0.252960  -1.260   0.2076    
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
    

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

    现在我们可以分析拟合并解释模型

    首先,我们可以看到SibSp,Fare和Embarked没有统计意义。至于统计上显着的变量,性别具有最低的p值,这表明乘客的性别与存活的可能性有很强的关联。预测因子的负系数表明所有其他变量相同,男性乘客不太可能存活下来。由于男性是虚拟变量,因此男性将对数概率降低2.75,而单位年龄增加则将对数概率降低0.037。

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

    Analysis of Deviance Table
    Model: binomial, link: logit
    Response: Survived
    Terms added sequentially (first to last)
             Df Deviance Resid. Df Resid. 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    
    Embarked  2    2.187       791     709.39  0.334990    

    无效偏差(null deviance)和残差之间的差异越大越好。通过分析表格,我们可以看到每次添加一个变量时出现偏差的情况。同样,增加Pclass,Sex and Age可以显着减少残差。这里的大p值表示没有变量的模型或多或少地解释了相同的变化量。最终你想得到显着减少的偏差和AIC

    评估模型的预测能力

    在上面的步骤,我们简要评价模型的拟合。通过设置参数type='response',R将以P(y = 1 | X)的形式输出概率。我们的决策边界将是0.5。如果P(y = 1 | X)> 0.5,则y = 1,否则y = 0。请注意,对于某些应用场景,不同的阈值可能是更好的选择。

     fitting.results < - ifelse(fitted.results> 0.5,1,0)
    misClasificError < - mean(fitted.results!= test $ Survived

    测试集上的0.84精度是相当不错的结果。但是,如果您希望得到更精确的分数,最好运行交叉验证,如k折交叉验证验证。

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

    ROC是通过在各种阈值设置下将真阳性率(TPR)与假阳性率(FPR)作图而产生的曲线,而AUC是ROC曲线下的面积。作为一个经验法则,具有良好预测能力的模型应该接近于1。


    最受欢迎的见解

    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指标

    展开全文
  • R语言逻辑回归算法的实现——glm函数

    万次阅读 多人点赞 2019-02-24 16:46:42
    本文将主要介绍逻辑回归算法的R语言实现。 数据简介 本文数据选择了红酒质量分类数据集,这是一个很经典的数据集,原数据集中“质量”这一变量取值有{3,4,5,6,7,8}。为了实现二分类问题,我们添加一个变量...

    在前文中,我们已经介绍过了逻辑回归算法的原理以及其python实现,具体请见逻辑回归算法及其python实现

    本文将主要介绍逻辑回归算法的R语言实现。


    数据简介

    本文数据选择了红酒质量分类数据集,这是一个很经典的数据集,原数据集中“质量”这一变量取值有{3,4,5,6,7,8}。为了实现二分类问题,我们添加一个变量“等级”,并将“质量”为{3,4,5}的观测划分在等级0中,“质量”为{6,7,8}的观测划分在等级1中。

    数据下载戳我

    因变量:等级

    自变量:非挥发性酸性、挥发性酸性、柠檬酸、剩余糖分、氯化物、游离二氧化硫、二氧化硫总量、浓度、pH、硫酸盐、酒精

    library(openxlsx)
    wine = read.xlsx("C:/Users/Mr.Reliable/Desktop/classification/winequality-red.xlsx") 
    #将数据集分为训练集和测试集,比例为7:3
    train_sub = sample(nrow(wine),7/10*nrow(wine))
    train_data = wine[train_sub,]
    test_data = wine[-train_sub,]
    

    逻辑回归的实现

    逻辑回归算法使用glm函数,family参数选择binomial即可,不需要额外下载R包。

    实现逻辑回归

    wine_logistic <- glm(等级 ~  非挥发性酸性+挥发性酸性+柠檬酸+剩余糖分
                                            +氯化物+游离二氧化硫+二氧化硫总量+浓度
                                            +pH+硫酸盐+酒精,
                                           data = train_data, family = "binomial")
    #对逻辑回归结果进行汇总
    summary(wine_logistic)                                   
    

    我们要根据汇总的结果提出变量,将那些p值小于0.05的变量剔除,重新运行逻辑回归算法,直到模型中的变量都是显著的。

    在本例中,模型剔除了“非挥发性酸性”、“剩余糖分”、“柠檬酸”、“浓度”和“pH”。
    最终的代码为:

    wine_logistic <- glm(等级 ~  挥发性酸性+氯化物+游离二氧化硫+二氧化硫总量
                      +硫酸盐+酒精, data = train_data, family = "binomial")
    summary(wine_logistic)  
    

    汇总结果如下:
    汇总

    ROC曲线和AUC值

    #对测试集进行预测
    pre_logistic<-as.numeric(predict(wine_logistic,newdata=test_data,type="response")>0.5)
    #将测试集计算所得概率与观测本身取值整合到一起
    obs_p_logistic = data.frame(prob=pre_logistic,obs=test_data$等级)
    #输出混淆矩阵
    table(test_data$等级,pre_logistic,dnn=c("真实值","预测值"))   
    #绘制ROC曲线
    logistic_roc <- roc(test_data$等级,pre_logistic)
    plot(logistic_roc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),grid.col=c("green", "red"), max.auc.polygon=TRUE,auc.polygon.col="skyblue", print.thres=TRUE,main='逻辑回归ROC曲线')
    

    roc

    展开全文
  • 利用R语言+逻辑回归实现自动化运营摘要逻辑回归是最常见的二分类算法之一,由于是有监督学习,训练阶段需要输入标签,而同时在变量较多的情况下,需要先经过一些降维处理,本文主要...

    利用R语言+逻辑回归实现自动化运营

    摘要

    逻辑回归是最常见的二分类算法之一,由于是有监督学习,训练阶段需要输入标签,而同时在变量较多的情况下,需要先经过一些降维处理,本文主要讲解如果通过R语言来自动化实现变量的降维以及变量转换,训练,测试,覆盖率以及准确度效果评估,以及生成最终评分配置表,而在标签与训练数据在可以自动化生成的情况下,配置表是能自动生成的。其中每个步骤都有详细的实现代码。

    主要步骤

    0?wx_fmt=png

    实现细节

    1.生成训练数据

    如类似下面的格式

    lable var1 var2 var3 var4 var5 var6 var7 var8 var9 var10

    37 0 1012512056 1 158 2 5 1 2 250 2 40

    48 0 1028191324 1 158 5 1 0 1 100 0 0

    82 0 1042100363 1 158 3 15 8 17 88 7 46

    105 0 1059904293 1 158 3 17 4 10 170 5 29

    215 0 1056562444 1 158 3 20 10 15 133 3 15

    219 1 405594373 1 158 2 8 5 1 800 0 0

    309 0 1015664693 1 158 4 18 11 6 300 3 16

    312 0 1032736990 1 158 2 6 3 14 42 0 0

    319 1 1310159241 1 158 3 8 4 2 400 2 25

    350 0 1026266596 1 158 5 34 18 15 226 5 14

    380 0 1028432195 1 158 4 19 7 9 211 1 5

    如该例子中,包含了10个特征var1-var10,以及一个标签,第一行是变量名,第二行开始多了一列,因为第一列是行号(这里数据不全,简单做了挑选,为了说明问题)。

    生成这样的格式,主要是为了方便利用如下的代码来载入:

    #读取数据

    data<-read.table("test_tranning.txt",header=T)

    这里的data就是载入的原始数据框

    2.降维及变量转换

    先讲解两个基本概念,IV值以及WOE值,IV的全称是Information Value信息量,IV值是逻辑回归挑选变量中一个主要的方法之一,WOE的全称是Weight of Evidence权重,计算WOE是计算IV值的前提,计算WOE的时候一般需要先对某个变量进行分段,如等量分段,每个分段的woe值实际就是这个分段中坏人与好人比例的对数值,即:

    woe_i=ln(bad_num/good_num)

    对应该分段的iv值为:

    Iv_i = (bad_num-good_num)woe_i

    那么该变量整体的IV值为:

    0?wx_fmt=png

     

    一般情况下IV值越大,说明该变量区分好坏人的能力越强,所以一般会挑选IV值较大的变量作为模型输入。而实际上在本文中,我们不是利用IV值来挑选变量,而是利用glm函数返回的p值来挑选,这里引入WOE的概念,主要是为了进行变量转换,即我们的本意是把原始变量转换为它对应的woe值,把这个woe值作为新的输入变量,在进行训练测试。这样做主要的好处就是能把一些不是正态分布的变量转换为正态分布。

    1)  第一个步骤就是分段

    0?wx_fmt=png

    2)  接着就是求出变量的WOE以及IV值

     0?wx_fmt=png

    0?wx_fmt=png

     

    0?wx_fmt=png

     

    3)接着合并woe值

    这里简单解释下为什么要合并woe值,因为我们默认对所有变量都进行了等量分段,比如10段,而实际上有些相邻分段的woe值(也就是区分好坏人的能力)相差不大,那么我们实际上是可以合并这些分段的,也就是不需要分那么多段。

    0?wx_fmt=png

    0?wx_fmt=png

    4)把变量转变为woe值

    0?wx_fmt=png

     

    5)汇总

    0?wx_fmt=png

    3.训练及测试

    构造训练公式,随机挑选其中70%左右训练数据,30%作为测试数据。使用glm函数来训练。

    0?wx_fmt=png

    4.生成评分配置表

    0?wx_fmt=png

    结果如如下类似情况:

    Woe名字,index,intercept,coefficients,变量分段的起始值,变量分段的终点值,对应评分权重

    0?wx_fmt=png

     

    5.效果评估

    实际上最关键的两个指标就是覆盖率以及准确度,也可以同时加上ks的指标评估,比如在自动化的过程中,可以挑选准确度高于95%的或者覆盖率大于90%的,或者ks指标如何的,这个根据自己的应用来决定。

    0?wx_fmt=png

     

    0?wx_fmt=png

    0

     

     

    直接这样调用:

    0?wx_fmt=png

     

    得到的评估结果如下类似:

    0?wx_fmt=png

    展开全文
  • R语言使用逻辑回归分类算法

    千次阅读 2018-05-31 13:37:45
    R语言使用逻辑回归分类算法逻辑回归属于概率统计的分类算法模型的算法,是根据一个或者多个特征进行类别标号预测。在R语言中可以通过调用logit函数执行逻辑回归分类算法并预测输出概率。通过调用glm函数将family参数...

    R语言使用逻辑回归分类算法

    逻辑回归属于概率统计的分类算法模型的算法,是根据一个或者多个特征进行类别标号预测。在R语言中可以通过调用logit函数执行逻辑回归分类算法并预测输出概率。通过调用glm函数将family参数也就是响应分布指定为binominal(二项式),就是使用逻辑回归算法。

    操作
    同进述内容一样准备好训练数据集与测试数据集。
    fit = glm(churn ~ .,data = trainset,family = binomial)
    summary(fit)
    Call:
    glm(formula = churn ~ ., family = binomial, data = trainset)

    Deviance Residuals: 
        Min       1Q   Median       3Q      Max  
    -3.1519   0.1983   0.3460   0.5186   2.1284  

    Coefficients:
                                    Estimate Std. Error z value Pr(>|z|)    
    (Intercept)                    8.3462866  0.8364914   9.978  < 2e-16 ***
    international_plan1           -2.0534243  0.1726694 -11.892  < 2e-16 ***
    voice_mail_plan1               1.3445887  0.6618905   2.031 0.042211 *  
    number_vmail_messages         -0.0155101  0.0209220  -0.741 0.458496    
    total_day_minutes              0.2398946  3.9168466   0.061 0.951163    
    total_day_calls               -0.0014003  0.0032769  -0.427 0.669141    
    total_day_charge              -1.4855284 23.0402950  -0.064 0.948592    
    total_eve_minutes              0.3600678  1.9349825   0.186 0.852379    
    total_eve_calls               -0.0028484  0.0033061  -0.862 0.388928    
    total_eve_charge              -4.3204432 22.7644698  -0.190 0.849475    
    total_night_minutes            0.4431210  1.0478105   0.423 0.672367    
    total_night_calls              0.0003978  0.0033188   0.120 0.904588    
    total_night_charge            -9.9162795 23.2836376  -0.426 0.670188    
    total_intl_minutes             0.4587114  6.3524560   0.072 0.942435    
    total_intl_calls               0.1065264  0.0304318   3.500 0.000464 ***
    total_intl_charge             -2.0803428 23.5262100  -0.088 0.929538    
    number_customer_service_calls -0.5109077  0.0476289 -10.727  < 2e-16 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    (Dispersion parameter for binomial family taken to be 1)
      Null deviance: 1938.8  on 2314  degrees of freedom
    Residual deviance: 1515.3  on 2298  degrees of freedom
    AIC: 1549.3

    Number of Fisher Scoring iterations: 6

    找到分类模型中包含的可能导致错误分类的非显著变量,仅使用显著的变量来训练分类模型。

     fit = glm(churn ~ international_plan + voice_mail_plan + number_customer_service_calls,data = trainset,family = binomial)
    summary(fit)

    Call:
    glm(formula = churn ~ international_plan + voice_mail_plan + 
        number_customer_service_calls, family = binomial, data = trainset)

    Deviance Residuals: 
        Min       1Q   Median       3Q      Max  
    -2.6485   0.3067   0.4500   0.5542   1.6509  

    Coefficients:
                                  Estimate Std. Error z value Pr(>|z|)    
    (Intercept)                    2.68272    0.12064  22.237  < 2e-16 ***
    international_plan1           -1.97626    0.15998 -12.353  < 2e-16 ***
    voice_mail_plan1               0.79423    0.16352   4.857 1.19e-06 ***
    number_customer_service_calls -0.44341    0.04445  -9.975  < 2e-16 ***
    ---
    Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

    (Dispersion parameter for binomial family taken to be 1)

        Null deviance: 1938.8  on 2314  degrees of freedom
    Residual deviance: 1678.5  on 2311  degrees of freedom
    AIC: 1686.5

    Number of Fisher Scoring iterations: 5
    调用fit使用一个内置模型来预测testset数据集的输出,可以通过调整概率是否高于0.5来改变类别标记的输出结果。
    #这是选择预测之后的输出结果,这个参数能用在binomial数据,也就是响应变量是二分型的时候,这个参数选成type=response,表示输出结果预测响应变量为1的概率。 
    pred = predict(fit,testset,type = "response")
    #将ped中概率大于0.5的设置TRUE,代表为“no”,没有流失客户,1
    #将ped中概率小于0.5的设置FALSE,代表为“yes”,有流失
    客户,0
    Class = pred > 0.5
    summary(Class)
       Mode   FALSE    TRUE 
    logical      28     990 

    对测试数据集的分类和预测结果进行统计分析计数:

    tb = table(testset$churn,Class)
    > tb
         Class
          FALSE TRUE
      yes    15  126
      no     13  864
    将上一步骤的统计结果用分类形式表输出,并生成混淆矩阵

    churn.mod = ifelse(testset$churn == "yes",1,0)
    > churn.mod
       [1] 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
      [44] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0
      [87] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0
     [130] 0 0 1 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
     [173] 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
     [216] 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0
     [259] 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 1 0
     [302] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0
     [345] 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
     [388] 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0
     [431] 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
     [474] 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0
     [517] 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0
     [560] 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1
     [603] 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0
     [646] 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0
     [689] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0
     [732] 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
     [775] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
     [818] 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
     [861] 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
     [904] 0 0 1 1 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
     [947] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0
     [990] 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0

    将Class转化成numeric

    ABC = as.numeric(Class)
    ABC与churn.mod 中0,1代表的意思相反,将ABC进行数值取反

    BC = 1 - ABC
    计算混淆矩阵

    confusionMatrix(churn.mod,BC)
    Confusion Matrix and Statistics

              Reference
    Prediction   0   1
             0 864  13
             1 126  15

                   Accuracy : 0.8635         
                     95% CI : (0.8408, 0.884)
        No Information Rate : 0.9725         
        P-Value [Acc > NIR] : 1              

                      Kappa : 0.138          
     Mcnemar's Test P-Value : <2e-16         

                Sensitivity : 0.8727         
                Specificity : 0.5357         
             Pos Pred Value : 0.9852         
             Neg Pred Value : 0.1064         
                 Prevalence : 0.9725         
             Detection Rate : 0.8487         
       Detection Prevalence : 0.8615         
          Balanced Accuracy : 0.7042         

           'Positive' Class : 0         

    逻辑回归算法和线性回归非常相似,两者区别是在于线性回归算法中的变量是连续变量,而逻辑回归响应变量是二分类的变量(名义变量),使用逻辑回归算法主要目的是利用logit模型去预测和测量变量相关的名义变量的概率。逻辑回归公式:ln(P/(1-P)),P为某事情发生的概率。

    逻辑回归的算法的优势是在于算法易于理解,能够直接输出预测模型的逻辑概率逻辑值以及结果的置信区间,与决策树难以更新模型不同,逻辑回归算法能够迅速在逻辑回归算法中合并新的数据,更新分类模型,逻辑回归算法的不足是无法处理多重共线性问题,因此解决变量必须线性无关。glm提供了一个通用的线性回归模型,可以通过设置family参数得到,当为binomial回归时,可以实现二元分类。

    调用fit函数预测测试数据集testset的类别响应变量,fit函数能够输出类标号的概率,如果概率值小于等于0.5,意味预测得出的类标号与测试数据集的实际类标号不相符,如果大于0.5则说明两者是一致的,进一步调用summsary函数来得到预测的模型。最后进行计数统计与混淆矩阵。

    展开全文
  • # 逻辑回归是回归模型,其中响应变量(因变量)具有诸如True / False或0/1的分类值。 它实际上基于将其与预测变量相关的数学方程测量二元响应的概率作为响应变量的值。 # 逻辑回归的一般数学方程为 - # y = 1/(1+e^-...
  • R语言多元Logistic回归 应用案例 多元Logistic回归 如何进行多重逻辑回归 可以使用阶梯函数通过逐步过程确定多重逻辑回归。此函数选择模型以最小化AIC,而不是像手册中的SAS示例那样根据p值。另请注意,在此...
  • 如何计算逻辑回归模型的R平方? 麦克法登R平方 在R中,glm(广义线性模型)命令是用于拟合逻辑回归的标准命令。据我所知,拟合的glm对象并没有直接给你任何伪R平方值,但可以很容易地计算出McFadden的...
  • 逻辑回归R语言算法

    2016-08-02 23:37:13
    逻辑回归R语言算法
  • R语言逻辑回归

    万次阅读 2019-02-15 18:46:24
    本文转载自...本文主要将逻辑回归实现,模型的检验等 参考博文http://blog.csdn.net/tiaaaaa/article/details/58116346;http://blog.csdn.net/ai_vivi/article/details/43836641 1.测试集和训练...
  • R语言 | 二分类和多分类的逻辑回归实现

    万次阅读 多人点赞 2020-05-13 21:33:53
    目录二分类逻辑回归数据准备模型构建模型检验多分类逻辑回归 二分类逻辑回归 首先,我先展示下我逻辑回归的总体代码,如果有基础的同志需要的话,可以直接修改数据和参数拿去用呀: library(lattice) library(ggplot...
  • 逻辑回归R语言实现

    千次阅读 2018-12-20 15:20:09
    逻辑回归算法和线性回归非常相似,两者区别是在于线性回归算法中的变量是连续变量,而逻辑回归响应变量是二分类的变量(名义变量),使用逻辑回归算法主要目的是利用logit模型去预测和测量变量相关的名义变量的概率...
  • R语言LR逻辑回归实例

    千次阅读 2016-08-29 10:44:07
    二分类实例 去掉setosa类 index (iris$Species == 'setosa') iris [- index,] training #抽样方法 ind(2,nrow(training),replace=TRUE,prob=c(0.7,0.3)) #对数据分成两部分,70%训练数据,30%检测数据nrow(trai
  • R语言逻辑回归

    2019-10-06 03:06:39
    前面写过一个多分类的逻辑回归,现在要做一个简单的二分类,用glm函数 导入csv格式如下: mydata<-read.csv("D://li.csv",header=T) colnames(mydata)<-c("x1","x2","x3","y") model<-glm...
  • 本文回答了关于逻辑回归的问题:它与线性回归有什么不同,如何在R中用glm()函数拟合和评估这些模型等等? Logistic回归是机器学习从统计学领域的一种技术。它是用一个或多个解释变量对二项式结果进行建模的一种强大...
  • R语言 - 逻辑回归

    千次阅读 2018-02-21 14:35:37
    #用逻辑回归函数glm()将数据帧data进行逻辑回归分析,分析结果定义为变量model > model glm ( y ~ ., data = data , family = "binomial" ) #观察分析结果model全貌 > summary ( model ) Call : glm ( formula...
  • Logistic逻辑回归 Logistic逻辑回归模型 线性回归模型简单,对于一些线性可分的场景还是简单易用的。Logistic逻辑回归也可以看成线性回归的变种,虽然名字带回归二字但实际上他主要用来二分类,区别于线性回归直接...
  • R语言逻辑回归

    2019-01-30 18:45:05
    逻辑回归是一种回归模型,其响应变量(因变量)具有分类值,如True/False或0/1。 它实际上是根据与预测变量相关的数学方程,来衡量二进制响应的概率作为响应变量的值。 逻辑回归的一般数学方程为 - y = 1/(1+e^-(a+...
  • R语言 逻辑回归

    千次阅读 2018-04-25 08:55:17
    逻辑回归是回归模型,其中响应变量(因变量)具有诸如True / False或0/1的分类值。 它实际上基于将其与预测变量相关的数学方程测量二元响应的概率作为响应变量的值。 逻辑回归的一般数学方程为 - y = 1/(1+e^-(a...
  • R语言-逻辑回归建模

    2018-03-30 10:47:00
    案例1:使用逻辑回归模型,预测客户的信用评级 数据集中采用defect为因变量,其余变量为自变量 1.加载包和数据集 library(pROC) library(DMwR)model.df <- read.csv('E:\\Udacity\\Data Analysis High\\R\\R_...
  • r语言逻辑回归分类

    2019-07-14 17:53:45
    iris 是r语言内置的数据集 head(iris) # 与python的不同iris.head() Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSpecies 5.1 3.5 1.4 0.2 setosa 4.9 3.0 1.4 0.2 setosa 4.7 3.2 1.3 0.2 se...
  • R语言逻辑回归 logistic regression

    千次阅读 2019-02-01 04:42:33
    R语言逻辑回归代码示例 rm(list=ls()) require(kernlab) data(spam) data &amp;lt;- spam n &amp;lt;- nrow(spam) id &amp;lt;- sample(1:n, floor(n*0.5)) train &amp;lt;- data[id,] test &...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,015
精华内容 5,606
关键字:

r语言实现逻辑回归