机器学习算法 - 逻辑回归

news2024/11/25 16:20:45

逻辑回归是一种广泛应用于统计学和机器学习领域的回归分析方法,主要用于处理二分类问题。它的目的是找到一个最佳拟合模型来预测一个事件的发生概率。以下是逻辑回归的一些核心要点:

基本概念

  • 输出:逻辑回归模型的输出是一个介于0和1之间的概率值,通常表示为 P(Y=1|X),即在给定自变量 X 的条件下,因变量 Y 等于1的概率。
  • 函数形式:逻辑回归通常使用 Sigmoid 函数(或逻辑函数)作为其链接函数,将线性回归模型的输出映射到0和1之间。Sigmoid 函数的数学表达式为: σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1 其中 z 是模型的线性部分,即 z = β 0 + β 1 x 1 + β 2 x 2 + … + β n x n z = \beta_0 + \beta_1x_1 + \beta_2x_2 + \ldots + \beta_nx_n z=β0+β1x1+β2x2++βnxn
  • 估计方法:逻辑回归的参数估计通常通过最大似然估计(MLE)方法完成。最大似然估计是寻找一组参数,使得观测到的样本数据出现的概率最大。

损失函数

在逻辑回归中使用的对数损失函数(交叉熵损失)定义如下:

L ( y , p ) = − 1 N ∑ i = 1 N [ y i log ⁡ ( p i ) + ( 1 − y i ) log ⁡ ( 1 − p i ) ] L(y, p) = -\frac{1}{N} \sum_{i=1}^{N} \left[y_i \log(p_i) + (1 - y_i) \log(1 - p_i)\right] L(y,p)=N1i=1N[yilog(pi)+(1yi)log(1pi)]

优化算法

梯度下降法

梯度下降法通过迭代减少损失函数的方式来更新模型的参数。参数更新的公式如下:

θ n e w = θ o l d − α ∇ θ L ( θ ) \theta_{new} = \theta_{old} - \alpha \nabla_\theta L(\theta) θnew=θoldαθL(θ)

在这里插入图片描述

牛顿法

牛顿法利用损失函数的二阶导数(海森矩阵)来更新参数,更新公式为:

θ n e w = θ o l d − H − 1 ∇ θ L ( θ ) \theta_{new} = \theta_{old} - H^{-1} \nabla_\theta L(\theta) θnew=θoldH1θL(θ)

拟牛顿法(例如BFGS)

拟牛顿法不直接计算海森矩阵,而是使用其近似值来更新参数,更新公式为:

θ n e w = θ o l d − B − 1 ∇ θ L ( θ ) \theta_{new} = \theta_{old} - B^{-1} \nabla_\theta L(\theta) θnew=θoldB1θL(θ)

在这里插入图片描述

模型评估

模型的评估主要通过以下几个指标:

  • 准确率(Accuracy):
    Accuracy = Number of Correct Predictions Total Number of Predictions \text{Accuracy} = \frac{\text{Number of Correct Predictions}}{\text{Total Number of Predictions}} Accuracy=Total Number of PredictionsNumber of Correct Predictions

  • 精确率(Precision):
    Precision = True Positives True Positives + False Positives \text{Precision} = \frac{\text{True Positives}}{\text{True Positives + False Positives}} Precision=True Positives + False PositivesTrue Positives

  • 召回率(Recall):
    Recall = True Positives True Positives + False Negatives \text{Recall} = \frac{\text{True Positives}}{\text{True Positives + False Negatives}} Recall=True Positives + False NegativesTrue Positives

  • F1 分数
    F1 Score = 2 × Precision × Recall Precision + Recall \text{F1 Score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} F1 Score=2×Precision+RecallPrecision×Recall

ROC 曲线(Receiver Operating Characteristic curve)和 AUC 分数(Area Under the Curve)是评估二分类模型性能的重要工具。这些工具特别有用于评估模型在不同分类阈值下的性能。以下是ROC曲线和AUC分数的详细解释:

ROC 曲线

ROC曲线是一个图形工具,用于显示在各种阈值设置下,分类模型识别出类别的能力。ROC曲线的X轴是假正率(False Positive Rate, FPR),Y轴是真正率(True Positive Rate, TPR)。这两个比率定义如下:

  • 真正率 (TPR):也称为敏感性,计算公式为真正例(True Positives, TP)除以所有实际正例的数量(TP 加上假负例,False Negatives, FN):
    [
    TPR = \frac{TP}{TP + FN}
    ]

  • 假正率 (FPR):计算公式为假正例(False Positives, FP)除以所有实际负例的数量(FP 加上真负例,True Negatives, TN):
    [
    FPR = \frac{FP}{FP + TN}
    ]

在绘制ROC曲线时,通过改变分类的阈值(如概率阈值),系统会产生一系列不同的TPR和FPR值,从而形成一条曲线。

AUC 分数

AUC分数是ROC曲线下的面积,这个值介于0和1之间。AUC值提供了一个量化模型在区分两个类别的能力的单一数值。AUC值的解释如下:

  • AUC = 1:表示模型有完美的区分能力,能完全区分正类和负类。
  • AUC = 0.5:表示模型没有区分能力,其性能相当于随机猜测。
  • AUC < 0.5:表示模型表现还不如随机猜测,这在实际应用中通常意味着模型或数据处理有严重问题。
为何使用ROC和AUC
  • 不依赖特定阈值:ROC曲线考虑了所有可能的分类阈值,所以它可以展示出模型在所有情况下的综合性能。
  • 不平衡数据的评估:对于数据集类别极不平衡的情况,比如一个类的样本量远大于另一个类,ROC曲线和AUC分数仍然是有效的评估指标。

总的来说,ROC曲线和AUC分数是衡量和比较不同模型在二分类问题上性能的强大工具,特别是在处理具有不同分类阈值或不平衡数据集的场景中。这些工具帮助研究人员和开发者选择最佳模型,优化模型设置,以达到更高的分类性能。

应用和局限

  • 应用:逻辑回归被广泛应用于医疗、金融、社会科学和市场营销等领域。例如,在信用评分、疾病诊断和客户流失预测中,逻辑回归模型能够基于历史数据预测个体事件的发生概率。
  • 局限性:虽然逻辑回归在处理二分类问题上表现优秀,但它假设数据特征与对数几率是线性关系,并且对多分类问题处理较为复杂。此外,当特征空间中存在多重共线性时,模型的性能可能会受到影响。

逻辑回归案例

下面是一个使用 Python 中的 scikit-learn 库实现逻辑回归模型的简单例子。这个例子将涵盖数据加载、模型训练、预测以及性能评估。我们将使用经典的鸢尾花数据集(Iris dataset),这是一个多分类问题,但为了适用于逻辑回归,我们将其简化为二分类问题(区分鸢尾花的一个种类与其他种类)。

1. 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, auc
2. 加载和准备数据
# 加载数据
data = load_iris()
X = data.data
y = data.target

# 将问题简化为二分类问题
y = (y == 2).astype(np.int)  # 选择一种类别(比如类别2)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
3. 创建和训练逻辑回归模型
# 创建逻辑回归模型实例
model = LogisticRegression()

# 训练模型
model.fit(X_train, y_train)
4. 进行预测和评估
# 预测测试集
y_pred_prob = model.predict_proba(X_test)[:, 1]  # 获取正类的预测概率

# 计算 ROC 曲线和 AUC 分数
fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
roc_auc = auc(fpr, tpr)

# 绘制 ROC 曲线
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()
总结

在这个例子中,我们首先导入了必要的库,然后加载了鸢尾花数据集,并将其简化为一个二分类问题。接下来,我们创建了一个逻辑回归模型,并用训练数据对其进行了训练。最后,我们对测试数据进行了预测,并通过绘制 ROC 曲线和计算 AUC 分数来评估模型的性能。这个例子展示了如何在 Python 中简单快速地实现和评估逻辑回归模型。

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

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

相关文章

容器化Jenkins远程发布java应用(方式二:自定义镜像仓库远程拉取构建)

1.创建maven项目 2.配置git、maven 3.阿里控制台>容器镜像服务>镜像仓库>创建镜像仓库 4.执行shell脚本&#xff08;推送镜像到阿里云镜像仓库&#xff09; 使用到登录阿里云仓库命令 #!/bin/bash # 服务名称 SERVER_NAMEplanetflix-app # 镜像tag IMAGE_TAG1.0.0-SN…

每日两题 / 24. 两两交换链表中的节点 25. K 个一组翻转链表(LeetCode热题100)

24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 定义三个指针&#xff0c;交换前先保存ntnt指针为next->next&#xff0c;cur和next两个节点&#xff0c;然后将pre->next指向next 若pre为空&#xff0c;说明当前交换的节点为头两个节点&#xff0c;…

网络相关笔记

IPv4地址 IPv4地址通常以“点分十进制”形式书写&#xff0c;即四个0-255之间的十进制数&#xff0c;各数之间用英文句点&#xff08;.&#xff09;分隔&#xff0c;例如&#xff1a;192.0.2.1。总共32位的地址空间可以表示大约42亿个不同的地址。 IPv4地址结构包括&#xff…

金石传拓非遗研学基地 入驻蔚蓝书店

好消息&#xff01;&#xff01;&#xff01; 金石传拓非遗研学基地&#xff0c;正式入驻蔚蓝书店啦&#xff01;&#xff01;&#xff01; “缣竹易销&#xff0c;金石难灭&#xff0c;托以高山&#xff0c;永留不绝。”“金”指的是三代青铜器上的铭文。 “石”指的是石刻、…

PCIE协议-2-事务层规范---事务描述符

2.2.6.1 概览 事务描述符是请求者和完成器之间传输事务信息的机制。事务描述符由三个字段组成&#xff1a; 事务ID&#xff1a;标识未完成的事务属性字段&#xff1a;定义事务的特征流量类别&#xff08;TC&#xff09;字段&#xff1a;将事务与所需的服务类型关联起来 图2-…

PG的事务ID回卷逻辑

PG到目前为止使用的事务ID仍然是32位的&#xff0c;在内存计算时虽然已经使用64位事务ID&#xff0c;但是存储在页中tuple仍然使用32位事务ID&#xff0c;这就是说&#xff0c;事务ID回卷仍然是必须处理的问题。 所谓PG事务ID回卷&#xff0c;简单地说&#xff0c;就是在数据库…

LIN协议栈代码解读,纯干货

LIN协议栈概述 当前用的比较多的LIN协议栈&#xff0c;如果不是VECTOR平台的&#xff0c;那就是NXP的LIN协议栈。NXP的协议栈又分为两套&#xff0c;一套是独立工具生成配置文件&#xff0c;即STACK_Package_4.5.9&#xff0c;通过NCFGui生成配置文件&#xff0c;主要用在MC9S…

python数据分析——数据预处理

数据预处理 前言一、查看数据数据表的基本信息查看info&#xff08;&#xff09;示例 查看数据表的大小shape&#xff08;&#xff09;示例 数据格式的查看type()dtype&#xff08;&#xff09;dtypes&#xff08;&#xff09;示例一示例二 查看具体的数据分布describe()示例 二…

【matlab基础知识代码】(十六)代数方程的图解法多项式型方程的准解析解方法

>> ezplot(exp(-3*t)*sin(4*t2)4*exp(-0.5*t)*cos(2*t)-0.5,[0 5]), line([0 5],[0 0]) 验证 >> t0.6738; >> exp(-3*t)*sin(4*t2)4*exp(-0.5*t)*cos(2*t)-0.5 ans -2.9852e-04 >> ezplot(x^2*exp(-x*y^2/2)exp(-x/2)*sin(x*y)) >> hold on; …

Java数组(如果想知道Java中有关数组的知识点,那么只看这一篇就足够了!)

前言&#xff1a;数组对于每一门编程语言来说都是重要的数据结构之一&#xff0c;当然不同语言对数组的实现及处理也不尽相同,Java 语言中提供的数组是用来存储固定大小的同类型元素。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSD…

MOSFET数据手册你会看了吗?

目录 一、功率损耗Power dissipation ​编辑二、结温Junction temperature 三、热阻Thermal resistance 四、寄生电容Cisis/Coss/Crss 五、开关时间 Time 一、功率损耗Power dissipation 功率损耗主要分为两类&#xff1a;静态损耗和动态损耗。静态损耗主要由器件的导通电…

wordpress忘记后台密码,在数据库中修改回来,然后再修改回去。

源地址&#xff1a;https://www.ctvol.com/seoomethods/1421332.html 我们在做wordpess运维的时候&#xff0c;都会遇到很尴尬的时候&#xff0c;有时候在错误运维中&#xff0c;不知道删除了什么东西&#xff0c;造成wordpress后台不能登录&#xff0c;后台页面也直接失效&am…

【Web后端】web后端开发简介_Servlet简介

1.web后端开发简介 Java企业级开发&#xff0c;也就是学习]avaEE(Enterprise Edition)版本,是一种结构和一套标准。在应用中开发的标准就是Servlet、jsp和JavaBean技术。jsp技术现在已基本处于淘汰状态&#xff0c;简单了解即可web后端开发&#xff0c;基于B/S模式的开发体系。…

日本站群服务器提升网站用户体验的选择

日本站群服务器提升网站用户体验的选择 在当今数字化时代&#xff0c;网站的性能和用户体验对于在线业务的成功至关重要。为了确保网站能够提供快速、可靠和高效的访问体验&#xff0c;越来越多的网站管理员和企业选择了使用站群服务器。本文将深入探讨日本站群服务器的独特优…

CogVLM 本地部署体验(问题解决)

硬件要求&#xff08;模型推理&#xff09;&#xff1a; INT4 &#xff1a; RTX30901&#xff0c;显存24GB&#xff0c;内存32GB&#xff0c;系统盘200GB INT4 &#xff1a; RTX40901或RTX3090*2&#xff0c;显存24GB&#xff0c;内存32GB&#xff0c;系统盘200GB 模型微调硬件…

在k8s中部署Prometheus并实现对k8s集群的监控

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Prometheus&#xff1a;监控的神》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、k8s简介 2、 Prometheus概述 二、准备k8s环境 1、…

游戏新手村24:游戏数据分析的思路及方法

在手机游戏和友盟统计、百度统计诞生之前&#xff0c;很多的游戏公司都是团队自己开发相关的数据统计平台&#xff0c;设定不同的角色和权限&#xff0c;满足业务部门同事的需要&#xff0c;为运营决策提供支持和依据。 近两年手机游戏和移动APP兴起&#xff0c;友盟统计和百度…

Java自动化测试框架--TestNG详解

一. 什么是TestNG TestNG是一个开源的自动化测试框架&#xff0c;它受JUnit和NUnit启发&#xff0c;其中“NG”即表示Next Generation&#xff0c;其功能更强大使用更方便。 二. TestNG配置 2.1 POM文件配置 在maven工程的pom.xml文件中加入以下依赖&#xff1a; <depe…

C语言-设置控制台信息

Win_API Win_API是Windows应用程序接口&#xff08;Windows Application Programming Interface&#xff09;的缩写&#xff0c;它是一组函数、系统服务和程序接口&#xff0c;允许开发者在微软Windows操作系统上创建应用程序。Win32 API 是Windows API的一个主要部分&#xff…

【题解】非对称之美(规律)

https://ac.nowcoder.com/acm/problem/214851 #include <iostream> #include <string> using namespace std; string s; int n; int fun() {// 1. 判断是否全都是相同字符bool flag false;for (int i 1; i < n; i) {if (s[i] ! s[0]){flag true;break;}}if…