逻辑回归模型的简介及python代码实现

news2024/12/23 1:28:48

文章目录

  • 1 逻辑回归简介
    • 1.1 回归步骤
    • 1.2 逻辑回归与多重线性回归
  • 2 逻辑回归模型算法原理
    • 2.1 逻辑回归模型的数学原理
    • 2.2 逻辑回归模型的代码实现
    • 2.3 逻辑回归模型的深入理解
    • 2.4 多分类逻辑回归模型演示
  • 总结

1 逻辑回归简介

逻辑回归是分类当中极为常用的手段,它属于概率型非线性回归,分为二分类和多分类的回归模型。对于二分类的logistic回归,因变量y只有“是”和“否”两个取值,记为1和0。假设在自变量x1,x2,……,xp,作用下,y取“是”的概率是p,则取“否”的概率是1-p

1.1 回归步骤

  1. 面对一个回归或者分类问题,建立代价函数
  2. 通过优化方法迭代求解出最优的模型参数
  3. 测试验证我们这个求解的模型的好坏

1.2 逻辑回归与多重线性回归

Logistic回归与多重线性回归实际上有很多相同之处,最大的区别就在于它们的因变量不同,其他的基本都差不多。正是因为如此,这两种回归可以归于同一个家族,即广义线性模型(generalizedlinear model)。这一家族中的模型形式基本上都差不多,不同的就是因变量不同。这一家族中的模型形式基本上都差不多,不同的就是因变量不同。

  • 如果是连续的,就是多重线性回归
  • 如果是二项分布,就是Logistic回归
  • 如果是Poisson分布,就是Poisson回归
  • 如果是负二项分布,就是负二项回归

2 逻辑回归模型算法原理

2.1 逻辑回归模型的数学原理

# 补充知识点:Sigmoid函数绘制
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-6, 6)  # 通过linspace()函数生成-6到6的等差数列,默认50个数
y = 1.0 / (1.0 + np.exp(-x))  # Sigmoid函数计算公式,exp()函数表示指数函数

plt.plot(x,y)  # 画图
plt.show()  # 展示

在这里插入图片描述

# 演示下linespace()函数
import numpy as np
x = np.linspace(-6, 6)
x
array([-6.        , -5.75510204, -5.51020408, -5.26530612, -5.02040816,
       -4.7755102 , -4.53061224, -4.28571429, -4.04081633, -3.79591837,
       -3.55102041, -3.30612245, -3.06122449, -2.81632653, -2.57142857,
       -2.32653061, -2.08163265, -1.83673469, -1.59183673, -1.34693878,
       -1.10204082, -0.85714286, -0.6122449 , -0.36734694, -0.12244898,
        0.12244898,  0.36734694,  0.6122449 ,  0.85714286,  1.10204082,
        1.34693878,  1.59183673,  1.83673469,  2.08163265,  2.32653061,
        2.57142857,  2.81632653,  3.06122449,  3.30612245,  3.55102041,
        3.79591837,  4.04081633,  4.28571429,  4.53061224,  4.7755102 ,
        5.02040816,  5.26530612,  5.51020408,  5.75510204,  6.        ])
# 演示下np.exp()函数
x = -1 
np.exp(-x)
2.718281828459045

2.2 逻辑回归模型的代码实现

# 构造数据
X = [[1, 0], [5, 1], [6, 4], [4, 2], [3, 2]]
y = [0, 1, 1, 0, 0]

# 模型训练
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, y)  # 如果运行时下面出现FutureWarning警告,不要在意,它只是在告诉你以后模型的官方默认参数会有所调整而已,不是报错
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='auto', n_jobs=None, penalty='l2',
                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
                   warm_start=False)
# 如果不想看到FutureWarning这样的警告信息,可以在代码最上面加上如下内容
import warnings
warnings.filterwarnings('ignore')
# 模型预测 - 预测单个数据
print(model.predict([[2,2]]))
[0]
# 模型预测 - 预测多个数据1
print(model.predict([[1,1], [2,2], [5, 5]]))
[0 0 1]
# 模型预测 - 预测多个数据2
print(model.predict([[1, 0], [5, 1], [6, 4], [4, 2], [3, 2]]))  # 因为这里演示的多个数据和X是一样的,所以也可以直接写成model.predict(X)
[0 1 1 0 0]

可以看到其预测准确度为100%。

2.3 逻辑回归模型的深入理解

# 预测概率:左列是分类为0的概率,右列是分类为1的概率
y_pred_proba = model.predict_proba(X)
y_pred_proba  # 直接打印
array([[0.97344854, 0.02655146],
       [0.39071972, 0.60928028],
       [0.17991028, 0.82008972],
       [0.63167893, 0.36832107],
       [0.82424527, 0.17575473]])
# 另外一种打印概率的方式:通过DataFrame展示,更加好看些
import pandas as pd
a = pd.DataFrame(y_pred_proba, columns=['分类为0的概率', '分类为1的概率'])  # 2.2.1 通过numpy数组创建DataFrame
a
分类为0的概率分类为1的概率
00.9734490.026551
10.3907200.609280
20.1799100.820090
30.6316790.368321
40.8242450.175755
# 打印系数和截距项
print(model.coef_)  # 系数k1与k2
print(model.intercept_)  # 截距项k0
[[1.00595248 0.02223835]]
[-4.60771284]
model.coef_.T
array([[1.00595248],
       [0.02223835]])
# 如果想批量查看预测概率
import numpy as np
for i in range(5):  # 这里共有5条数据,所以循环5次
    print(1 / (1 + np.exp(-(np.dot(X[i], model.coef_.T) + model.intercept_))))
[0.02655146]
[0.60928028]
[0.82008972]
[0.36832107]
[0.17575473]

2.4 多分类逻辑回归模型演示

# 构造数据,此时y有多个分类
X = [[1, 0], [5, 1], [6, 4], [4, 2], [3, 2]]
y = [-1, 0, 1, 1, 1]  # 这里有三个分类-1、0、1

# 模型训练
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, y)  # 如果运行时下面出现FutureWarning警告,不要在意,它只是在告诉你以后模型的官方默认参数会有所调整而已,不是报错
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='auto', n_jobs=None, penalty='l2',
                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
                   warm_start=False)
print(model.predict([[0, 0]]))
[-1]
model.predict(X)
array([-1,  0,  1,  1,  1])
print(model.predict_proba([[0, 0]]))
[[0.88352311 0.02340026 0.09307662]]

总结

Logistic回归虽然名字里带“回归”,但它实际上是一种分类方法,主要用于二分类问题(即输出只有两种,分别代表两个类别),也可以处理多分类问题。


https://blog.csdn.net/Annaaphq/article/details/126260599
https://blog.csdn.net/qq_42433311/article/details/124124893

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

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

相关文章

(六)关于Linux中服务器磁盘爆满问题的几个解决方案

文章目录 一、现象二、现象产生的原因三、问题的定位过程1.检查业务文件存放位置是否合理2.检查服务器系统盘空间是否分配过小3.对服务器磁盘占用情况进行分析4.若以上方案都解决不了内存占用过高问题,则考虑是否是服务器中存在其他容器产生了一些文件,比…

【使用Hystrix实现服务容错和熔断】—— 每天一点小知识

💧 使用 H y s t r i x 实现服务容错和熔断 \color{#FF1493}{使用Hystrix实现服务容错和熔断} 使用Hystrix实现服务容错和熔断💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客&#x1f390…

进程、线程、协程?go中的协程原理详解 - 协程是什么?为什么要有协程?

1. 为什么要有协程? 我们使用工厂来表示计算机,而内存空间就相当于工厂的地皮,那么我们可以认为进程就是工厂中的厂房,它占据了工厂的地皮。(进程是分配资源的最小单位) 线程是什么呢?我们继续…

电商运营个人简历范文

电商运营个人简历篇1 个人信息 某某x 性 别: 男 婚姻状况: 已婚 出生年月: 1981年1月 民 族: 汉族 身 高: 175cm 最高学历: 大专 体 重: 70公斤 计算机能力: 高级程序员 技术职称&am…

MySQL的IF(exp1, exp2, exp3)、IFNULL(exp1, exp2)、ISNULL(exp)函数的用法

本章主要是讲解一下mysql的常用方法if()和ifnull()的使用 1、ISNULL(exp) 该函数的作用是判断表达式exp是否为null,如果是null,则返回1,否则返回0 案例代码:以上两条语句的查询结果为分别为1和0 select ISNULL(null) from dual…

管理类联考——逻辑——技巧篇——形式逻辑——考官出题套路

文章目录 考官出题套路一:代入逻辑推命题真假1. 考官出题套路特征:2. 核心考点: 考官出题套路二:判断逻辑真假1. 考点概述:2. 快速秒杀选项技巧: 考官出题套路三:推矛盾和“两难推理”1. 考点概…

一句话木马(绝对入门,实战环境安装+测试)主要是记录我的第一次一句话木马过程,复现40分钟左右。

首先介绍一下,搭建在本地的靶场,可以做渗透和注入的测试,真是好东西。 安装教程我推荐一篇博客,真的写的很好,我全程坐下来非常流畅非常流畅,csdn少见的高质量博客 DVWA下载安装_PisaYu的博客-CSDN博客 膜…

MFC第五天 Unicode软件开发 MFC框架构成与封装类原理

文章目录 Unicode软件开发以Unicode为字符集的记事本软件开发 MFC框架构成与封装类原理示例代码如下: Unicode软件开发 Unicode软件开发时需要遵循以下规则:使用中可尽量使用自适应版本。 Unicode软件开发: a)微软的软件工程现在默认使用Uni…

【MYSQL篇】mysql中相关锁和MVCC详解

文章目录 前言MVCC1、第一个事务2、第二个事务3、第三个事务4、第四个事务5、第五个事务 InnoDB 常见的几种锁机制共享锁排它锁意向锁记录锁间隙锁临键锁 小结 前言 数据库的锁是在多线程高并发的情况下用来保证数据稳定性和一致性的一种机制。MySQL 根据底层存储引擎的不同&a…

OpenGL

需要继承的两个类 #include <QOpenGLWidget> #include <QOpenGLFunctions_3_3_Core> class OpenGLWidget : public QOpenGLWidget,public QOpenGLFunctions_3_3_Core { Q_OBJECT public: explicit OpenGLWidget(QWidget *parent nullptr); virtual vo…

如何看待调查称半数年轻人存款不足10万?

文章目录 一、目前的存款在哪一个区间&#xff1f;你觉得存款难吗&#xff1f;2.1 自己的状态2.2 对理财的看法和态度 二、谈谈我为存款做出过哪些努力&#xff1f;三、除了个人因素外&#xff0c;有哪些因素影响到了年轻人的存款能力和存款意愿&#xff1f;四、要攒够多少存款…

【数据库原理与实践】CS系的实验期末考题(20222023)

2022&#xff1a; 学校管理数据库涉及四个关联表结构&#xff1a; 学生表 Student(Sno,Sname,Sdate,Ssex) &#xff0c;其中Sno学生编号&#xff0c;Sname学生姓名&#xff0c;Sdate出生年月&#xff0c;Ssex学生性别 。 课程表 Course(Cno,Cname,Tno) &#xff0c;其中Cno课…

(写自己语言的练手级应用)JSON(JavaScript Object Notation) 产生式(BNF)

写自己的开发语言时&#xff0c;很多人都会拿JSON当第一个练习对象 开源net json FJSON 解析工具https://dbrwe.blog.csdn.net/article/details/107611540?spm1001.2014.3001.5502 <json> :: <object> | <array> <object> :: "{" [ <me…

【OJ比赛日历】快周末了,不来一场比赛吗? #06.23-06.29 #13场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-06-23&#xff08;周五&#xff09; #5场比赛2023-06-24…

k8s中如何修改pod中mysql的连接数

(方法一) 临时更改设置最大连接数据&#xff08;建议先临时修改&#xff0c;项目没有问题之后再进行永久修改&#xff09; 使用Navicat连接上数据库&#xff0c;点击连接名——点击新建查询—— 查看最大连接数 show variables like ‘’%max_connections%‘’; 查看当前用户使…

vue中注册组件的两种方式(全局注册 局部注册)

vue 是一个完全支持组件化开发的框架&#xff0c; 组件之间可以进行相互的引用。vue 中组件的引用原则&#xff1a;先注册后使用。 1. 组件的注册 组件之间可以进行相互的引用&#xff0c;例如&#xff1a; 注册组件的的方式&#xff1a;分为“全局注册”和“局部注册”两种…

Git Bash 上传本地文件到Gitee(AI助力解决问题)

前言 消失了将近一个月&#xff0c;预祝大家端午节快乐&#xff01; 这篇文章主要介绍下在上传本地项目到gitee时出现的问题&#xff0c;以及借助AI解决问题。 Gitee是一个基于 Git 的代码托管和开发协作平台&#xff0c;它提供了代码仓库、代码审查、持续集成/持续部署 (CI/C…

开关电源——DCDC变换器设计

开关电源——DCDC变换器设计 对于DCDC变换器来说&#xff0c;最重要的部分也是唯一一个磁学元件——电感需要考虑。 直流传递函数 正如之前我们所说&#xff0c;电感电流在开关导通的时候增加的电流必须等于在开关关断时候的减少的电流&#xff0c;即在一个工作周期中不积累…

支付宝性能测试案例分析

双11过程当中&#xff0c;促销开启的第一分钟内支付宝的交易总额就突破了一亿元&#xff0c;短时间内大量用户涌入的情况下&#xff0c;如何保证用户的支付顺畅&#xff0c;是对支付宝应用系统的一个极大的挑战。 一、性能测试支付宝场景介绍 双11过程当中&#xff0c;促销开启…