天天看点

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       Q   Median       Q      Max  
-              

Coefficients:
                                Estimate Std. Error z value Pr(>|z|)    
(Intercept)                           <  ***
international_plan1           -   -  <  ***
voice_mail_plan1                      *  
number_vmail_messages         -    -     
total_day_minutes                        
total_day_calls               -    -     
total_day_charge              -   -     
total_eve_minutes                        
total_eve_calls               -    -     
total_eve_charge              -   -     
total_night_minutes                      
total_night_calls                        
total_night_charge            -   -     
total_intl_minutes                       
total_intl_calls                      ***
total_intl_charge             -   -     
number_customer_service_calls -   -  <  ***
---
Signif. codes:   ‘***’  ‘**’  ‘*’  ‘.’  ‘ ’ 

(Dispersion parameter for binomial family taken to be )
  Null deviance:   on   degrees of freedom
Residual deviance:   on   degrees of freedom
AIC: 

Number of Fisher Scoring iterations: 
           

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

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       Q   Median       Q      Max  
-              

Coefficients:
                              Estimate Std. Error z value Pr(>|z|)    
(Intercept)                            <  ***
international_plan1           -     -  <  ***
voice_mail_plan1                        ***
number_customer_service_calls -      -  <  ***
---
Signif. codes:   ‘***’  ‘**’  ‘*’  ‘.’  ‘ ’ 

(Dispersion parameter for binomial family taken to be )

    Null deviance:   on   degrees of freedom
Residual deviance:   on   degrees of freedom
AIC: 

Number of Fisher Scoring iterations: 
           

调用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”,有流失
客户,
Class = pred > 
summary(Class)
   Mode   FALSE    TRUE 
logical            
           

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

tb = table(testset$churn,Class)
> tb
     Class
      FALSE TRUE
  yes      
  no       
           

将上一步骤的统计结果用分类形式表输出,并生成混淆矩阵

churn.mod = ifelse(testset$churn == "yes",,)
> churn.mod
   []                                           
  []                                           
  []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                                           
 []                             
           

将Class转化成numeric

ABC与churn.mod 中0,1代表的意思相反,将ABC进行数值取反

计算混淆矩阵

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

          Reference
Prediction      
            
            

               Accuracy :          
                 % CI : (, )
    No Information Rate :          
    P-Value [Acc > NIR] :               

                  Kappa :           
 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函数来得到预测的模型。最后进行计数统计与混淆矩阵。

继续阅读