机器学习-逻辑回归

一、引言

逻辑回归(Logistic Regression)是一种广泛应用于分类问题的监督学习算法。尽管名字中含有“回归”二字,但这并不意味着它用于解决回归问题。相反,逻辑回归专注于解决二元或多元分类问题,如邮件是垃圾邮件还是非垃圾邮件,一个交易是欺诈还是合法等。

逻辑回归源于统计学,旨在模拟一个因变量和一个或多个自变量之间的关系。与线性回归不同,逻辑回归并不直接预测数值,而是估计样本属于某一类别的概率。这通常通过Sigmoid函数(或对数几率函数)来实现,该函数能够将任何实数映射到0和1之间。

为了理解这种概率模型的重要性,我们可以考虑一下现代应用的复杂性。从金融风险评估、医疗诊断,到自然语言处理和图像识别,逻辑回归都找到了广泛的应用。它之所以受欢迎,一方面是因为其模型简单,易于理解和解释;另一方面是因为它在处理大量特征或者处理非线性关系时也具有很高的灵活性。

逻辑回归的算法实现通常基于最大似然估计(Maximum Likelihood Estimation, MLE),这是一种针对模型参数进行估计的优化算法。通过优化损失函数,算法试图找到最有可能解释观测数据的模型参数。

虽然逻辑回归在许多方面都很优秀,但它也有其局限性。例如,它假定因变量和自变量之间存在线性关系,这在某些复杂场景下可能不成立。然而,通过特征工程和正则化等手段,这些问题往往可以得到缓解。

总体而言,逻辑回归是机器学习领域中不可或缺的工具,其背后的数学原理和实际应用都值得深入研究。通过本文,我们将深入探讨逻辑回归的各个方面,以期提供一个全面、深入且易于理解的视角。


二、逻辑回归基础

file

逻辑回归是一种针对分类问题的监督学习模型。它起源于统计学,尤其是当我们希望预测一个二元输出时,逻辑回归成为一个非常实用的工具。

从线性回归到逻辑回归

逻辑回归的思想是基于线性回归的,但有几个关键的不同点。在线性回归中,我们试图拟合一个线性方程来预测一个连续的输出值。然而,在逻辑回归中,我们不是直接预测输出值,而是预测输出值属于某一特定类别的概率。

举例:医学检测

假设我们有一个用于检测某种疾病(如糖尿病)的医学测试。在这种情况下,线性回归可能会预测一个人患疾病的程度或严重性。但逻辑回归更进一步:它会预测一个人患疾病的概率,并根据这个概率进行分类——例如,概率大于0.5则判断为阳性。

Sigmoid 函数

逻辑回归中最关键的组成部分是 Sigmoid(或称为 logistic)函数。这个函数接受任何实数作为输入,并将其映射到0和1之间,使其可以解释为概率。

file

举例:考试成绩与录取概率

考虑一个学生根据其考试成绩被大学录取的例子。线性回归可能会直接预测录取概率,但数值可能会超过[0,1]的范围。通过使用 Sigmoid 函数,我们可以确保预测值始终在合适的范围内。

损失函数

在逻辑回归中,最常用的损失函数是交叉熵损失(Cross-Entropy Loss)。该损失函数度量模型预测的概率分布与真实概率分布之间的差距。

file

举例:垃圾邮件分类

假设我们正在构建一个垃圾邮件过滤器。对于每封邮件,模型会预测这封邮件是垃圾邮件的概率。如果一封实际上是垃圾邮件(y=1)的邮件被预测为非垃圾邮件(yhat约等于0),损失函数的值会非常高,反之亦然。

优点与局限性

优点

  1. 解释性强:逻辑回归模型易于理解和解释。
  2. 计算效率:模型简单,训练和预测速度快。
  3. 概率输出:提供预测类别的概率,增加了解释性。

局限性

  1. 线性边界:逻辑回归假设数据是线性可分的,这在某些复杂场景下可能不成立。
  2. 特征选择:逻辑回归对于不相关的特征和特征之间的相互作用比较敏感。

通过这个章节,我们可以看到逻辑回归在简洁性和解释性方面有着显著的优点,但同时也存在一定的局限性。


三、数学原理

file


理解逻辑回归背后的数学原理是掌握这一算法的关键。这部分将深入解析逻辑回归的数学结构,包括概率模型、损失函数优化和特征选择。

概率模型

file

举例:信用卡交易

想象你正在开发一个用于检测信用卡欺诈交易的模型。在这种情况下,(X) 可能包括交易金额、地点、时间等特征,模型会输出这笔交易是欺诈交易的概率。

损失函数与最大似然估计

最常用于逻辑回归的损失函数是交叉熵损失。这其实是最大似然估计(MLE)在逻辑回归中的具体应用。

file

举例:电子邮件分类

假设你正在构建一个电子邮件分类器来区分垃圾邮件和正常邮件。使用交叉熵损失函数,你可以通过最大化似然函数来“教”模型如何更准确地进行分类。

梯度下降优化

file

举例:股票价格预测

虽然逻辑回归通常不用于回归问题,但梯度下降的优化算法在很多其他类型的问题中也是通用的。例如,在预测股票价格时,同样可以使用梯度下降来优化模型参数。

特征选择与正则化

特征选择在逻辑回归中非常重要,因为不相关或冗余的特征可能会导致模型性能下降。正则化是一种用于防止过拟合的技术,常见的正则化方法包括 L1 正则化和 L2 正则化。

file

举例:房价预测

在房价预测模型中,可能有很多相关和不相关的特征,如面积、地段、周围学校数量等。通过使用正则化,你可以确保模型在拟合这些特征时不会过于复杂,从而提高模型的泛化能力。

通过本章的讨论,我们不仅深入了解了逻辑回归的数学基础,还通过具体的例子和应用场景,让这些看似复杂的数学概念更加贴近实际,易于理解。这有助于我们在实际应用中更加灵活地使用逻辑回归,以解决各种分类问题。


四、实战案例

file


实战是学习逻辑回归的最佳方式。在这一部分,我们将使用Python和PyTorch库来实现一个完整的逻辑回归模型。我们将使用经典的鸢尾花(Iris)数据集,该数据集包括四个特征:萼片长度、萼片宽度、花瓣长度、花瓣宽度,以及一个标签,用于区分三种不同类型的鸢尾花。

数据准备

首先,我们需要加载和准备数据。

# 导入所需库
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据
iris = load_iris()
X, y = iris.data, iris.target# 由于逻辑回归是二分类模型,我们只取其中两类数据
X, y = X[y != 2], y[y != 2]# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 转换为PyTorch张量
X_train = torch.FloatTensor(X_train)
X_test = torch.FloatTensor(X_test)
y_train = torch.LongTensor(y_train)
y_test = torch.LongTensor(y_test)

模型构建

接下来,我们定义逻辑回归模型。

class LogisticRegression(nn.Module):def __init__(self, input_dim):super(LogisticRegression, self).__init__()self.linear = nn.Linear(input_dim, 1)self.sigmoid = nn.Sigmoid()def forward(self, x):return self.sigmoid(self.linear(x))

模型训练

现在我们可以开始训练模型。

# 初始化模型、损失函数和优化器
model = LogisticRegression(X_train.shape[1])
criterion = nn.BCELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)# 训练模型
for epoch in range(1000):model.train()optimizer.zero_grad()# 前向传播outputs = model(X_train).squeeze()loss = criterion(outputs, y_train.float())# 反向传播和优化loss.backward()optimizer.step()if (epoch + 1) % 100 == 0:print(f'Epoch [{epoch+1}/1000], Loss: {loss.item()}')

模型评估

最后,我们用测试集来评估模型的性能。

# 测试模型
model.eval()
with torch.no_grad():test_outputs = model(X_test).squeeze()test_outputs = (test_outputs > 0.5).long()accuracy = (test_outputs == y_test).float().mean()print(f'Accuracy: {accuracy.item()}')

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

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

相关文章

vue2+typescript使用高德地图2.0版本

高德地图 webjs api 2.0官网教程 AMap.Driving使用说明 <div class"mmp"><div id"map" ref"mapcontainer"></div></div><script lang"ts"> //安全密钥 window._AMapSecurityConfig{securityJsCode: &qu…

ExoPlayer架构详解与源码分析(10)——H264Reader

系列文章目录 ExoPlayer架构详解与源码分析&#xff08;1&#xff09;——前言 ExoPlayer架构详解与源码分析&#xff08;2&#xff09;——Player ExoPlayer架构详解与源码分析&#xff08;3&#xff09;——Timeline ExoPlayer架构详解与源码分析&#xff08;4&#xff09;—…

数据结构初阶之二叉树性质练习与代码练习

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 数据结构初阶 Linux 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力,共赴大厂。 目录 1.前言 2.性质练习 3…

Python中的匿名函数是什么

匿名函数 lambda x , y : xy 1.匿名的目的就是要没有名字&#xff0c;给匿名函数赋给一个名字是没有意义的。 2.匿名函数的参数规则、作用域关系与有名函数是一样的。 3.匿名函数的函数体通常应该是 一个表达式,该表达式必须要有一个返回值。 flambda x,n:x ** n print(f…

我把springboot项目从Java 8 升级 到了Java 17 的过程总结,愿为君提前踩坑!

项目从jdk8升级到jdk17&#xff0c;我不是为了追求java 17的新特性&#xff08;准确来说也还没有去了解有什么新特性&#xff09;&#xff0c;也不是为了准确与时俱进&#xff0c;永远走在java行列的最前端&#xff0c;纯粹因为项目需要&#xff0c;因为我们都知道&#xff0c;…

【C++】:set和map

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关多态的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据结…

深入理解 Java 虚拟机(JVM)从入门到精通

目录 一、JVM内存结构1、堆&#xff08;Heap&#xff09;&#xff08;1&#xff09;特点&#xff08;2&#xff09;堆内存分配&#xff08;3&#xff09;晋升到老年代的方式&#xff08;4&#xff09;堆内存检验方式2、虚拟机栈&#xff08;VM Stack&#xff09;&#xff08;1&…

OpenHarmony北向-让更广泛的应用开发者更容易参与

一、标准系统的体验 按照官方文档指导&#xff0c;这样操作&#xff0c;OH标准系统开发板就可以运行开发者开发的OpenHarmony应用了。 二、实际情况 按照开发文档上的说明&#xff0c;肯定是装不上的。因为OH不同的发行版&#xff0c;不同发行板不同的设备&#xff0c;IDE&…

uni-app中vue3表单校验失败

目录 1.问题 2.原因及解决方式 3.表单校验方式&#xff08;vue3&#xff09; 1.问题 在app中使用uni-forms表单&#xff0c;并添加校验规则&#xff0c;问题是即使输入内容&#xff0c;表单校验依然失败。 代码&#xff1a; <template><view><uni-forms r…

vue中shift+alt+f格式化防止格式掉其它内容

好处就是使得提交记录干净&#xff0c;否则修改一两行代码&#xff0c;习惯性按了一下格式化快捷键&#xff0c;遍地飘红&#xff0c;下次找修改就费时间 1.点击设置图标-设置 2.点击这个转成配置文件 {"extensions.ignoreRecommendations": true,"[vue]":…

Android Glide自定义AppCompatImageView切分成若干小格子,每个小格子onDraw绘制Bitmap,Kotlin(1)

Android Glide自定义AppCompatImageView切分成若干小格子&#xff0c;每个小格子onDraw绘制Bitmap&#xff0c;Kotlin&#xff08;1&#xff09; 垂直方向的RecyclerView&#xff0c;每行一个AppCompatImageView&#xff0c;每个AppCompatImageView被均匀切割成n个小格子&#…

Games 103 作业三

Games 103 作业三 作业三的内容主要就是实现一下FVM。我们按照文档中的步骤&#xff0c;第一步就是去独立地更新mesh的速度和位置&#xff0c;在初始化每个顶点的受力时&#xff0c;需要考虑到重力的影响。 for(int i0 ;i<number; i) {//TODO: Add gravity to Force.Force[…

wsl安装虚拟机平台报错“无法解析服务器的名称或地址

wsl安装虚拟机平台报错“无法解析服务器的名称或地址” 1.问题 利用wsl安装拟机平台报错“无法解析服务器的名称或地址” 2.解决方案 修改DNS即可 控制面板->网络和Internet&#xff0c;选择查看网络状态和任务 选择更改适配器设置 选择所连接的网络&#xff0c;选择属性…

我不是DBA之慢SQL诊断方式

最近经常遇到技术开发跑来问我慢SQL优化相关工作&#xff0c;所以干脆出几篇SQL相关优化技术月报&#xff0c;我这里就以公司mysql一致的5.7版本来说明下。 在企业中慢SQL问题进场会遇到&#xff0c;尤其像我们这种ERP行业。 成熟的公司企业都会有晚上的慢SQL监控和预警机制。…

C++ Core Guidelines解析 ( 好书推荐 )

C Core Guidelines是Bjarne和 Herb Sutter发起编写的一个开源项目&#xff0c;汇聚了 C社区多年来积累的宝贵经验&#xff0c;是非常全面的编程最佳实践指导&#xff0c;包括代码风格、函数、类、错误处理、性能优化等&#xff0c;可以说是C社区的集大成者。用Effective Modern…

网络安全缓冲区溢出实验

实验要求实验步骤函数 f00()函数 f01()函数 f02() 实验要求 C 程序 homework08.c 的主函数如下&#xff1a; int main(int argc, char * argv[]) { init_buf(Lbuffer, LEN);switch(argc) {case 1: f00(); break;case 2: f01(); break;case 3: f02(); break; default: f00(); …

国内AI大模型已近80个,哪个最有前途?

目前&#xff0c;国内已经推出了近80个人工智能大模型&#xff0c;这些大模型各有优势&#xff0c;难以直接判断哪个最有前途。然而&#xff0c;以下几个大模型值得关注&#xff1a; 1、华为云盘古大模型&#xff1a;盘古大模型聚焦于为行业服务&#xff0c;包括自然语言、视觉…

出错:I/O文件读取JAVA

I/O文件读取 /** author:xiaowang* date:2023/12/6* demand:读取java1班的数据* * */ package homework;import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException;public class FileReadTest {public static void main(String[] args) …

月入9K, 95后夫妻转行网优:人生路远,我们只愿携手前行!

用心专注一门课&#xff0c;让教育改变更多人是优橙教育成立的初心与使命。 在优小橙的教育生涯里&#xff0c;见过许多学生&#xff0c;他们或是因为追求一份美好的前程来优橙&#xff1b;或是想要改变泥泞的现状来优橙&#xff1b;或是因为想要深耕通信行业来优橙……理由很多…

Linux--程序地址空间

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 [TOC](文章目录) 一、程序地址空间回顾 我们在讲C语言的时候&#xff0c;老师给大家画过这样的空间布局…