Lesson 14 - 逻辑回归

概述

在本课中,我们将研究了Logistic回归。你将了解到:

  • 如何使用python执行逻辑回归来预测statsmodel和sklearn中的二进制响应值。
  • 如何解释statsmodels中逻辑回归输出的系数。
  • 如何使用各种指标评估模型的执行情况。
  • 如何评估python中的模型拟合。

1 简介

在上节课中 , 你了解到如何使用多重线性回归得到 , 定量变量和分类变量在内的多个解释变量 , 同时使用这些变量预测定量反应变量

在这节课中我们完成类似的事情 , 不过我们并不是预测定量反应变量 , 而是在这节课中预测分类变量 , 逻辑回归是实现这点的一种最流行的技巧

逻辑回归是用于预测两个可能结果的回归方法

image.png

这种方法可以预测以下示例:

  • 预测特定信用卡交易是否存在诈骗
  • 某人是否点击我们的网址
  • 某人是否拖欠贷款

或者预测只包括两个结果的其他事件 , 利用线性回归我们进行最优化 , 可以较好预测连续性的值变量 , 但是这里我们要正确预测两个可能结果的其中一个 , 我们首先看看它如何改变数学模型 然后创建回归模型

2 Fitting Logistic Regression

在之前的课程中 , 预测反应变量的线性回归并没有受到限制 , 这说明正确的输入内容可能会预测 , "房价为负数 某人身高可能是 80 英尺"

与线性回归不同 使用逻辑回归 , 得到的反应变量在 0 到 1 之间 , 而不是线性回归中可能得到的任何值

从数学意义上来讲, 为了完成逻辑运算 , 我们要改变是否诈骗, 成功与否和其他结果只包括 0 和 1 的变量标记

image.png

在信用卡交易例子中 , 你可以认为诈骗案例为 1 , 其他非诈骗案例为 0 , 那么创建逻辑运算是通过 , 线性模型预测对数(log)几率而不是预测反应变量本身

image.png

这里 p 是某个值出现的概率 , 所以这是某个事件出现的概率 , 相比于事件不会发生的概率 , 这称为优势率(odd ratio)

image.png

并且利用对数用方程式列出线性回归直线 , 我们把预测值控制在 0 和 1 之间 得到成功的概率

image.png

通过代数知识 , 你可以像这样使用对数几率改变方程式 , 这直接得出概率 , 这称为 sigmoid 函数

image.png
image.png

sigmoid 函数根据线性回归直线得到值 , 并将概率控制在 0 和 1 之间

image.png

这两种方程都常用于理解创建逻辑回归

对比

image.png

3 Fitting Logistic Regression in Python

拟合逻辑回归模型 , 实际上与上节课中 , 拟合线性回归模型非常类似 , 我们再次使用 statsmodels 对数据集进行逻辑回归

首先我们加载必要的库和数据 正如你这里看到的 , 与线性回归类似 , 对于任何分类变量 , 我们想要改为虚拟变量 , 所以在这个数据集中 , 一些日期标记为工作日或周末 , 诈骗要么为真 要么为假 , 所以我们把这些改为虚拟变量

然后我们填充缺失值 诸如此类 , 这个数据集没有缺失值 , 所以我们应当创建虚拟变量 , 这里我将要虚设诈骗 (fraud) 变量 , 我们使用时长预测变量, 所以这里你看到我们创建了这些虚拟变量 , 我使用 0 表示这里的假 , 如果这一列为真 使用 1 表示 , 所以实际上不需要最后一个 我们可以删除

image.png

get_dummies中传出得第一列为0,第二列为1

这样就得到我的DataFrame 现在可以继续使用 statsmodels , 对于逻辑回归 , 我们不使用普通最小二乘法 , 而是使用评定 (Logit) 模型 , 我们需要传递的第一个参数值是反应变量(Reasonable variable)

image.png

传递这组fraud数据 且建立截距列, 实际上这与上节课内容相似 , 我们要传递截距, 那么说我们要使用时长(duration) , 所以那样创建模型 , 我们需要进行拟合 然后存储起来 我们再次得到一个摘要 , 所以进行最优化 你会发现 , 我们得到的输出结果与上节课你见到的很相似

4 解释结果

image.png

与回归案例相同 , 我们这里使用 p 值 帮助我们理解 , 某个变量 , 对我们预测某笔交易是否存在诈骗非常有效

image.png

另外 这些系数 与之前你见到的方式有所不同

image.png

首先 我们对每个系数求幂 , 然后通过定量变量 , 对于解释变量每增加一个单位 , 我们认为某个分类变量的几率发生乘数变化 , 成为系数的指数 , 其他变量保持不变

image.png

对逻辑回归中虚拟变量编码的方式 , 与多重线性回归的方式相同 , 所以解释虚拟变量系数 , 只能通过指数化系数进行再次改变

image.png

然后你使用之前类似的方式 , 解释虚拟变量中的指数化系数 , 在这个类别中与基准相比 , 我们认为某个分类变量的几率发生乘数变化 , 其他变量保持不变 , 现在看起来有些令人困惑 但是接下来我们进行尝试 你会发现这种方法不错

5 Interpret Results

我们仔细观察这些系数和输出结果 了解如何解释这些系数 , 所以这里我们要关注这些系数 , 大多数情况下我们并不关注截距 , 只关注与解释变量相关的内容

image.png

为了解释这些内容 , 我们首先需要对每个系数进行指数化

image.png
image.png

我们进行指数化 , 现在每个值结果是对几率的乘数变化

例如对于工作日虚拟变量

在工作日 , 诈骗为 12.76 乘以周末的值 , 其他变量保持不变 , 在这种案例中表示时长不发生变化

也解释时长的系数 , 因为页面上时长每增加 1 个单位 , 诈骗增加 0.23 倍 , 其他变量保持不变

当你得到乘数变化小于 1 时 , 正如这里对时长的运算 , 计算倒数非常有效

image.png

这改变了单位增加的方向 , 变为单位降低 , 所以页面上时长每降低 1 个单位 , 诈骗增加 4.32 倍 , 如果其他变量保持不变

在这个案例中结果是工作日或周末 , 这种倒数可以帮助受众更好地联系结果

6

确定逻辑回归模型如何 , 较好地预测正确标记时 , 最常见的测量方法称为准确率

image.png

准确率是正确标记的行数除以数据集中的总行数的比例 , 有些情况下准确率并不能较好发挥作用 , 尤其是数据集中存在大量不均衡时.

混淆矩阵

image.png

Recall(查全率):
True Positive / (True Positive + False Negative). Out of all the items that are truly positive, how many were correctly classified as positive. Or simply, how many positive items were 'recalled' from the dataset.被正确预测

Precision(查准率):
True Positive / (True Positive + False Positive). Out of all the items labeled as positive, how many truly belong to the positive class.被正确归类

例如下图

image.png

如何理解真阳性(TP), 假阳性(FP), 假阴性(FN)

  • 例1
image.png
  • 例2


    image.png

所以对应上述,可得查全率和查准率的公式

image.png

Python中的模型诊断

导入模块

image.png
  • 加载库和必要的数据集
  • 然后使用LogisticRegression逻辑回归作为model模型 ,
  • 导入了 Scikit-learn , 导入train_test_split训练 测试和拆分
image.png

首先我们split拆分数据集为 train训练和test测试数据

image.png

同时我也希望像这样完成 X 和 Y 部分 , Y 表示是否入学(admit) , X 表示其余部分 , 所以我们这里创建声望 (prestige) 作为虚拟变量 , 这样你可以看到我增加了 4 个等级 , 传递了声望 (prestige) 部分 从 4 个中挑选 1 个 , 进行编码 作为单独一列 , 然后我删除其中一列 ,这里你可以指定random_state随机状态 , 每次运行时都可以得到相同结果 , 可以看到我们得到了 4 部分 , 现在我们要对训练集完成操作 , 与上节课类似 , 你可以通过各种方式改变数据 更好地预测反应变量

不过这一节的目的只是 , 要观察 Scikit-learn 中可以得到的矩阵 , 我们来拟合模型和训练的数据 , 然后观察它是否较好地完成测试数据

  • 第一步是拟合模型
log_mod = LogisticRegression()
  • 第二步使用训练数据拟合模型 ,
log_mod.fit(X_train, y_train)
  • 第三步拟合模型后 , 进行预测
y_preds = log_mod.predict(X_test)
  • 第四步得到精确率分数 召回率分数 , 准确率分数 , 混淆矩阵
image.png

解释结果
这里你可以看到精确分数约为 67% , 召回率约为 12.5% 并不算大 , 准确度约为 63% , 然后是混淆矩阵

The predicted is across the columns, and the actual is across the rows. Therefore,

Predicted
Actual 0 1
0 23 1
1 14 2
  • Therefore, there are 23 non-admitted that we predict to be non-admitted.
  • There are 14 admitted that we predicted to be non-admitted.
  • There is 1 non-admitted that we predict to be admitted.
  • There are 2 admitted that we predict to be admitted.

Why Train-Test Split And Additional Documentation

Here is the documentation for logistic regression sklearn. Additionally, here is the documentation for working with confusion matrices.

In this screencast, you created a train and test dataset, which is very popular in machine learning. A great paper on this topic is provided here. In general, it is useful to split your data into training and testing data to assure your model can predict well not only on the data it was fit to, but also on data that the model has never seen before. Proving the model performs well on test data assures that you have a model that will do well in the future use cases

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容