【机器学习】突破分类瓶颈:用逻辑回归与Softmax回归解锁多分类世界

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临,让我们一起踏上这个知识之旅!
请添加图片描述

文章目录

  • 🍋1. 引言
  • 🍋2. 逻辑回归
    • 🍋代码实现
  • 🍋3. Softmax回归
    • 🍋代码实现
  • 🍋4. 集成学习
  • 🍋5. 类别不平衡问题
    • 🍋代码示例(重采样)
  • 🍋6. 逻辑回归案例(Iris数据集)
    • 🍋评估结果
  • 🍋结论

🍋1. 引言

在机器学习中,分类问题是最常见的一类问题。无论是二分类还是多分类,解决这些问题的算法有很多,其中逻辑回归、Softmax回归和集成学习方法在实际应用中被广泛使用。但在实际数据中,类别不平衡问题可能会影响模型的效果,如何有效地解决这一问题也是一个亟待解决的难题。

🍋2. 逻辑回归

概述:逻辑回归(Logistic Regression)是一种用于二分类问题的经典线性分类器,目标是通过训练数据集的特征来预测某一类别的概率。

模型原理: 逻辑回归的核心是使用sigmoid函数将线性组合的输出映射到[0,1]区间,用于二分类问题:

在这里插入图片描述
其中,𝑤是权重,𝑏是偏置,𝑋是输入特征。

🍋代码实现

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report# 生成数据集
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, random_state=42)# 数据分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 训练模型
model = LogisticRegression()
model.fit(X_train, y_train)# 预测
y_pred = model.predict(X_test)# 评估
print(classification_report(y_test, y_pred))

优缺点:

  • 优点:模型简单,计算开销小,容易解释。
  • 缺点:对于非线性问题效果差,容易受到异常值影响。

🍋3. Softmax回归

概述:Softmax回归(Softmax Regression)是逻辑回归的扩展,处理多分类问题。它将输入的线性组合映射到多个类别的概率值。

模型原理: Softmax函数是对逻辑回归的扩展,公式为:
在这里插入图片描述


是偏置。

🍋代码实现

from sklearn.linear_model import LogisticRegression# 使用Softmax回归处理多分类问题
model = LogisticRegression(multi_class='multinomial', solver='lbfgs')
model.fit(X_train, y_train)y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

优缺点:

  • 优点:可以处理多分类问题,适用于线性可分问题。
  • 缺点:当类别数量很多时,计算复杂度较高。

🍋4. 集成学习

概述:集成学习是一种通过结合多个弱学习器来提高模型性能的方法。常见的集成学习方法有Bagging、Boosting和Stacking。

from sklearn.ensemble import RandomForestClassifier# 随机森林分类器
rf = RandomForestClassifier(n_estimators=100)
rf.fit(X_train, y_train)y_pred = rf.predict(X_test)
print(classification_report(y_test, y_pred))

🍋5. 类别不平衡问题

概述:在现实世界中,很多分类任务会面临类别不平衡的问题,即某一类别的样本数量远远少于其他类别。这会导致模型倾向于预测样本较多的类别,降低模型的整体性能。

解决方法:

  • 重采样:通过增加少数类样本或减少多数类样本来平衡数据集。
  • 加权损失函数:对模型在少数类样本上的误差给予更大的惩罚。
  • 集成方法:例如SMOTE与Boosting结合来提高少数类的预测能力。

🍋代码示例(重采样)

from imblearn.over_sampling import SMOTE# 过采样
smote = SMOTE()
X_res, y_res = smote.fit_resample(X_train, y_train)# 训练模型
model = LogisticRegression()
model.fit(X_res, y_res)y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

🍋6. 逻辑回归案例(Iris数据集)

我们将通过以下步骤进行分析:

  • 加载数据:选择Iris数据集。
  • 数据预处理:包括数据分割与标准化。
  • 训练模型:使用逻辑回归训练模型。
  • 评估模型:通过混淆矩阵、准确率等评估模型效果。

Iris数据集包含150个样本,分别来自3个不同种类的鸢尾花(Setosa、Versicolor、Virginica)。每个样本有4个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。目标是根据这些特征来预测鸢尾花的种类。

# 导入需要的库
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt# 1. 加载Iris数据集
iris = load_iris()
X = iris.data  # 特征
y = iris.target  # 标签# 2. 数据分割:80%训练数据,20%测试数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 3. 数据标准化:逻辑回归对特征的尺度比较敏感
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 4. 训练逻辑回归模型
logreg = LogisticRegression(max_iter=200)
logreg.fit(X_train, y_train)# 5. 在测试集上进行预测
y_pred = logreg.predict(X_test)# 6. 模型评估
print("分类报告:")
print(classification_report(y_test, y_pred))# 7. 混淆矩阵
cm = confusion_matrix(y_test, y_pred)
print("混淆矩阵:")
print(cm)# 可视化混淆矩阵
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=iris.target_names, yticklabels=iris.target_names)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.title('Confusion Matrix')
plt.show()

代码分析

  1. 加载Iris数据集:
  • 使用sklearn.datasets.load_iris()加载Iris数据集,数据集已经包含了4个特征和相应的类别标签。
  1. 数据分割:
  • 使用train_test_split将数据分割为训练集和测试集,80%的数据用于训练,20%的数据用于测试。
  1. 数据标准化:
  • 逻辑回归对输入特征的尺度非常敏感,因此我们对数据进行标准化(均值为0,方差为1),使用StandardScaler完成这一操作。
  1. 训练逻辑回归模型:
  • 使用LogisticRegression()创建一个逻辑回归模型,并在训练集上进行训练。max_iter=200指定最大迭代次数,以确保算法收敛。
  1. 预测与评估:
  • 使用训练好的模型对测试集进行预测,并通过classification_report显示分类的准确性、精确度、召回率和F1-score等评估指标。
    使用confusion_matrix计算混淆矩阵,进一步分析模型的分类效果。
  1. 混淆矩阵可视化:
  • 使用Seaborn的heatmap函数将混淆矩阵可视化,更直观地展示分类效果。

🍋评估结果

分类报告如下:
在这里插入图片描述
混淆矩阵如下:
在这里插入图片描述

根据分类报告和混淆矩阵的结果,我们可以得出以下结论:

  • 完美的分类结果:模型的精确度、召回率和F1分数都为1.00,说明模型在每个类别上都没有错误预测,完美地分辨了三个不同种类的鸢尾花。
  • 没有误分类:混淆矩阵显示每个类别的所有样本都被正确分类,没有出现任何误分类的情况。
  • 数据集的简单性:由于Iris数据集是一个相对简单且清晰的分类问题,尤其是在特征与类别之间的边界非常明确时,逻辑回归能够非常好地进行分类。

🍋结论

本文对逻辑回归、Softmax回归、集成学习方法进行了详细分析,并讨论了类别不平衡问题及其解决方法。通过实验验证,选择合适的分类算法和解决方案能够显著提高模型在实际任务中的性能。

希望这篇博客能够为你提供全面的分类问题解决方案,同时帮助理解如何在复杂场景下处理类别不平衡问题,感兴趣的同学别忘了三连哦

在这里插入图片描述

挑战与创造都是很痛苦的,但是很充实。

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

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

相关文章

Android gradle plugin agp8.6.1发布时间

Android gradle plugin agp8.6.1发布时间 Android Gradle Plugin (AGP) 的版本 8.6.1 是在2023年发布的。具体来说,它是在2023年4月发布的。这个版本的更新包括了多个重要的改进和修复,旨在提升开发者在Android开发过程中的体验和效率。 主要更新包括&am…

闭包的两种设计模式

闭包设计模式 概述 闭包是 JavaScript 中的一个重要概念,它允许内层函数访问外层函数的变量。在实际开发中,闭包经常被用于实现特定的设计模式,主要包括辅助函数模式和工厂模式。 1. 辅助函数模式(Helper Function Pattern&#x…

力扣119:杨辉三角Ⅱ

力扣119:杨辉三角Ⅱ题目思路代码题目 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。 思路 杨辉三角的规律: 第n行有n1个数,n从0开始每行的第一个数和最后一个数都是1。除了第一行的数其他的数都是由它左上角和右上角的…

@Linux自建证书 Nginx+HTTPS

文章目录Linux自建证书并配置Nginx HTTPS1. 准备工作2. 安装必要的工具3. 自建证书脚本3.1 创建CA根证书(可选,用于自签名证书链)3.2 创建服务器证书脚本4. 证书文件说明5. 配置Nginx使用HTTPS5.1 创建证书存放目录5.2 配置Nginx站点5.3 启用…

解决 RAGFlow报错 `peewee.OperationalError: (1045)`:MySQL 容器密码错误排查手记

文章目录 🕵️‍♂️ 深度排查过程 🔧 完美解决方案:同步真实密码 ✅ 验证结果 📌 经验总结与最佳实践 问题现象: 部署 ragflow 时遭遇以下错误,且访问前端页面无响应: peewee.OperationalError: (1045, "Access denied for user root@192.168.48.6")关键线…

lwIP WebSocket 客户端 TCP PCB 泄漏问题分析与解决

在嵌入式开发中,使用 lwIP 实现 WebSocket 客户端时,偶尔会遇到反复连接导致 TCP PCB(Protocol Control Block)泄漏,最终连接数达到上限(如 4)后无法再建立新连接的问题。本文将结合实际案例&am…

k8s之Attach 和 Mount

Attach 和 Mount 一、核心概念对比操作Attach(挂载设备)Mount(挂载文件系统)定义将存储卷(如 EBS、NFS 等)连接到宿主机将已 Attach 的存储设备映射为宿主机上的文件系统路径执行者云提供商驱动&#xff08…

API Gateway HTTP API 控制客户端访问 IP 源

前言 在 API Gateway REST API 中我们可以配置 Resource policy 来实现对特定客户端 IP 地址的限制. 然而 HTTP API 并不提供这个功能, 不过我们可以用 Lambda 搓一个 Authorizer 实现等效的功能. 创建 Lambda authorizer import json import os import ipaddressdef lambda…

Linux搭建LAMP环境(CentOS 7 与 Ubuntu 双系统教程)

Linux搭建LAMP环境 一、LAMP 环境核心概念 定义:由 Linux、Apache、MySQL、PHP 四大组件组成的开源 Web 应用平台本质:四个独立开源软件的组合体,因长期协同使用形成高度兼容性,成为动态网站和服务器的主流解决方案 二、LAMP 四大…

c# 开机自动启动程序

以下是两种实现C#软件开机自启动的常用方法&#xff0c;根据需求选择适合的方案&#xff1a; 方法1&#xff1a;通过注册表实现&#xff08;需管理员权限&#xff09; using Microsoft.Win32; using System.Diagnostics;public static class AutoStartManager {/// <summa…

C语言---动态内存管理

为什么要有动态内存分配我们在学习动态内存管理之前&#xff0c;一直都是通过开辟变量&#xff0c;或者是开辟数组的方式来在内存的栈区开辟空间的&#xff0c;但是这样的开辟方式有局限性&#xff0c;因为一旦开辟之后&#xff0c;它们的大小就无法改变&#xff0c;就缺少了很…

C++标准库(std)详解

C标准库&#xff08;std&#xff09;详解——目录C标准库&#xff08;std&#xff09;详解一、命名空间&#xff08;namespace&#xff09;二、主要组件1. 输入输出流&#xff08;<iostream>&#xff09;2. 字符串处理&#xff08;<string>&#xff09;3. STL容器&…

ESP32的OTA升级详解:3. 搭建node/python服务器升级(native ota原生API)

一、OTA两种方式&#xff1a;app_update 与 esp_https_ota 区别 ESP32/ESP32-S2/ESP32-C3等可通过Wi-Fi或以太网下载新固件到OTA分区实现运行时升级。ESP-IDF提供两种OTA升级方法&#xff1a; 使用app_update组件的原生API使用esp_https_ota组件的简化API(支持HTTPS升级) 本次…

byte[]作为接口参数传递的方法

在C#中通过WebService或API传递byte参数&#xff08;如文件、图像等二进制数据&#xff09;时&#xff0c;通常有以下几种实现方式&#xff1a; ‌1. 使用Base64编码&#xff08;推荐REST API&#xff09;‌ 将byte数组转换为Base64字符串传输&#xff0c;适用于JSON格式的API&…

元宇宙与Web3的深度融合:构建沉浸式数字体验的愿景与挑战

一、技术特征与融合基础1. 元宇宙的技术架构&#xff08;2025年&#xff09;空间构建技术&#xff1a;3D建模与渲染&#xff1a;实时渲染引擎&#xff08;如Unity HDRP&#xff09;支持路径追踪光追&#xff0c;AI生成模型&#xff08;NVIDIA Get3D&#xff09;3秒生成3D场景。…

什么是脑裂

脑裂定义&#xff1a; 脑裂是分布式系统中由于网络分区&#xff08;Network Partition&#xff09;导致集群节点被分割成多个独立子集&#xff0c;每个子集认为自己是唯一合法的集群&#xff0c;从而导致数据不一致或系统行为异常的现象。详细工作原理&#xff1a;发生原因&…

川翔云电脑:云端算力新标杆,创作自由无边界

一、旗舰机型&#xff1a;4090Ultra 48G 显存颠覆硬件限制 川翔云电脑最新上线的RTX 4090Ultra 48G 显存机型&#xff0c;采用 NVIDIA Ada Lovelace 架构&#xff0c;单卡显存容量达 48GB GDDR6X&#xff0c;较传统 4090 翻倍&#xff0c;可直接加载 1200 万面数的超复杂模型&a…

贪心算法(排序)

码蹄集OJ-活动安排 #include<bits/stdc.h> using namespace std; struct MOOE {int s,e; }; bool compare(const MOOE&a,const MOOE&b) {return a.e<b.e; } int main( ) {int n;cin>>n;vector<MOOE>a(n);for(int i0;i<n;i){cin>>a[i].…

详解序数回归损失函数ordinal_regression_loss:原理与实现

在医疗 AI 领域&#xff0c;很多分类任务具有有序类别的特性&#xff0c;如疾病严重程度&#xff08;轻度→中度→重度&#xff09;、肿瘤分级&#xff08;G1→G2→G3&#xff09;等。这类任务被称为序数回归&#xff08;Ordinal Regression&#xff09;&#xff0c;需要特殊的…

SQL增查

建完库与建完表后后:1.分别查询student表和score表的所有记录student表&#xff1a;score表:2.查询student表的第2条到5条记录SELECT * FROM student LIMIT 1,4;3.从student表中查询计算机系和英语系的学生的信息SELECT * FROM student-> WHERE department IN (计算机系, 英…