Logistic回归——二分类 —— python

目录

1.简介

2.应用范围

3.分类

3.应用条件

4.原理详解

4.1 sigmod分类函数

4.2 建立目标函数

4.3 求解相关参数

5.实列分析

5.1 导入库

5.2 读取数据(excel文件)

5.3 分离数据集

5.4 求解前设定

5.5 求解目标函数

5.6 预测

5.7 预测分类 

5.8 准确率

6. python中sklearn函数


1.简介

Logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘 ,Logistic回归虽说是回归,但实际更属于判别分析。

2.应用范围

① 适用于流行病学资料的危险因素分析

② 实验室中药物的剂量-反应关系

③ 临床试验评价

④ 疾病的预后因素分析

3.分类

①按因变量的资料类型分:

二分类

多分类

其中二分较为常用

② 按研究方法分:

条 件Logistic回归

非条件Logistic回归

两者针对的资料类型不一样,前者针对配对研究,后者针对成组研究。

3.应用条件

① 独立性。各观测对象间是相互独立的;

② LogitP与自变量是线性关系;

③ 样本量。经验值是病例对照各50例以上或为自变量的5-10倍(以10倍为宜),不过随着统计技术和软件的发展,样本量较小或不能进行似然估计的情况下可采用精确logistic回归分析,此时要求分析变量不能太多,且变量分类不能太多;

④ 当队列资料进行logistic回归分析时,观察时间应该相同,否则需考虑观察时间的影响(建议用Poisson回归)。

4.原理详解

4.1 sigmod分类函数

之所以在这里介绍,是因为下面会用到这个函数

Sigmoid函数

\large h_{w}=\frac{1}{1+e^{-z}}

曲线表示:

由图可见当范围为0-1,当X<0时,Y趋向于0,X>0时,Y趋向于1,适合用于0-1二分类。

所以我们就可以设分类函数如下:

\large h_{w}=\frac{1}{1+e^{-z}}

\large z=\omega ^{T}x

\large x=\begin{bmatrix} 1,x_{1},x_{2},...,x_{n}\end{bmatrix}

\large z=w_{0}+w_{1}x_{1}+...+w_{n}x_{n}

        其中x为自变量,即特征数据。实际因变量为y,为0-1变量,h_w为预测值范围为0-1。显然这个模型需要求解的变量为w

4.2 建立目标函数

对于输入变量x,设h_w(x)为输出为1的概率,则1-h_w(x)为输出0的概率。则可表示成如下:

\large p(y=1|x;w)=h_{w}(x)

\large p(y=0|x;w)=1-h_{w}(x)

求解损失函数:用概率论中的极大似然估计的方法,构建概率函数如下,

\large P(y|x;w)=(h_{w}(x))^{y}*(1-h_{w}(x))^{1-y}

        对损失函数可以理解为,当y=1时,h_w(x)的值越大,P的值越大;y=0时,h_w(x)的值越小,P的值越小。即可以认为,当P值越大时预测的越准确。单个输入的目标即为P取最大。对M个输入样本,可以构建以下目标函数:

\large L(w)=\prod_{i=1}^{m}(h_{w}(x))^{y^{(i)}}*(1-h_{w}(x))^{1-y^{(i)}}

        对目标函数取对数可以将目标函数的连乘变为连加:

\large log(L(w))=\sum_{i=1}^{m}y^{(i)}h_{w}(x^{(i)})+(1-y^{(i)})(1-h_{w}(x^{(i)}))

4.3 求解相关参数

        设J(w)=log(L(w)),求J(w)的最大值,可以用梯度上升的方法进行求解,如果在前面加上一个负号,则就转化为梯度下降。在这里用梯度上升法求解系数 \large w :

\large w^{'}=w+\eta \triangledown J(w)

 其中,\large \eta为学习率。\triangledown J(w)对目标函数求梯度、即求导。

                              \large \eta \triangledown J(w)^{(i)}=\frac{\partial J(w)^{(i)} }{\partial w}

                                                    \large =[\frac{y^{(i)}}{h_{w}(x^{(i)})}+\frac{1-y^{(i)}}{1-{h_{w}(x^{(i)})}}]\frac{\partial h_{w}(x^{(i)}) }{\partial w}

                                                    \large =[\frac{y^{(i)}-h_{w}(x^{(i)}}{h_{w}(x^{(i)})(1-{h_{w}(x^{(i)})})}]\frac{\partial h_{w}(x^{(i)}) }{\partial w}

其中:

                                \large \frac{\partial h_{w}(x^{(i)}) }{\partial w}=(\frac{1}{1+e^{-w^{T}x^{(i)}}})^{'}=\frac{x^{(i)}e^{-w^{T}x^{(i)}}}{(1+e^{-w^{T}x^{(i)}})^{2}}

                                                     \large =x[\frac{1}{1+e^{-w^{T}x^{(i)}}}\times \frac{e^{-w^{T}x^{(i)}}}{1+e^{-w^{T}x^{(i)}}}]

                                                     \large =x[h_{w}(x^{(i)})(1-h_{w}(x^{(i)}))]

将其带入原式可得:

\large \triangledown J(w)^{(i)}=x^{(i)}[y^{(i)}-h_{w}(x^{(i)})]

\large \triangledown J(w)=\sum_{i=1}^{m}x^{(i)}[y^{(i)}-h_{w}(x^{(i)})]

5.实列分析

相关数据如下:

fbsrestecgthalachexang0ldpeaksl0pecathaltarget
01168012230
1015513.10030
0112512.60030
01161002130
1110601.91320
00122011021
0214004.40310
0014510.81130
0014400.82030
0011613.21220
0112501.61021
10136131030

5.1 导入库

#导入相关库
import pandas as pd
import numpy as np

5.2 读取数据(excel文件)

#导入数据
data=pd.read_excel('D:\桌面\data.xlsx')
# print(data)
#提取变量名 x1 -- x7
label_need=data.keys()[0:]
# print(label_need)
#提取上面变量名下的数据
data1=data[label_need].values
print(data1)

返回:

5.3 分离数据集

正式介绍之前补充一点东西

        行数 = np.shape(data)[0] 

        列数 = np.shape(data)[1] 

好,开始进入正题

此为通过比例确定,选择多少行数据作为测试集

num=round(0.8*np.shape(data)[0]) #取整个数据0.8的比例训练

选出相应比例的数据作为测试集

train_data=data1[0:num,:]

将剩余数据作为验证集

test_data=data1[num:,:]

分离测试集的x和y

n=np.shape(data1)[1] 
train_y=train_data[:,n-1] #确定y所对应的数据
train_x=train_data[:,:n-2] #除去y将剩余的数据都归于x

同理分离验证集的x和y

test_y=test_data[:,n-1] 
test_x=test_data[:,:n-2] 

5.4 求解前设定

详看上面过程公式4.1的分类函数的解析

new1 = np.ones((np.shape(train_x)[0]))
new2 = np.ones((np.shape(test_x)[0]))
train_x1=np.insert(train_x,0,values=new1,axis=1)
test_x1=np.insert(test_x,0,values=new2,axis=1)
w=np.zeros((np.shape(test_x1)[1],1))
lr=0.001 #学习率

5.5 求解目标函数

pred_f=  np.dot(train_x1,w) #预测出的方程式取值
pred_y=1./(1+np.exp(-pred_f)) #Sigmoid函数
d_w=(np.dot((train_y-pred_y).T,train_x1))
w=w+np.dot(lr,d_w.T)
w=np.mean(w,axis=1)

返回,可查得w为:

5.6 预测

pred_y=1/(1+np.exp(-np.dot(test_x1,w)))  #预测出分类的p值

返回:

5.7 预测分类 

fenlei=1*(pred_y>=0.5)

返回:

5.8 准确率

accu=1-sum(np.abs(fenlei-test_y))/len(test_y)

返回:

6. python中sklearn函数

LogisticRegression   可看文档:传送门

调用:

from sklearn.linear_model import LogisticRegression

对上面数据再次拟合

from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(train_x, train_y)
y_pred = classifier.predict(test_x)

返回:

 函数参数:

LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, rando

m_state=None, solver=’liblinear’, max_iter=100, multi_class=’ovr’, verbose=0, warm_start=False, n_jobs=1)[source]

注意

(1)在多类别划分中,如果' multi_class '选项设置为' OvR ',训练算法将使用one-vs-rest (OvR)方案;如果' multi_class '选项设置为'多项式',则使用交叉熵损失。

(2)这个类使用‘liblinear’ library, ‘newton-cg’, ‘sag’ 和‘lbfgs’求解器实现了规范化的logistic回归。它的输入矩阵可以是密集和稀疏的矩阵;使用C-ordered arrays or CSR matrices containing 64-bit floats可以获得最佳的性能;

(3)‘newton-cg’, ‘sag’, and ‘lbfgs求解器只支持原始公式下的L2正则化;liblinear求解器同时支持L1和L2的正则化,只对L2处罚采用对偶公式。

参数说明

  1. penalty : str, ‘l1’ or ‘l2’, default: ‘l2’。用来指明惩罚的标准,The ‘newton-cg’, ‘sag’ and ‘lbfgs’ solvers仅支持l2 penalties.
  2. dual : bool, default: False。Dual or primal formulation.Dual formulation只适用于 l2 penalty with liblinear solver.Prefer dual=False when n_samples > n_features.
  3. tol : float, default: 1-4。Tolerance for stopping criteria.
  4. C : float, default: 1.0。逆正则化的强度,一定要是整数,就像支持向量机一样,较小的值有职责更好的正则化。
  5. fit_intercept : bool, default: True。是否存在截距,默认存在。
  6. class_weight : dict or ‘balanced’, default: None。用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重。如果输入的话可以调用balanced库计算权重,或者是手动输入各类的权重。比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。
  7. random_state:随机数种子,默认为无,仅在正则化优化算法为sag,liblinear时有用。
  8. max_iter : int, default: 100。Useful only for the newton-cg, sag and lbfgs solvers,求解的最大迭代次数
  9. multi_class : str, {‘ovr’, ‘multinomial’}, default: ‘ovr’。多类别问题的处理方式。'ovo':一对一
  10. verbose :日志冗长度int:冗长度;0:不输出训练过程;1:偶尔输出; >1:对每个子模型都输出
  11. warm_start : bool, default: False。是否热启动,如果是,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化),bool:热启动,False:默认值
  12. n_jobs:并行数,int:个数;-1:跟CPU核数一致;1:默认值
  13. solver : {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’},default: ‘liblinear’ Algorithm to use in the optimization problem.
  •    对于小的数据集,, 选择 ‘liblinear’较好,‘sag’ 和‘saga’ 对于大数据集更好;
  • 对于多级分类的问题,只有‘newton-cg’, ‘sag’, ‘saga’ and ‘lbfgs’,libniear只支持多元逻辑回归的OvR,不支持MvM,但MVM相对精确。
  • newton-cg’, ‘lbfgs’ and ‘sag’ only handle L2 penalty, 相反地‘liblinear’ and ‘saga’ handle L1 penalty.

本次就到这里了,如果有错误的话及时联系我进行改正哦,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dubbo官方文档_狂神说SpringBoot17:Dubbo和Zookeeper集成

狂神说SpringBoot系列连载课程&#xff0c;通俗易懂&#xff0c;基于SpringBoot2.2.5版本&#xff0c;欢迎各位狂粉转发关注学习。未经作者授权&#xff0c;禁止转载分布式理论什么是分布式系统&#xff1f;在《分布式系统原理与范型》一书中有如下定义&#xff1a;“分布式系统…

第一个脚本-HelloWorld

目录 前言 脚本的作用 创建脚本 开始编写我们这次的HelloWorld的对话框 前言 我的扩展主要使用:Tampermonkey&#xff0c;当然其他的有类似功能的也可以&#xff0c;我们就将这些统称为油猴吧。 本节主要内容: 描述脚本的作用和油猴,脚本的基本结构,创建一个脚本,使它能够…

bme280 环境传感器开发板_STM32Cube14 | 使用硬件I2C读写环境光强度传感器

更多精彩~点击上面蓝字关注我们呀&#xff01; 寻求更好的阅读体验&#xff0c;请点击阅读原文移步&#xff1a;Mculover666的个人博客。本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件I2C外设读取环境光强度传感器数据(BH1750)。1. 准备工作硬件准备开发板首先…

平稳序列的拟合和预测之序列的预测

目录 1.线性预测函数 2.预测方差最小原则 3.线性最小方差预测的性质 AR(p)序列的预测 例题 R语言预测举例 MA(q)序列的预测 例题 ARMA(p,q)序列预测 例题 小结 序列只有为非白噪声时才可以进行预测哦&#xff01;&#xff01; 1.线性预测函数 根据平稳性和可逆性&…

vue 浏览器调试 样式如何定位样式_浏览器断点调试-程序员的必修课

一、源码调试/debugger方法1.1控制台调试按钮介绍Resume script execution恢复断点调试、常用在一个方法调用多个js文件(适用冗长js代码使用)、点击这个会直接跳转到下一个断点(逐过程执行)Pause script execution停止断点调试step over next function call逐语句执行&#xff…

https open api_Web上的分享(Share)API

我认为Web Share API非常酷&#xff0c;简而言之&#xff0c;它会利用您所使用的平台上的原生共享功能(如果该平台支持的话)。我喜欢这个&#xff1a;远远不止这些东西&#xff1a;为什么&#xff1f;Web Share API只是几行代码。简单&#xff01;没有图像&#xff0c;没有重量…

无季节效应的非平稳序列分析(一)

目录 Cramer分解定理&#xff08;1961年提出&#xff09; 差分 R语言函数 diff 例题&#xff1a; 过差分&#xff1a; 小结 Cramer分解定理&#xff08;1961年提出&#xff09; 任何一个时间序列 都可以分解为两部分的叠加:其中一部分是由多项式决定的确定性趋势成分&a…

求一个任意实数c的算术平方根g的算法设计思想_算法复习第四篇——贪心法

公元2020年5月5日&#xff0c;距离算法考试仅剩4天。一、知识归纳1.设计思想只根据当前已有的信息就做出选择&#xff0c;而且一旦做出了选择&#xff0c;将来无论如何都不能更改不从整体最优考虑&#xff0c;所做的选择只是在某种意义上的局部最优这种选择并不总能获得整体最优…

安装百分之80卡住_关注丨男子翻越高铁站台丢命,家属向铁路部门索赔80万!法院这样判...

去年3月&#xff0c;一名男子翻越高铁站台被卡住致死引发广泛关注。事发后&#xff0c;其家属将铁路部门告上法庭&#xff0c;索赔80余万元。日前&#xff0c;法院宣判&#xff1a;死者杨某擅自闯入危险区域负全责&#xff0c;其父母要求铁路部门赔偿的诉请被驳回。事件还原201…

ARIMA模型的介绍

目录 ARIMA模型结构 随机游走模型(random walk) 举例&#xff1a; ARIMA模型的性质 小结 ARIMA模型结构 使用场合&#xff1a;差分平稳序列拟合 模型结构 则有&#xff1a; 随机游走模型(random walk) 模型结构&#xff1a; Karl Pearson(1905)在《自然》杂志上提问:假…

java斗地主游戏

使用java实现斗地主小游戏。 程序分析&#xff1a; 1、创建扑克牌的实体类Poker&#xff0c;设置四个参数&#xff1a;花色、数字、牌值&#xff08;判断大小&#xff09;、是否地主牌&#xff0c;实现getset方法和构造方法&#xff1b; 2、创建玩家的实体类Player&#xff0…

为什么总是封板又打开涨停_警惕!如果股票涨停板反复打开说明了什么?

股市禁忌“三进三出”&#xff1a;“三进”为&#xff1a;一是“高位进”&#xff0c;这就是我们常说的追涨。犯有这种错误的投资者&#xff0c;喜欢在股票已经有了很大的涨幅后买进&#xff0c;其买进的依据往往是股票已经放量突破了历史高点或突破了某个高点阻力位等&#xf…

动态背景登录

前端动态背景登录 效果演示 完整代码 首先我们要导入jquery.js包 html代码 <!doctype html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge,chrome1&qu…

ARIMA模型的建模和预测

目录 基本过程&#xff1a; 1.Green 函数递推公式 2.ARIMA模型的预测 例题 小结 基本过程&#xff1a; 1.Green 函数递推公式 ARIMA模型 也可写成 确定 设 则可得Green函数递推公式 2.ARIMA模型的预测 原则&#xff1a;最小均方误差预测原理 传递形式&#xff1a; 预测…

jsp论坛网站模版_网站被降权了?看看这些解决方法,或许有帮助哦

点击标题下「蓝色微信名」可快速关注在前面的文章中&#xff0c;笔者已经给大家介绍了网站被降权的因素。那么当遇到降权的问题该怎么办呢&#xff1f;接下来&#xff0c;笔者就结合本身经历过的网站降权来给大家介绍一下补救措施。1、造成网站首页降权的原因&#xff1a;服务器…

ARIMA模型之疏系数模型

目录 1.疏系数模型的定义 2.拟合ARIMA疏系数模型函数 例题&#xff1a; 小结 1.疏系数模型的定义 ARIMA(p,d,q)模型是指d阶差分后自相关最高阶数为p&#xff0c;移动平均最高阶数为q的模型&#xff0c;通常它包含pq个独立的未知系数: 如果该模型中部分自相关系数 ,1≤j<…

动画分享菜单

制作一个动画分享的菜单 效果演示 注意&#xff1a;在我们的程序开始之前我们一定要导入jquery.js架包并且找到如图所示的矢量图标。 完整代码 html代码 <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/…

java 双向链表_23张图!万字详解「链表」,从小白到大佬

链表和数组是数据类型中两个重要又常用地基础数据类型&#xff0c;数组是连续存储在内存中的数据结构&#xff0c;因此它的优势是可以通过下标迅速的找到元素的位置&#xff0c;而它的缺点则是在插入和删除元素时会导致大量元素的被迫移动&#xff0c;为了解决和平衡此问题于是…

有季节效应的非平稳序列分析之因素分解

目录 6.1 因素分解理论 6.2因素分解模型 6.2.1因素分解模型的选择 6.2.2趋势效应的提取 简单中心移动平均的良好属性 R语言中&#xff0c;使用filter函数可以做简单移动平均 6.2.3 季节效应的提取 6.2.4 X11季节调节模型 X11模型分析步骤&#xff1a; ​ 确定性…

指数平滑预测模型

目录 1.分类 2.简单指数平滑 简单指数平滑预测&#xff1a; 平滑系数的确定 R中实现&#xff1a; 3. Holt两参数指数平滑 4. Holt-Winters三参数指数平滑 5.ARIMA加法季节模型 R实现 例题&#xff1a; 1.分类 2.简单指数平滑 简单移动平均法向前预测1期&#xff1a; …