逻辑回归算法实现_基于r语言(代码片段)

sanxiandoupi sanxiandoupi     2023-05-06     699

关键词:

逻辑回归(Logistic Regression)模型和线性回归非常相似,可以说就是在逻辑回归的基础上加上了一步逻辑转换,也就是因为这个转换,使逻辑回归模型非常适用于二分类问题的概率预测。本文主要详述逻辑回归模型的基础以及逻辑回归模型的R语言实现。

一、逻辑回归模型原理

首先要讲一下线性回归在预测分类事件中的缺点:线性回归模型的泛化能力很差,如果训练集存在噪点,会导致模型的结果特别差,不同样本建立起来的模型分割点不同;下图中根据年龄预测是否成年的分类问题,斜线就是根据训练集拟合出来的线性回归模型,横线就是该模型的分割点,可以看出,由于有异常值的存在,导致第二个线性回归模型的分割点发生了变动。
技术图片
技术图片
另外,线性回归模型的取值可以取到无穷小或者无穷大,不符合而分类问题的取值要在[0,1]中间,所以在分类问题中就需要对线性回归模型的结果进行转化,而所用的转化函数就是Sigmoid函数。

$$
S(x)=frac11+e^-x
$$

下图就是上述线性回归模型经过sigmod函数转变之后,取值范围就变成了[0,1],同时模型在分裂点(x=0)区域特别敏感,在x>>0或者x<<0都不是特别敏感,这样就避免了噪点带来的影响,分割概率稳定在0.5附近。
技术图片
sigmoid函数的S(x)即为我们所预测的分类事件发生的概率P,为了和线性回归模型的形式一致,我们可以通过sigmoid的反函数来展现逻辑回归的方程,sigmoid的反函数就是我们所说的logit变换公式:

$$
S^-1(x)=ln(fracp(x)1-p(x))
$$
$$
Odds=fracp(x)1-p(x)
$$
其中P(x)是分类事件发生的概率,取对数的部分就是我们平常说的Odds Ratios(优势比),这个指标表示的是一个事件发生的概率与该事件不发生概率的比值,当Odds=1的时候说明,这个事件发生的概率和不发生的概率相同,都为50%。

综上,逻辑回归模型的形式为:
$$
ln(fracp(x)1-p(x))=alpha _1x_1+alpha _2x_2+…+beta
$$
求得分类事件发生的概率为:
$$
P(x)=frac11+e^-(alpha _1x_1+alpha _2x_2+…+beta)
$$

二、逻辑回归模型R语言实现

accepts<-read.csv("accepts.csv")

读取数据,accepts是一个汽车贷款违约纪录的一个数据集,字段说明如下:

名称 中文含义
application_id 申请者ID
account_number 帐户号
bad_ind 是否违约
vehicle_year 汽车购买时间
vehicle_make 汽车制造商
bankruptcy_ind 曾经破产标识
tot_derog 五年内信用不良事件数量(比如手机欠费消号)
tot_tr 全部帐户数量
age_oldest_tr 最久账号存续时间(月)
tot_open_tr 在使用帐户数量
tot_rev_tr 在使用可循环贷款帐户数量(比如信用卡)
tot_rev_debt 在使用可循环贷款帐户余额(比如信用卡欠款)
tot_rev_line 可循环贷款帐户限额(信用卡授权额度)
rev_util 可循环贷款帐户使用比例(余额/限额)
fico_score FICO打分
purch_price 汽车购买金额(元)
msrp 建议售价
down_pyt 分期付款的首次交款
loan_term 贷款期限(月)
loan_amt 贷款金额
ltv 贷款金额/建议售价*100
tot_income 月均收入(元)
veh_mileage 大专栏  逻辑回归算法实现_基于R语言="text-align:left">行使历程(Mile)
used_ind 是否使用
weight 样本权重

剔除样本中的缺失值

accepts<-na.omit(accepts)

将目标变量转变为因子形式

accepts$bad_ind<-as.factor(accepts$bad_ind)

分割训练集和测试集

select<-sample(1:nrow(accepts),length(accepts$application_id)*0.7)
train=accepts[select,]
test=accepts[-select,]

建立逻辑回归模型

lg<-glm(bad_ind~fico_score+bankruptcy_ind+tot_derog+age_oldest_tr+rev_util+ltv+veh_mileage,family = binomial(link = 'logit'))

打印出模型的描述:发现有个变量P值检验未通过

> summary(lg)

Call:
glm(formula = bad_ind ~ fico_score + bankruptcy_ind + tot_derog + 
    age_oldest_tr + rev_util + ltv + veh_mileage, family = binomial(link = "logit"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.5219  -0.6763  -0.4425  -0.2180   3.0337  

Coefficients:
                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)      5.254e+00  7.914e-01   6.639 3.17e-11 ***
fico_score      -1.373e-02  1.121e-03 -12.244  < 2e-16 ***
bankruptcy_indY -5.487e-01  1.906e-01  -2.878   0.0040 ** 
tot_derog        3.744e-02  1.591e-02   2.353   0.0186 *  
age_oldest_tr   -3.498e-03  6.139e-04  -5.699 1.21e-08 ***
rev_util         1.249e-03  5.850e-04   2.135   0.0328 *  
ltv              3.002e-02  3.407e-03   8.812  < 2e-16 ***
veh_mileage      4.708e-07  1.440e-06   0.327   0.7436    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 3011.9  on 3046  degrees of freedom
Residual deviance: 2550.3  on 3039  degrees of freedom
AIC: 2566.3

Number of Fisher Scoring iterations: 5

R语言为逻辑回归模型提供了三种变量筛选方法:

  • 向前引入法( direction=”forward”):刚开始没有变量,之后逐个把相关的变量放到模型中
  • 向后剔除法(direction =”backward”):刚开始全部变量,之后逐个把不相关的变量剔除出去
  • 逐步回归法(direction =”both”):结合上面两种方法

这里我们使用逐步回归法来做变量筛选,最后之前P值检验没通过的veh_mileage被剔除了

lg_ms <- step(lg,direction="both")
> summary(lg_ms)

Call:
glm(formula = bad_ind ~ fico_score + bankruptcy_ind + tot_derog + 
    age_oldest_tr + rev_util + ltv, family = binomial(link = "logit"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.5179  -0.6775  -0.4410  -0.2164   3.0326  

Coefficients:
                  Estimate Std. Error z value Pr(>|z|)    
(Intercept)      5.2653435  0.7907636   6.659 2.77e-11 ***
fico_score      -0.0137435  0.0011197 -12.275  < 2e-16 ***
bankruptcy_indY -0.5501408  0.1905979  -2.886   0.0039 ** 
tot_derog        0.0375763  0.0159036   2.363   0.0181 *  
age_oldest_tr   -0.0035001  0.0006140  -5.701 1.19e-08 ***
rev_util         0.0012479  0.0005844   2.135   0.0327 *  
ltv              0.0301192  0.0033946   8.873  < 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: 3011.9  on 3046  degrees of freedom
Residual deviance: 2550.4  on 3040  degrees of freedom
AIC: 2564.4

Number of Fisher Scoring iterations: 5

检查各变量是否存在多重共线性的问题,可以看到各变量vif都小于10,不存在多重共线性情况

> vif(lg_ms)
    fico_score bankruptcy_ind      tot_derog  age_oldest_tr       rev_util            ltv 
      1.336987       1.156350       1.433134       1.077136       1.044721       1.042412 

用测试集检验模型,并画出ROC曲线 ,可以得到AUC为0.778,最优分割点为0.205

test$lg_p<-predict(lg_ms,test)
test$p<-(1/(1+exp(-1*test$lg_p)))
plot(roc(test$bad_ind,test$p), 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)

技术图片

对测试集做出预测,同时生成混淆矩阵

test$out<-1
test[test$p<0.205,]$out<-0
confusionMatrix(test$out,test$bad_ind,positive='1')

结果如下

> confusionMatrix(test$out,test$bad_ind,positive='1')
Confusion Matrix and Statistics

          Reference
Prediction   0   1
         0 738  62
         1 335 172

               Accuracy : 0.6963          
                 95% CI : (0.6705, 0.7211)
    No Information Rate : 0.821           
    P-Value [Acc > NIR] : 1               

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

            Sensitivity : 0.7350          
            Specificity : 0.6878          
         Pos Pred Value : 0.3393          
         Neg Pred Value : 0.9225          
             Prevalence : 0.1790          
         Detection Rate : 0.1316          
   Detection Prevalence : 0.3879          
      Balanced Accuracy : 0.7114          

       'Positive' Class : 1     

版权声明:本文为大枫原创文章,转载请注明来源。

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

摘要逻辑回归是最常见的二分类算法之一,由于是有监督学习,训练阶段需要输入标签,而同时在变量较多的情况下,需要先经过一些降维处理,本文主要讲解如果通过R语言来自动化实现变量的降维以及变量转换,训练,测试... 查看详情

r语言-逻辑回归建模(代码片段)

案例1:使用逻辑回归模型,预测客户的信用评级数据集中采用defect为因变量,其余变量为自变量1.加载包和数据集library(pROC)library(DMwR)model.df<-read.csv(‘E:\\Udacity\\DataAnalysisHigh\\R\\R_Study\\高级课程代码\\数据集\\第一天\\4信用评级\\custo... 查看详情

lr(逻辑回归)算法实现(代码片段)

现在做的不是做预测某个人未来信用卡支出多少钱这类的预测工作,而是通过对过去的数据去分析哪些因素是信用卡支出的显著影响因素fromIPython.core.interactiveshellimportInteractiveShellInteractiveShell.ast_node_interactivity="all"imp... 查看详情

lr(逻辑回归)算法实现(代码片段)

现在做的不是做预测某个人未来信用卡支出多少钱这类的预测工作,而是通过对过去的数据去分析哪些因素是信用卡支出的显著影响因素fromIPython.core.interactiveshellimportInteractiveShellInteractiveShell.ast_node_interactivity="all"imp... 查看详情

逻辑斯特回归tensorflow实现(代码片段)

#!/usr/bin/python2.7#coding:utf-8from__future__importprint_functionimporttensorflowastf#ImportMNISTdatafromtensorflow.examples.tutorials.mnistimportinput_datamnist=input_data.read_data_sets("../Mnist_ 查看详情

logistic回归分类算法原理分析与代码实现

小结      1.逻辑回归的计算代价不高,是很常用的分类算法。集中基于随机梯度上升的逻辑回归分类器能够支持在线学习。      2.但逻辑回归算法缺点很明显-一般只能解决两个类的分... 查看详情

机器学习逻辑回归算法(代码片段)

逻辑回归算法学习目标1.逻辑回归的介绍1.1逻辑回归的应用场景1.2逻辑回归的原理1.2.1输入1.2.2激活函数1.3损失以及优化1.3.1损失1.3.2优化1.4小结2.逻辑回归api介绍3.案例:癌症分类预测-良/恶性乳腺癌肿瘤预测3.1背景介绍3.... 查看详情

r语言-岭回归及lasso算法(代码片段)

前文我们讲到线性回归建模会有共线性的问题,岭回归和lasso算法都能一定程度上消除共线性问题。岭回归>#########正则化方法消除共线性>###岭回归>###glmnet只能处理矩阵>library(glmnet)>library(mice)>creditcard_exp<-creditcard_... 查看详情

机器学习之logistic回归(逻辑回归)(代码片段)

目录Logistic回归博客园地址:https://www.cnblogs.com/chenyoude/git地址:https://github.com/nickcyd/machine_learning微信:a1171958281Logistic回归本章内容回归算法Logistic回归的一般过程Logistic的优缺点基于Logistic回归和Sigmoid函数的分类Sigmoid函数Logistic... 查看详情

机器学习模型和算法(代码片段)

文章目录python简介python基本语法监督学习--回归模型线性回归模型一元线性回归线性回归最小二乘代码实现多元线性回归梯度下降法和最小二乘法相比线性回归梯度下降代码实现非线性回归python简介略python基本语法文件开头加上#... 查看详情

[机器学习与scikit-learn-21]:算法-逻辑回归-多项式非线性回归polynomialfeatures与代码实现(代码片段)

...sdn.net/HiWangWenBing/article/details/123447272目录第1章scikit-learn对逻辑回归的支持第2章PolynomialFeatures 类参数详解2.1PolynomialFeatures 这个类有3个参数:2.2代码演示第3章回归代码实现案例第1章scikit-learn对逻辑回归的支持scikit-learn只提... 查看详情

r逻辑回归(代码片段)

查看详情

sklearn实现逻辑回归_以python为工具python机器学习系列(代码片段)

sklearn实现逻辑回归_以python为工具【Python机器学习系列(十)】文章目录1.线性逻辑回归2.非线性逻辑回归3.乳腺癌数据集案例      ʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯•͡˔•̯᷅ʔɞʚʕ̯... 查看详情

r语言基本数据分析

...语言进行基本数据统计分析,包括基本作图,线性拟合,逻辑回归,bootstrap采样和Anova方差分析的实现及应用。不参考技术AR语言基本数据分析本文基于R语言进行基本数据统计分析,包括基本作图,线性拟合,逻辑回归,bootstrap... 查看详情

数据分享|r语言逻辑回归naivebayes贝叶斯决策树随机森林算法预测心脏病|附代码数据(代码片段)

...平、胸痛类型等。我们在这个问题上使用的算法是:二元逻辑回归NaiveBayes算法决策树随机森林数据集的描述:该数据有303个观察值和14个变量。每个观察值都包含关于个人的以下信息。年龄:-个人的年龄,以年为单位sex:-性别(1=... 查看详情

数据分享|r语言逻辑回归naivebayes贝叶斯决策树随机森林算法预测心脏病|附代码数据(代码片段)

...平、胸痛类型等。我们在这个问题上使用的算法是:二元逻辑回归NaiveBayes算法决策树随机森林数据集的描述:该数据有303个观察值和14个变量。每个观察值都包含关于个人的以下信息。年龄:-个人的年龄,以年为单位sex:-性别(1=... 查看详情

机器学习算法(代码片段)

...器学习常用算法一、线性回归1.基本概念2.代码实现二、逻辑回归1.基本概念Sigmoid预测函数2.代码实现三决策树1.基本概念2.代码实现四支持向量机(SVM)1.基本概念2.代码实现五全连接神经网络DNN1.基本概念全连接神经网络... 查看详情

基于回归模型的协同过滤推荐算法(代码片段)

基于回归模型的协同过滤推荐基于回归模型的协同过滤推荐Baseline:基准预测方法一:随机梯度下降法优化step1:梯度下降法推导step2:随机梯度下降step3:算法实现Step4:准确性指标评估方法二:交替最小二... 查看详情