文章目录

  • 0.Logistic模型简介
  • 1. python数据处理标准流程
  • 2. 混淆矩阵与预测
  • 3. 交叉验证
  • 4. 网格搜索
  • 5. pipeline管道

0.Logistic模型简介

logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。以胃癌病情分析为例,选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群必定具有不同的体征与生活方式等。因此因变量就为是否胃癌,值为“是”或“否”,自变量就可以包括很多了,如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是分类的。然后通过logistic回归分析,可以得到自变量的权重,从而可以大致了解到底哪些因素是胃癌的危险因素。同时根据该权值可以根据危险因素预测一个人患癌症的可能性。

  • 概念
    logistic回归是一种广义线性回归(generalized linear model,GLM),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。
    logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。
  • Logistic回归模型的适用条件
  1. 因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。但是需要注意,重复计数现象指标不适用于Logistic回归。
  2. 残差和因变量都要服从二项分布。二项分布对应的是分类变量,所以不是正态分布,进而不是用最小二乘法,而是最大似然法来解决方程估计和检验问题。
  3. 自变量和Logistic概率是线性关系
  4. 各观测对象间相互独立。
  • 原理:
    如果直接将线性回归的模型扣到Logistic回归中,会造成方程二边取值区间不同和普遍的非直线关系。因为Logistic中因变量为二分类变量,某个概率作为方程的因变量估计值取值范围为0-1,但是,方程右边取值范围是无穷大或者无穷小。所以,才引入Logistic回归。
  • Logistic回归实质:
    发生概率除以没有发生概率再取对数。就是这个不太繁琐的变换改变了取值区间的矛盾和因变量自变量间的曲线关系。究其原因,是发生和未发生的概率成为了比值 ,这个比值就是一个缓冲,将取值范围扩大,再进行对数变换,整个因变量改变。不仅如此,这种变换往往使得因变量和自变量之间呈线性关系,这是根据大量实践而总结。所以,Logistic回归从根本上解决因变量要不是连续变量怎么办的问题。还有,Logistic应用广泛的原因是许多现实问题跟它的模型吻合。例如一件事情是否发生跟其他数值型自变量的关系。
  • 注意:
    如果自变量为字符型,就需要进行重新编码。一般如果自变量有三个水平就非常难对付,所以,如果自变量有更多水平就太复杂。这里只讨论自变量只有三个水平。非常麻烦,需要再设二个新变量。共有三个变量,第一个变量编码1为高水平,其他水平为0。第二个变量编码1为中间水平,0为其他水平。第三个变量,所有水平都为0。实在是麻烦,而且不容易理解。最好不要这样做,也就是,最好自变量都为连续变量。
  • python代码如下
#导入包
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
from sklearn import linear_model
import matplotlib.pyplot as plt
%matplotlib inlinefrom sklearn.model_selection import train_test_split,cross_val_score
df=pd.read_excel("bankloan_binning.xlsx")
print(df.head(2))
#训练集和测试集
xtrain,xtest,ytrain,ytest=train_test_split(df.iloc[:,[2,3,4,5,6,7,8,9]],df.iloc[:,-1],test_size=0.2,random_state=0)#train_size=0.8
#验证集
xtrain1,xvalid,ytrain1,yvalid=train_test_split(xtrain,ytrain,test_size=0.2,random_state=0)#train_size=0.8


1. python数据处理标准流程

第一、导入包和对应的类
第二、实例化
第三、拟合数据
第四、评估模型
第五、预测评分

#-----------python数据处理标准流程------------
#第一、导入包和对应的类
#第二、实例化
#第三、拟合数据
#第四、评估模型
#第五、预测评分#分类预测
from sklearn import linear_model
log=linear_model.LogisticRegression(solver="lbfgs",C=3)
#"lbfgs"慢但稳健;"newton-cg"不能处理多分类,但比lbfgs快;"sag"处理大型的列和行,二分类;
log.fit(xtrain,ytrain)#拟合训练集数据
log.score(xtest,ytest)#非监督模型是transform,R方值
y_log=log.predict(xtest)#predict_probalog.coef_#回归系数
exp=np.exp(log.coef_)#or值,解释业务关系
gamma=(exp-1)/(exp+1)#gamma值,解释变量相关强度
print([exp,gamma])# 老(新)样本预测
x1=np.array([[2,1,3.767992,3.90,0.504108,3.767992,2.90,1.504108],[3,4,0.767992,3.90,1.504108,3.767992,0.90,1.504108]])
pdata=pd.DataFrame(log.predict_proba(x1))#fit.predict表示预测值
pdata.head(6)

2. 混淆矩阵与预测

#-----------混淆矩阵与预测-----------
#(1)预测分类
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report
import mglearn
# mglearn.plots.plot_binary_confusion_matrix()cm=confusion_matrix(ytest,y_log)
print(classification_report(ytest,y_log,target_names=['非违约','违约']))
sns.heatmap(cm,fmt="d",cmap="gist_rainbow",annot=True,center=True)#annot将数值显示在单元格里



3. 交叉验证

交叉验证适合支持向量机(SVM)和决策树算法,其他也能用,用的比较少

#-----------交叉验证-----------
from sklearn.model_selection import cross_val_score,LeaveOneOut,KFold,GroupKFold
cross_val_score(log,xtrain,ytrain,cv=3,scoring="f1")#默认是正确率,参数scoring="precision"or"recall",'f1'
print('交叉验证:%s'%scores1);
print('平均交叉验证得分:%s'% np.mean(scores1))

4. 网格搜索

#-----------#6.网格搜索-----------
from sklearn.model_selection import GridSearchCV#GridSearchCV网格搜索
parameters={'solver':['newton-cg','lbfgs', 'liblinear','sag','saga'],#'penalty':['l2','l1'],#l2岭回归,l1为lasso,强调可解释'C':[0.3,1,2] # 可以设置范围*range(0,10)       }
#线性回归中叫algha系数,logistic和svm叫C。惩罚系数的倒数,值越小,正则化越大(惩罚越大),修正过拟合,共线性
grid_search=GridSearchCV(log,parameters,cv=3,n_jobs=-1)#scoring='accuracy'
grid_search.fit(xtrain,ytrain)
print("最优得分:%s" %grid_search.best_score_)
print("测试得分:%s" %grid_search.score(xtest,ytest))
print("全部及最优系数:%s" %grid_search.best_estimator_)
print("定义搜索的最优系数:%s" %grid_search.best_params_)#最后使用最优系数构建模型
model=grid_search.best_estimator_
ypre=model.fit(xtrain,ytrain).predict_proba(xtrain)#预测概率
ypre[:6]

5. pipeline管道

#==============7.pipeline管道=============
#Pipeline需要命名;make_pipeline不需要命名
import sklearn.neighbors._base
import sys
sys.modules['sklearn.neighbors.base'] = sklearn.neighbors._base
#----------------标准管道---------------------------
#分类器前的预分析:特征提取(主成分)、特征选择(变量选择)、缩放(各种变量变换)、分类(聚类)、缺失值
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import * #预处理
from sklearn.feature_selection import SelectFromModel #筛选
from sklearn.svm import LinearSVC
from sklearn.ensemble import RandomForestClassifier
from missingpy import MissForestpipe = Pipeline([ ("缺失值1",MissForest(n_estimators=2,min_samples_leaf=9000)),#随机森林("规范化2",MinMaxScaler(feature_range=(0,1))),#最小值与最大值转化("特征选择3",SelectFromModel(LinearSVC(penalty="l2",random_state=0),max_features=3)),#从模型找出最好的3个变量("模型4",RandomForestClassifier(oob_score=True,random_state=0))#随机森林分类器])
rf_clf=pipe.fit(xtrain,ytrain)#rf是随机森林缩写,clf是分类print('缺失值统计量:',pipe.named_steps['缺失值1'].statistics_)
print('变量变换:',pipe.named_steps['规范化2'].data_range_)
print('特征选择:',pipe.named_steps['特征选择3'].get_support())#筛选标记
print('构建模型:',pipe.named_steps['模型4'].feature_importances_)#变量重要性
print('模型评分:',pipe.score(xtest,ytest))#主要使用测试集评分#----------------管道与网格搜索、交叉验证---------------------------
from sklearn.model_selection import GridSearchCV#定义数据流
pipe_gc = Pipeline([ ("缺失值1",MissForest(n_estimators=2,min_samples_leaf=9000)),("规范化2",MinMaxScaler(feature_range=(0,1))),("特征选择3",SelectFromModel(LinearSVC())),("模型4",RandomForestClassifier())])#定义参数:主要参数名需要加步骤的标签
# param_p=[{'特征选择3__max_features':[2,4,6]},
#          {'模型4__min_samples_leaf':[1000,2000,5000],
#           '模型4__n_estimators':[2,5,6]}
#         ]# grid_search_p=GridSearchCV(estimator=pipe_gc,param_grid=param_p,cv=2,n_jobs=-1)
# grid_search_p.fit(xtrain,ytrain)
# print("测试得分:%s" %grid_search_p.score(xtest,ytest))
# print("全部及最优系数:%s" %grid_search_p.best_estimator_)
# print("定义搜索的最优系数:%s" %grid_search_p.best_params_)

python统计分析--4.Logistic回归相关推荐

  1. Python下的Logistic回归模型

    以前都是写杂文,今天也写写专业文章. 不讲理论,Logistic回归模型(中文简称逻辑回归)的形式就是: 其中, 有的人会把Logistic回归模型的形式写成: 其实,它和第一个公式没有区别,只是分子 ...

  2. python中如何画logistic_如何在 Python 中建立和训练线性和 logistic 回归 ML 模型?

    原标题:如何在 Python 中建立和训练线性和 logistic 回归 ML 模型? 英语原文: 翻译:(Key.君思) 线性回归与logistic回归,是. 在我的里,你们已经学习了线性回归机器学 ...

  3. python中fit什么意思_使用Logit()和fit()在python中进行逻辑回归

    我尝试使用以下代码在python中执行logistic回归-from patsy import dmatrices import numpy as np import pandas as pd imp ...

  4. 【机器学习算法】Logistic回归分类算法

    文章目录 一.Logistic回归 1. 分类问题 2. Logistic函数 (1) 阶跃函数(不可导) (2)可导的阶跃函数 二.Logistic回归的算法原理 1. 基本思路 2. 数学解析 ( ...

  5. logistic回归 如何_第七章:利用Python实现Logistic回归分类模型

    免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责.若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章, ...

  6. python做logistic回归_用Python做Logistic回归

    为什么写这篇文章 本人初学python,碰巧做的东西需要用一下Logistic回归,自觉这个很基础的东西应该已经有很多比较好的实现了,于是我就很自觉地问了下度娘.结果大囧==..出来的相关结果少得可怜 ...

  7. 用python计算贷款_Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据示例...

    本文实例讲述了Python基于Logistic回归建模计算某银行在降低贷款拖欠率的数据.分享给大家供大家参考,具体如下: 一.Logistic回归模型: 二.Logistic回归建模步骤 1.根据分析 ...

  8. Python实现 logistic 回归算法

    Python实现 logistic 回归算法 1.算法介绍 模型描述: sigmoid函数: 原理: 优化目标:最小化 sigmoid(f(x)) 和真实标签的差别(有不同的 cost functio ...

  9. Python机器学习算法 — 逻辑回归(Logistic Regression)

    逻辑回归--简介 逻辑回归(Logistic Regression)就是这样的一个过程:面对一个回归或者分类问题,建立代价函数,然后通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型 ...

最新文章

  1. 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)
  2. Visual Studio 2010 新功能总结(一)
  3. VC编写的程序不能在其他机器上运行的解决方案(续)
  4. 关于VS2012连接MySql数据库时无法选择数据源
  5. 单位矩阵的逆| 使用Python的线性代数
  6. vue新增属性是否会响应式更新?
  7. HF-NET环境配置与安装
  8. 【poj3263】Tallest Cow(差分数组)
  9. 服务网与Kubernetes上的Istio分5步
  10. 为什么说CCSK是云安全从业人员必备证书之一
  11. 「Python海龟画图」利用海龟画笔绘制谢尔宾斯基三角形
  12. # C语言指数型表达
  13. OpenGL+VS2015相关类库配置
  14. C#_打包发布变成一个绿色版本软件——Costura.Fody合并DLL和EXE
  15. *Android 多线程下载 仿下载助手(改进版)
  16. ZYNQ LWIP实验
  17. Python下对信号的捕获以及优雅的处理
  18. docker save与docker export的区别
  19. 蓝桥杯官网 试题 PREV-109 历届真题 扫地机器人【第十届】【省赛】【研究生组】【C++】【Java】【Python】三种解法
  20. 【时序】MQ-RNN 概率预测模型论文笔记

热门文章

  1. 计算机的配件知识,一台电脑需要多少配件组成,硬件知识介绍
  2. latex插入表格心得
  3. python分类算法的应用_07-机器学习_(lineage回归分类算法与应用) ---没用
  4. leetcode 两数相加c++_167. 两数之和 II - 输入有序数组
  5. textview文本超出部分用省略号表示
  6. Qt::Key_Return和Qt::Key_Enter区别
  7. 怎么在Mac上安装Tomcat 7
  8. mailcore -- POP
  9. macrotask和microtask以及EventLoop的介绍
  10. 如何正确区分cssci和核心期刊