Python多分类Logistic回归详解与实践

news/2025/1/5 22:11:59/文章来源:https://www.cnblogs.com/TS86/p/18651233

在机器学习中,Logistic回归是一种基本但非常有效的分类算法。它不仅可以用于二分类问题,还可以扩展应用于多分类问题。本文将详细介绍如何使用Python实现一个多分类的Logistic回归模型,并给出详细的代码示例。

一、Logistic回归简介

Logistic回归是一种线性模型,用于二分类问题。它通过Sigmoid函数将线性回归的输出映射到(0, 1)区间内,从而得到样本属于某一类的概率。对于多分类问题,可以使用Softmax函数将输出映射到多个类别上,使得每个类别的输出概率之和为1。

Logistic回归模型的一般形式为:

其中,θ 是模型参数,x 是输入特征。

对于多分类问题,假设有 k 个类别,则Softmax函数的形式为:

其中,θi 是第 i 个类别的参数向量。

二、数据准备

在实现多分类Logistic回归之前,我们需要准备一些数据。这里我们使用经典的Iris数据集,该数据集包含三个类别的鸢尾花,每个类别有50个样本,每个样本有4个特征。

以下是数据准备的代码:

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 加载Iris数据集
iris = load_iris()
data = pd.DataFrame(data=iris.data, columns=iris.feature_names)
data['target'] = iris.target# 显示数据的前5行
print(data.head())# 划分训练集和测试集
X = data[iris.feature_names]  # 特征
y = data['target']  # 目标变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

三、模型训练

在训练多分类Logistic回归模型时,我们需要使用LogisticRegression类,并指定multi_class='multinomial'参数以使用多项逻辑回归。此外,我们还需要指定优化算法,这里使用solver='lbfgs'

以下是模型训练的代码:

from sklearn.linear_model import LogisticRegression# 创建Logistic回归模型
model = LogisticRegression(multi_class='multinomial', solver='lbfgs')# 训练模型
model.fit(X_train, y_train)# 输出模型的训练分数
print(f'Training score: {model.score(X_train, y_train)}')

四、模型评估

训练完模型后,我们需要对模型进行评估,以了解其在测试集上的表现。常用的评估指标包括准确率、混淆矩阵和分类报告。

以下是模型评估的代码:

from sklearn.metrics import accuracy_score, confusion_matrix, classification_report# 对测试集进行预测
y_pred = model.predict(X_test)# 计算和显示准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')# 计算和显示混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print('Confusion Matrix:\n', conf_matrix)# 计算和显示分类报告
print(classification_report(y_test, y_pred))

五、代码整合与运行

以下是完整的代码示例,可以直接运行:

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 accuracy_score, confusion_matrix, classification_report# 加载Iris数据集
iris = load_iris()
data = pd.DataFrame(data=iris.data, columns=iris.feature_names)
data['target'] = iris.target# 显示数据的前5行
print(data.head())# 划分训练集和测试集
X = data[iris.feature_names]  # 特征
y = data['target']  # 目标变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 创建Logistic回归模型
model = LogisticRegression(multi_class='multinomial', solver='lbfgs')# 训练模型
model.fit(X_train, y_train)# 输出模型的训练分数
print(f'Training score: {model.score(X_train, y_train)}')# 对测试集进行预测
y_pred = model.predict(X_test)# 计算和显示准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')# 计算和显示混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print('Confusion Matrix:\n', conf_matrix)# 计算和显示分类报告
print(classification_report(y_test, y_pred))

六、结果分析

运行上述代码后,你将得到模型的训练分数、准确率、混淆矩阵和分类报告。以下是对这些结果的分析:

  1. 训练分数:这是模型在训练集上的准确率,通常会比测试集上的准确率要高。如果训练分数过高而测试分数过低,可能表明模型出现了过拟合。
  2. 准确率:这是模型在测试集上的准确率,是衡量模型性能的重要指标。准确率越高,说明模型的性能越好。
  3. 混淆矩阵:混淆矩阵是一个表格,用于显示模型在各个类别上的预测结果。通过混淆矩阵,我们可以了解模型在各个类别上的表现,以及是否存在类别混淆的情况。
  4. 分类报告:分类报告提供了每个类别的精确率、召回率和F1分数等指标。精确率表示预测为正样本的实例中真正为正样本的比例;召回率表示所有真正的正样本中被正确预测的比例;F1分数是精确率和召回率的调和平均数,用于综合衡量模型的性能。

七、模型优化

虽然上述代码已经实现了一个基本的多分类Logistic回归模型,但在实际应用中,我们可能还需要对模型进行优化,以提高其性能。以下是一些常用的优化方法:

  1. 特征选择:选择对模型性能有重要影响的特征进行训练,可以提高模型的准确性和泛化能力。
  2. 正则化:通过添加正则化项来防止模型过拟合。Logistic回归中常用的正则化方法包括L1正则化和L2正则化。
  3. 调整超参数:通过调整模型的超参数(如学习率、迭代次数等)来优化模型的性能。
  4. 集成学习:将多个模型的预测结果进行组合,以提高模型的准确性和稳定性。常用的集成学习方法包括袋装法(Bagging)和提升法(Boosting)。

八、结论

本文详细介绍了如何使用Python实现一个多分类的Logistic回归模型,并给出了详细的代码示例。通过数据准备、模型训练、模型评估和结果分析等步骤,我们了解了多分类Logistic回归的基本实现流程。此外,本文还介绍了模型优化的一些常用方法,以帮助读者在实际应用中提高模型的性能。希望本文能为初学者提供有价值的参考,并在实践中不断提升自己的技能。

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

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

相关文章

【STC8H】STC8 系列单片机低功耗延时方法

STC8 单片机低功耗延时方法 单片机延时通常方法就是跑while循环,但在低功耗要求下可以利用定时唤醒方式使MCU在延时期间睡眠,降低功耗。以STC8G1K08为例: 寄存器 WKTCH^8为使能,其余15位用于控制唤醒时间。并且在唤醒后系统会继续从掉电语句的下一句执行。延时计算 按照公式…

C盘注册表优化清理工具!Wise Registry Cleaner v11.1.9.724

Wise Registry Cleaner是一款优化电脑性能的软件,通过清理注册表中的无效和过时信息来提升计算机运行速度。它能快速扫描并安全清理垃圾文件,同时优化PC。软件具备一键撤销更改和注册表备份功能,确保操作安全。最新版本改进了清理规则,增加了优化项目,并解决了特定软件兼容…

winrar(解压工具-含电脑版和手机版)

winrar,全球使用人数最多解压工具 winrar 烈火汉化无广告版(含电脑版和手机版),一款在官方原版的基础上注册破/解winrar64位去广告版,安装即可使用,不需要使用注册码及key文件,非常简单易用,欢迎有需要的朋友们前来下载使用。另:程序容易被杀毒软件误报,但亲测无毒可…

JVM实战—9.线上FGC的几种案例

大纲 1.如何优化每秒十万QPS的社交APP的JVM性能(增加S区大小 + 优化内存碎片) 2.如何对垂直电商APP后台系统的FGC进行深度优化(定制JVM参数模版) 3.不合理设置JVM参数可能导致频繁FGC(优化反射的软引用被每次YGC回收) 4.线上系统每天数十次FGC导致频繁卡顿的优化(大对象问题) 5…

Unity 中一些常见的富文本标签

Unity 支持的富文本标签主要用于在 Text 和 TextMeshPro 中格式化和控制文本的显示效果。以下是 Unity 中一些常见的富文本标签: 1. 字体样式 <b> 和 </b>: 粗体 <i> 和 </i>: 斜体 <u> 和 </u>: 下划线 <s> 和 </s>: 删除线…

WinMemoryCleaner 电脑内存清理工具

告别卡顿,让电脑飞起来! 这款免费的 RAM 清理器利用了本机 Windows 功能来清理内存区域。有时候,程序在运行结束后并不会释放分配给它的内存,这会导致计算机的性能下降。换句话说,当你使用 Windows Memory Cleaner 来优化内存时,可以继续进行其他工作,而无需浪费时间重新…

低功耗电压比较器(微功率比较器)整理

前言 传统用的电压比较器 LM393 静态工作电流太大了(0.45mA),想寻找一款低功耗的电压比较器。规格 LM393B LM2903B LM393/LM393A LM2903 LM2903V/LM2903AV LM193 LM293/LM293A 单位电源电压 2 至 36 2 至 36 2 至 30 2 至 30 2 至 32 2 至 30 2 至 30 V总电源电流 (5V 至 36…

Bandizip(跨平台解压缩软件) v7.36 激活版

虽然 7-Zip 是开源免费压缩工具中的佼佼者,但用得不是很顺手,今天试了下推荐的 Bandizip 却出人意料的好用!Bandizip 是一款来自韩国的免费优秀的文件压缩/解压缩软件,支持 Win 与 Mac,操作方式与 WinRAR 相似,支持压缩和解压 rar、zip、7z 等众多主流格式… 解压 支持的…

如何从文档创建 RAG 评估数据集

添加微信1185918903,关注公众号ChallengeHub获取更所咨询在本文中,将展示如何创建自己的 RAG 数据集,该数据集包含任何语言的文档的上下文、问题和答案。检索增强生成 (RAG) [1] 是一种允许 LLM 访问外部知识库的技术。 通过上传 PDF 文件并将其存储在矢量数据库中,我们可以…

变分推断(VI)、随机梯度变分推断(SGVI/SGVB)、变分自编码器(VAE)串讲

主要介绍了变分推断(VI)、随机梯度变分推断(SGVI/SGVB)、变分自编码器(VAE)参考资料:VI参考:PRML Chapter 10. SGVI原文:Auto-Encoding Variational Bayes -- Kingma. VAE参考1:Tutorial on Variational Autoencoders -- CARL DOERSCH. VAE参考2:Stanford University CS23…

UE4.27, 未解之谜, [ 0/2 ]

1. NetDriver.cpp [4178 ~ 4179] Add理论上自带着ArrayMax的更新啊,这个函数体在一个循环里如此使用,怎样的可能才会触发ensure呢?2. CoreMiscDefines.h [234] version压根没在这个宏定义里用过,它怎么work的?

Win32汇编学习笔记03.RadAsm和补丁

https://bpsend.net/thread-163-1-1.html 补丁 扫雷游戏啊下补丁 在扫雷游戏中,点关闭弹出一个确认框,确认之后再关闭,取消就不关闭首先第一步就是确认关闭按钮响应的位置,一般都是 WM_CLOSE 的消息 ,消息响应一般都在过程函数,所以就是要定位到过程函数,我们知道 MC 项目中 ,如…