sklearn 线性回归_逻辑回归分析

逻辑回归分析概述

  • 在实际的数据挖掘中,站在预测类问题的角度来看,除了需要预测连续型的因变量,还需要预判离散型的因变量。对于连续性变量的预测,例如,如何根据产品的市场价格、广告力度、销售渠道等因素预测利润的高低、基于患者的各种身体指标预测其病症的发展趋势等,基本上可以借助于多元线性回归模型、零回归模型或LASSO回归模型来解决;
  • 而对于离散型变量的判别,例如,某件商品在接下来的1个月内是否被销售、根据人体内的某个肿瘤特征,判断其是否为恶性肿瘤、如何依据用户的信用卡信息认定其是否为优质客户等。对于这类问题建立回归模型时,就用到逻辑回归分析。
  • Logistic回归是一种非线性的回归模型,但它又和线性回归模型有关,所以其属于广义的线性回归分析模型。可以借助该模型实现两大用途,一个是寻找“危险”因素,例如,医学界通常使用模型中的优势比寻找影响某种疾病的“坏”因素;另一个用途是判别新样本所属的类别,例如根据手机设备的记录数据判断用户是处于行走状态还是跑步状态。
5431edc8de2d0be2a43f0587c9831800.png
  • z∈(-∞,+∞)。很明显,当z趋于正无穷大时,e-z将趋于0,进而导致g(z)逼近于1;相反,当z趋于负无穷大时,e-z会趋于正无穷大,最终导致g(z)逼近于1;当z=0时,e-z=1,所以得到g(z)=0.5。
df9f5d7e4d1b45a6978972ed58afbe8f.png
  • Logit函数中的z参数换成多元线性回归模型的形式,则关于线性回归的Logit函数可以表达为:
ba01ead11f8eecf2b22850790d2dd2c5.png
  • 上式中的hβ(X)也被称为Logistic回归模型,它是将线性回归模型的预测值经过非线性的Logit函数转换为[0,1]之间的概率值。
  • 假定,在已知X和β的情况下,因变量取1和0的条件概率分别用hβ(X)和1-hβ(X)表示,则这个条件概率可以表示为:
84b00654d8248bf0ca9ff1ad97d17e7e.png
  • 以利用这两个条件概率将Logistic回归模型还原成线性回归模型,具体推导如下:
5b0a23346056b85c6f71a72cbc2c0bd4.png
  • p/(1-p)通常称为优势(odds)或发生比,代表了某个事件发生与不发生的概率比值,它的范围落在(0, +∞)之间。如果对发生比p/(1-p)取对数,则如上公式可以表示为
d82b618c8546ed1f4ea5721cf324fb4f.png

逻辑回归参数解释

  • 对于线性回归模型而言,参数的解释还是比较容易理解的,例如以产品成本、广告成本和利润构建的多元线性回归模型为例,在其他条件不变的情况下,广告成本每提升一个单位,利润将上升或下降几个单位便是广告成本系数的解释。
  • 逻辑回归参数发生比的概念,即某事件发生的概率p与不发生的概率(1-p)之间的比值,它是一个以e为底的指数,并不能直接解释参数β的含义。发生比的作用只能解释为在同一组中事件发生与不发生的倍数。例如,对于男性组来说,患癌症的概率是不患癌症的几倍,所以并不能说明性别这个变量对患癌症事件的影响有多大。但是使用发生比率,就可以解释参数β的含义,即发生比之比。
  • 假设影响是否患癌的因素有性别和肿瘤两个变量,通过建模可以得到对应的系数β1和β2,则Logistic回归模型可以按照事件发生比的形式改写为:
a939ef828fac08a49742f69660e815df.png

---- 分别以性别变量和肿瘤体积变量为例,解释系数β1和β2的含义。假设性别中男用1表示,女用0表示,所以,性别变量的发生比率为eβ1,表示男性患癌的发生比约为女性患癌发生比的eβ1倍,这是对离散型自变量系数的解释。

---- 如果是连续型的自变量,也是用类似的方法解释参数含义,假设肿瘤体积为Volum0,当肿瘤体积增加1个单位时,体积为Volum0+1;所以,在其他变量不变的情况下,肿瘤体积每增加一个单位,将会使患癌发生比变化2倍

df9028ca5fbd66a45f80c9977fece717.png
6b09d2998b19005db54a5d6633cd1066.png

sklearn中的逻辑回归分析

sklearn.linear_model.LogisticRegression(penalty='l2',dual=False,tol=0.0001,C=1.0,                                        fit_intercept=True,intercept_scaling=1,class_weight=None,                                        random_state=None,solver='liblinear',max_iter=100,multi_class='ovr',                                        verbose=0,warm_start=False,n_jobs=1)
  • penalty:为Logistic回归模型的目标函数添加正则化惩罚项,与线性回归模型类似,默认为l2正则。
  • dual:bool类型参数,是否求解对偶形式,默认为False,只有当penalty参数为'l2'、solver参数为'liblinear'时,才可使用对偶形式。
  • tol:用于指定模型跌倒收敛的阈值。
  • C:正则化系数λ的倒数,通常默认为1
  • fit_intercept:bool类型参数,是否拟合模型的截距项,默认为True。
  • intercept_scaling:当solver参数为'liblinear'时该参数有效,主要是为了降低X矩阵中人为设定的常数列1的影响。
  • class_weight:用于指定因变量类别的权重,如果为字典,则通过字典的形式{class_label:weight}传递每个类别的权重;如果为字符串'balanced',则每个分类的权重与实际样本中的比例成反比,当各分类存在严重不平衡时,设置为'balanced'会比较好;如果为None,则表示每个分类的权重相等。
  • random_state:用于指定随机数生成器的种子。
  • solver:用于指定求解目标函数最优化的算法,默认为'liblinear',还有其他选项,如牛顿法'newton-cg'、L-BFGS拟牛顿法'lbfgs'。
f80a45172168da42f022b1f54a7fa3f2.png
  • multi_class:如果因变量不止两个分类,可以通过该参数指定多分类问题的解决办法,默认采用'ovr',即one-vs-rest方法,还可以指定'multinomial',表示直接使用多分类逻辑回归模型(Softmax分类)。
  • verbose:bool类型参数,是否输出模型迭代过程的信息,默认为0,表示不输出。
  • warm_start:bool类型参数,是否基于上一次的训练结果继续训练模型,默认为False,表示每次迭代都是从头开始。
  • n_jobs:指定模型运算时使用的CPU数量,默认为1,如果为-1,表示使用所有可用的CPU。
5b108191c2914a75b7d6ab26c48bd36c.png
b931759d6c129d6068e14fce5ef2db23.png
84e1dc496342fb78a94b29246dc536c1.png

逻辑回归示例

import osimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn import linear_modelfrom sklearn.model_selection import train_test_splitimport math# 读取数据os.chdir('D:/Work Content/Project 2020/202004_Python统计分析/Data_example')sports = pd.read_csv('ex10_1_Run_or_Walk.csv', encoding = 'gbk')# 提取出所有自变量名称predictors = sports.columns[4:]# 构建自变量矩阵X = sports.ix[:,predictors]# 提取y变量值y = sports.activity# 将数据集拆分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 1234)'''利用训练集建模'''sklearn_logistic = linear_model.LogisticRegression()sklearn_logistic.fit(X_train, y_train)'''返回模型的各个参数'''constant_ = sklearn_logistic.intercept_coef_ = sklearn_logistic.coef_print('- 常数 - ', constant_)print('- 自变量名称 - ', predictors)print('- 自变量参数 - ', coef_)'''模型预测'''sklearn_predict = sklearn_logistic.predict(X_test)''' 模型预测分类'''pd.Series(sklearn_predict).value_counts()'''针对自变量系数运用 优势比 进行解释'''for i in range(len(predictors)):    print('自变量 ', predictors[i], ' 优势比 = ' , math.exp(coef_[0][i]))''' 模型评估'''from sklearn import metrics''' 混淆矩阵'''cm = metrics.confusion_matrix(y_test, sklearn_predict, labels = [0, 1])print('-- 混淆矩阵 --')print(cm, '')Accuracy = metrics.accuracy_score(y_test, sklearn_predict)F1_Score = metrics.f1_score(y_test, sklearn_predict)Recall_score = metrics.recall_score(y_test, sklearn_predict)Precision_score = metrics.precision_score(y_test, sklearn_predict)print('-- 评估指标 -- ')print('模型准确率为 %.2f%% ' %(Accuracy * 100))print('模型 F1_Score 为 %.2f%% ' %(F1_Score * 100))print('召回率 %.2f%%' %(Recall_score * 100))print('准确率 %.2f%%' %(Precision_score * 100))''' ROC 曲线'''# y得分为模型预测正例的概率y_score = sklearn_logistic.predict_proba(X_test)[:,1]# 计算不同阈值下,fpr和tpr的组合值,其中fpr表示1-Specificity,tpr表示Sensitivityfpr,tpr,threshold = metrics.roc_curve(y_test, y_score)'''计算AUC的值'''roc_auc = metrics.auc(fpr,tpr)# 绘制面积图plt.stackplot(fpr, tpr, color='steelblue', alpha = 0.5, edgecolor = 'black')# 添加边际线plt.plot(fpr, tpr, color='black', lw = 1)# 添加对角线plt.plot([0,1],[0,1], color = 'red', linestyle = '--')# 添加文本信息plt.text(0.5,0.3,'ROC curve (area = %0.2f)' % roc_auc)# 添加x轴与y轴标签plt.xlim([0.0, 1.0])plt.ylim([0.0, 1.0])plt.xlabel('1-Specificity')plt.ylabel('Sensitivity')# 显示图形plt.show()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值