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

在机器学习中,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回归的基本实现流程。此外,本文还介绍了模型优化的一些常用方法,以帮助读者在实际应用中提高模型的性能。希望本文能为初学者提供有价值的参考,并在实践中不断提升自己的技能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端,npm install安装依赖卡在sill idealTree buildDeps(设置淘宝依赖)

输入npm i后,一直卡在sill idealTree buildDeps,一动不动 cnpm可以安装成功,但使用cnpm不会生成package-lock.json文件 设置淘宝依赖,依然卡住,挂梯子也不行 解决方法: // 取消ssl验证 set strict-ssl …

装饰者模式

1、定义 装饰者模式:在不必改变原类和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象 2、实际应用 星巴克的咖啡系统项目: 星巴克要求的各种下单功能:大杯原味、大…

招银网路Java后端一面,难度有点大!

这是一位武汉理工大学同学的招银网络一面面经,同样附带超详细的参考答案。大家可以用来查漏补缺,针对性地补短板。 招银网络一面还是比较简单的,基本都是一些比较重要且高频的常规八股,项目问的不多。到了二面的时候, 会开始主要考察你的项目。 1、自我介绍 自我介绍一般…

C++之设计模式

设计模式 简介单例模式饿汉模式懒汉模式 工厂模式简单工厂模式工厂方法模式抽象工厂模式 建造者模式代理模式 简介 设计模式是前辈们对代码开发经验的总结,是解决特定问题的⼀系列套路它不是语法规定,而是⼀套⽤来提高代码可复用性、可维护性、可读性、…

云效流水线使用Node构建部署前端web项目

云效流水线实现自动化部署 背景新建流水线配置流水线运行流水线总结 背景 先来看看没有配置云效流水线之前的部署流程: 而且宝塔会经常要求重新登录,麻烦的很 网上博客分享了不少的配置流程,这一篇博客的亮点就是不仅给出了npm命令构建&…

pycharm如何拉取一个git项目,然后,修改后再上传到自建的项目中?

以chattts为例 https://github.com/2noise/ChatTTS.git 1.建一个虚拟环境,用于项目使用 2.pycharm新建工程 3.忽略 提示 勾选,新建远程仓库 设置账号和密码 设置git路径,一般是正确的,点测试即可 &…

(五)开机自启动以及scp工具文件传输小问题

文章目录 程序开机自启动先制作一个可执行程序第一种 通过命令行实现程序开机自启动第二种 通过 Linux 系统镜像实现程序开机自启动 scp工具文件传输小问题 程序开机自启动 原因:做成产品后,用户直接开机使用,总不能在开机执行程序后才可以使…

供需平台信息发布付费查看小程序系统开发方案

供需平台信息发布付费查看小程序系统主要是为了满足个人及企业用户的供需信息发布与匹配需求。 一、目标用户群体 个人用户:寻找兼职工作、二手物品交换、本地服务(如家政、维修)等。 小微企业:推广产品和服务,寻找合…

中建海龙:科技助力福城南产业片区绿色建筑发展

在快速发展的城市化进程中,绿色建筑以其环保、节能、可持续的特点日益受到重视。作为建筑工业化领域的领军企业,中建海龙科技有限公司(简称“中建海龙”)凭借其卓越的科技实力和创新举措,在推动绿色建筑发展方面做出了…

OJ随机链表的复制题目分析

题目内容: 138. 随机链表的复制 - 力扣(LeetCode) 分析: 这道题目,第一眼感觉非常乱,这是正常的,但是我们经过仔细分析示例明白后,其实也并不是那么难。现在让我们一起来分析分析…

动态规划回文串问题系列一>回文子串

题目: 解析: 注意:字串和子数组差不多 状态表示: 状态转移方程: 初始化: 填表顺序: 返回值: 返回dp表里true的个数

万里数据库GreatSQL监控解析

GreatSQL是MySQL的一个分支,专注于提升MGR(MySQL Group Replication)的可靠性及性能。乐维监控平台可以有效地监控GreatSQL,帮助用户及时发现并解决潜在的性能问题。 通过在GreatSQL服务器上安装监控代理,收集数据库性…

君正T41交叉编译ffmpeg、opencv并做h264软解,利用君正SDK做h264硬件编码

目录 1 交叉编译ffmpeg----错误解决过程,不要看 1.1 下载源码 1.2 配置 1.3 编译 安装 1.3.1 报错:libavfilter/libavfilter.so: undefined reference to fminf 1.3.2 报错:error: unknown type name HEVCContext; did you mean HEVCPr…

Sublime Text4 4189 安装激活【 2025年1月3日 亲测可用】

-----------------测试时间2025年1月3日------------------- 下载地址 官方网址:https://www.sublimetext.com 更新日志:https://www.sublimetext.com/download V4189 64位:https://www.sublimetext.com/download_thanks?targetwin-x64 ....…

Zabbix5.0版本(监控Nginx+PHP服务状态信息)

目录 1.监控Nginx服务状态信息 (1)通过Nginx监控模块,监控Nginx的7种状态 (2)开启Nginx状态模块 (3)配置监控项 (4)创建模板 (5)用默认键值…

Java高频面试之SE-08

hello啊,各位观众姥爷们!!!本牛马baby今天又来了!哈哈哈哈哈嗝🐶 成员变量和局部变量的区别有哪些? 在 Java 中,成员变量和局部变量是两种不同类型的变量,它们在作用域…

Linux(Centos 7.6)命令行快捷键

Linux(Centos 7.6)操作系统一般都是使用命令行进行管理,如何能高效的进行命令编辑与执行,需要我们记住一些常见的命令,也需要连接一些常见快捷键的使用,常见快捷键如下: 快捷键快捷键说明tab命令行补齐ctrlr快速查找之…

Geoserver修行记-后端调用WMS/WMTS服务无找不到图层Could not find layer

项目场景 调用geoserver地图服务WMS,找不到图层 我在进行地图服务调用的时候,总是提示我找不多图层 Could not find layer,重点是这个图层我明明是定义了,发布了,且还能够正常查看图层的wms的样式,但是在调用后端调用…

ip属地的信息准确吗?ip归属地不准确怎么办

在数字化时代,IP属地信息成为了我们日常生活中不可或缺的一部分。在各大社交媒体平台上,IP属地信息都扮演着重要的角色。然而,随着技术的不断进步和网络的复杂性增加,IP属地信息的准确性问题也日益凸显。那么,IP属地信…

nginx高可用集群搭建

本文介绍nginx高可用集群的搭建。利用keepalived实时检查nginx进程是否存活、keepalived的虚拟ip技术,达到故障转移的目的。终端用户通过访问虚拟ip,感知不到实际发生的故障。架构图如下: 0、环境 Ubuntu:22.04.2 ltsnginx: 1.…