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. 准备工作硬件准备开发板首先…

Java查询图书信息

使用泛型集合来实现某图书管理系统的查询功能。 在图书管理系统中为了方便管理图书&#xff0c;将图书划分为几个类别。每个类别下有很多图书&#xff0c;每本图书都有相对应的类别&#xff0c;这就具备了一对多的关系映射&#xff0c;即一个类别对应多本图书。 在这种情况下…

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

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

python界面设计实例qt_pyqt的最小示例qtreeview和qt设计

我试图为qt设计器设计的应用程序获取一个最小的示例&#xff0c;其中pyqt涉及一个QTreeView 1&#xff09;我可以用这种方式启动应用程序&#xff0c;但是如果我按下按钮&#xff0c;TreeView小部件中没有显示任何条目&#xff0c;我没有收到任何错误消息&#xff0c;布局看起来…

TypeError: ufunc ‘multiply‘ did not contain a loop with signature matching types dtype(‘S32‘) dtype(

目录 错误&#xff1a; 解决&#xff1a; 错误&#xff1a; TypeError: ufunc multiply did not contain a loop with signature matching types dtype(S32) dtype(S32) dtype(S32) 翻译&#xff1a;TypeError: ufunc multiply 不包含签名匹配类型 dtype(S32) dtype(S32) d…

Java一对多关系示例

生活中常见一对多关系的例子&#xff0c;如一个学校可以包含多个学生&#xff0c;一个学生属于一个学校&#xff0c;那么这就是一个典型的一对多关系&#xff0c;可以通过集合进行关系的表示。 1 . 定义学生类 import java.util.HashSet; import java.util.Iterator;public c…

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

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

Python: ufunc ‘bitwise_xor‘ not supported for the input types,....

错误&#xff1a; ufunc bitwise_xor not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule safe 原因&#xff1a; 错误使用 ^ 解决&#xff1a; 将使用的 ^ 全部改为 ** &#xff0c…

https open api_Web上的分享(Share)API

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

Java多对多关系示例

使用集合不仅可以表示一对一的关系&#xff0c;也可以表示多对多的关系。例如&#xff0c;一个学生可以选多门课程&#xff0c;一门课程可以有多个学生参加&#xff0c;那么这就是一个典型的多对多关系。 要完成上面要求&#xff0c;首先应该定义两个类&#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…

python中表示空类型的是_python中怎么表示空值

首先了解python对象的概念 python中&#xff0c;万物皆对象&#xff0c;所有的操作都是针对对象的。 那什么是对象&#xff1f;5是一个int对象&#xff0c;‘oblong是一个str对象&#xff0c;异常也是一个对象&#xff0c;抽象一点是&#xff0c;人&#xff0c;猫&#xff0c;够…

动态背景登录

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