统计学12-逻辑回归

定义

线性回归中, 反应变量是一个数值变量。在逻辑回归中,得到的反应变量在0到1之间。比如,在信用卡交易的例子中,可以认为诈骗的案例为1,其他非诈骗的案例为0。那么,逻辑回归就是要创建线性模型,以预测对数几率而不是反应变量本身。

log(\frac{p}{1-p}) = b_0 + b_1 * x_1 + b_2 * x_2 + ...

这里:
p是某个值出现的概率,称为优势率(odds)。

使用对数几率改变方程式,可以直接得出概率:


logic.png

这个函数称为sigmoid函数。

Sigmoid.png

sigmoid函数通过线性回归的直线得到值,并将值映射到一个0到1之间的概率值。

python 演示

  • 导入数据和库
import numpy as np
import pandas as pd
import statsmodels.api as sm

df = pd.read_csv("./fraud_dataset.csv")
df.head()
  • 获得虚拟变量
df[['no_fraud', 'fraud']] = pd.get_dummies(df['fraud'])
df = df.drop('no_fraud', axix = 1)

df[['weekday', 'weekend']] = pd.get_dummies(df['day'])
df = df.drop('weekend', axix = 1)
  • 逻辑回归
df['intercept'] = 1

logit_mod = sm.Logit(df['fraud'], df[['intercept','duration', 'weekday']])
results = logit_mod.fit()
results.summary()
  • 显示系数的指数值以便对其进行解释
np.exp(results.params)

例如假设工作日的系数为12.76,则可以说在其他解释变量不变的情况下,在工作日,诈骗为12.76乘以周末的值
exp:返回e的n次方。

解释结果

p值

和线性回归类似,这里p值有助于我们理解某个变量对于我们用模型预测结果是否具有统计学上的显著性。

系数

对于系数的理解和线性回归不同。他是指,在其他解释变量不变的情况下,解释变量每增加一个单位,优势率(odds)将发生乘数变化(multiplicateive change),变化量为exp(系数)
逻辑回归中对虚拟变量的编码方式和线性回归中相同,所以其解释方式也仅仅是加上了一个指数化的过程。
值得注意的是:

  1. 通常对系数进行指数处理
np.exp(results.params)

例如假设工作日的系数为12.76,则可以说在其他解释变量不变的情况下,在工作日,诈骗为12.76乘以周末的值

  1. 如果系数为负,通常描述其相反方向的变化:在其他解释变量不变的情况下,在页面上的时长每降低一个单位,诈骗将增加4.32倍。

模型诊断+性能指标

通常情况下,我们可以用准确率描述模式是否能较好的预测正确的标记。正确率是指正确标记的行数除以数据集中的总行数的比例。但是有些情况下,正确率并不能较好的发挥作用,尤其是在数据集中存在着大量不均衡的数据时。所以还有一些其他的常用衡量标准,为此我们还需要理解模型是否能较好的符合这些衡量标准。更多类似的概念可查看 机器学习纳米学位课程

混淆矩阵

召回率:recall,表示的是样本中的正例有多少被预测正确了。
\frac{True Positive}{ True Positive+ FalseNegative}
准确率:precision,检测到为真,而且真实结果也为真的概率。
\frac{True Positive}{ True Positive+ FalsePositive}
精确率:accuracy,分类器正确分类的样本数与总样本数之比。
\frac{True Positive}{sample}

python 演示

  • 导入数据和库
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, precision_score, recall_score, accuracy_score
from sklearn.model_selection import train_test_split
np.random.seed(42)

df = pd.read_csv('./admissions.csv')
df.head()
  • 创建虚拟变量
df[['level1','level2','level3','level4']] = pd.get_dummies(df['prestige'])
  • 逻辑回归
y = df['admit']
X = df[['gre','gpa','level1','level2','level3']]
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.20,random_state=0) 
log_mod = LogisticRegression()
log_mod.fit(X_train, y_train)

这里是逻辑回归 sklearn 包的相关文献。

  • 预测
y_preds = log_mod.predict(X_test)
y_preds
  • 输出混淆矩阵
print(precision_score(y_test, y_preds))
print(recall_score(y_test, y_preds))
print(accuracy_score(y_test, y_preds))
confusion_matrix(y_test, y_preds)

这里是处理混淆矩阵的相关文献。

precisionrecallaccuracy 这些都是常见的度量标准。

  • 解释confusion_matrix(y_test, y_preds)的结果
    confusion_matrix(y_test, y_preds)输出的是一个矩阵即二维数组,例如:
Predicted (预测值)
Actual(实际值) 0 1
0 23 1
1 14 2

因此,

  • 在我们预测的未入学人数中,有 23 人未入学。
  • 在我们预测的未入学人数中,有 14 人已入学。
  • 在我们预测的已入学人数中,有 1 人未入学。
  • 在我们预测的已入学人数中,有 2 人已入学。

其他常见的指标

其他非常常见的指标是 ROC 曲线 与 AUC 。这些实际上使用的是逻辑回归模型的概率,而不仅仅是标签。更多关于这两个指标的资料,点击 这里 即可获取。

python 演示

### Unless you install the ggplot library in the workspace, you will 
### get an error when running this code!

from ggplot import *
from sklearn.metrics import roc_curve, auc
%matplotlib inline

preds = log_mod.predict_proba(X_test)[:,1]
fpr, tpr, _ = roc_curve(y_test, preds)

df = pd.DataFrame(dict(fpr=fpr, tpr=tpr))
ggplot(df, aes(x='fpr', y='tpr')) +\
    geom_line() +\
    geom_abline(linetype='dashed')

逻辑回归通常的步骤

总结下来,逻辑回归通常的步骤是:

本文要点

  1. 如何使用 python 来实现逻辑回归,用 statsmodels 和 sklearn 包来预测二元分类反应值。

  2. 如何解释 statsmodels 逻辑回归输出的系数。

  3. 如何用多个指标来评估模型效果。

  4. 如何在 python 里评估模型拟合效果。

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

推荐阅读更多精彩内容