线性回归原理推导与应用(十):逻辑回归多分类实战

本篇文章将利用sklearn中内置的鸢尾花数据进行逻辑回归建模并对鸢尾花进行分类。对于逻辑回归和线性回归的相关原理,可以查看之前的文章

数据导入

鸢尾花数据是机器学习里的常用数据,首先导入一些基础库并从sklearn中导入数据集

#导入用到的一些python库
import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as snsimport warnings
warnings.filterwarnings("ignore")#忽略警告
from sklearn.datasets import load_iris
data = load_iris() #获取数据
iris_target = data.target #数据结果值,即鸢尾花的分类结果
iris_features = pd.DataFrame(data=data.data, columns=data.feature_names) #鸢尾花特征的数据iris_features.info()

在这里插入图片描述
可以看到该数据集总共有150个样本,包含4个特征变量和1个目标分类变量。4个特征变量为三种鸢尾花的四个特征,分别是花萼长度(cm)、花萼宽度(cm)、花瓣长度(cm)、花瓣宽度(cm),这些形态特征可以被用来识别鸢尾花的种类。目标变量为花的类别,其都属于鸢尾属下的三个亚属,分别是山鸢尾 (Iris-setosa),变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)。具体字段名称与含义总结如下:

变量描述
sepal length花萼长度(cm)
sepal width花萼宽度(cm)
petal length花瓣长度(cm)
petal width花瓣宽度(cm)
target鸢尾的三个亚属类别,‘setosa’(0), ‘versicolor’(1), ‘virginica’(2)

数据探索性分析

通过绘制所有特征变量与最终分类的分布和散点图,来大致看一下特征与结果之间的关系

## 合并特征与分类结果数据
iris_all = iris_features.copy()
iris_all['target'] = iris_targetsns.pairplot(data=iris_all, hue= 'target',palette="bright")
plt.show()

在这里插入图片描述
可以从图中中发现,不论是从对角线上的分布图还是从分类后的散点图,都可以看出对于不同种类的花,其萼片长、花瓣长、花瓣宽的分布差异较大,换句话说,这些属性是可以帮助我们去识别不同种类的花的。

同时也绘制一下箱线图看一下数据的具体分布

for col in iris_features.columns:sns.boxplot(x='target', y=col, saturation=0.5,palette='pastel', data=iris_all)plt.title(col)plt.show()

花萼长度这一个特征的箱线图如下:
在这里插入图片描述

建模

首先划分数据为训练集与测试集

#划分数据集与测试集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(iris_features, iris_target, test_size = 0.2,random_state = 1024)

利用sklearn中的逻辑回归函数建模,其中函数提供了多分类的功能,对应的参数为:multi_class='auto','ovr',''multinomial'',也就是之前文章中所说的多分类OVR的方法
首先指定为ovr的分类方法,同时输出相关的参数:

# 定义 逻辑回归模型 
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(solver='lbfgs', multi_class='ovr')
clf.fit(x_train, y_train)
# 查看其对应的w
print('the weight of Logistic Regression:\n',clf.coef_)# 查看其对应的w0
print('the intercept(w0) of Logistic Regression:\n',clf.intercept_)输出结果如下:
the weight of Logistic Regression:[[-0.45418407  0.77862646 -2.2268873  -0.87662661][-0.41614677 -1.98168225  0.82180991 -1.2628189 ][-0.28832573 -0.49869581  2.70303022  2.23465912]]
the intercept(w0) of Logistic Regression:[  6.82628324   6.16028196 -13.72510278]

也可以指定为multinomial的分类方法,对应softmax分类,同时输出相关的参数:

clf = LogisticRegression(solver='lbfgs', multi_class='multinomial')
clf.fit(x_train, y_train)
# 查看其对应的w
print('the weight of Logistic Regression:\n',clf.coef_)# 查看其对应的w0
print('the intercept(w0) of Logistic Regression:\n',clf.intercept_)输出结果如下:
the weight of Logistic Regression:[[-0.42950628  0.83667747 -2.39313278 -0.95907637][ 0.47647805 -0.24379394 -0.13247376 -0.93516504][-0.04697178 -0.59288353  2.52560654  1.89424141]]
the intercept(w0) of Logistic Regression:[  9.70326709   1.8803977  -11.58366479]

可以看到OVR方法有三个线性回归的方程,这个就是之前OVR原理中说到的三个分类器,数据会根据这三个线性分类器的结果判断其最终的结果。
而multinomia的方法也是三个线性回归得分方程,这是将数据放到三个线性回归中计算得出三个结果并使用softmax计算得到分类结果

模型训练好后就可以使用模型进行预测

# 在训练集和测试集上分布利用训练好的模型进行预测
train_predict = clf.predict(x_train)
test_predict = clf.predict(x_test)

输出测试集的预测分类结果和实际的分类结果看一下:

test_predict
# 测试集预测分类
array([1, 0, 2, 2, 0, 0, 1, 2, 1, 0, 0, 0, 1, 2, 1, 0, 1, 0, 2, 0, 2, 0,1, 0, 2, 1, 2, 2, 2, 2])y_test
#实际分类结果
array([1, 0, 2, 2, 0, 0, 1, 2, 1, 0, 0, 0, 1, 2, 1, 0, 1, 0, 2, 0, 2, 0,1, 0, 2, 1, 2, 2, 2, 2])

模型评价

逻辑回归作为分类模型,评价一个模型的优劣也是通过分类模型的评价指标来评判的。相关指标的详细介绍可参阅:https://blog.csdn.net/qq_42692386/article/details/147896278

首先输出混淆矩阵并将其展示为热力图的形式展示

# 查看混淆矩阵
from sklearn import metricsconfusion_matrix_result = metrics.confusion_matrix(test_predict,y_test)
print('The confusion matrix result:\n',confusion_matrix_result)# 利用热力图对于结果进行可视化
plt.figure(figsize=(8, 6))
sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.show()

得到的混淆矩阵如下:
在这里插入图片描述
可以看到预测的结果是百分百正确的。当然由于测试集数据的划分不同,有的时候结果和准确率也会不同。
同时也可以直接输出准确率:

clf.score(x_test,y_test)

得到的结果也为1。

在这里插入图片描述

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

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

相关文章

Docker 部署emberstack/sftp 镜像

Docker 部署 emberstack/sftp 镜像 1、找到国内可用的docker源,本次测试使用docker.1ms.run 2、下载emberstack/sftp镜像docker pull docker.1ms.run/emberstack/sftp3、安装并启动emberstack/sftp镜像docker run -d -p 22:22 --name SFTP -v D:\SFTP:/home/sftpuser/sftp --pr…

【华为OD】MVP争夺战2(C++、Java、Python)

文章目录题目题目描述输入描述输出描述示例思路核心思路:关键观察:算法步骤:排序策略:特殊情况处理:代码CJavaPython复杂度分析时间复杂度空间复杂度结果总结题目 题目描述 给定一个整型数组,请从该数组中…

Python打卡训练营Day58

DAY 58 经典时序预测模型2知识点回顾:时序建模的流程时序任务经典单变量数据集ARIMA(p,d,q)模型实战SARIMA摘要图的理解处理不平稳的2种差分n阶差分---处理趋势季节性差分---处理季节性建立一个ARIMA模型,通…

003大模型基础知识

大模型分类: 技术架构: Encoder Only Bert Decoder Only 著名的大模型都是 Encoder - Decoder T5 是否开源: 开源阵营: Llama DeepSeek Qwen 闭源阵营: ChatGpt Gemini Claude 语言模型发展阶段&am…

JVM监控及诊断工具-GUI篇

19.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈…

适用于Windows系统截图工具

1.Faststone Capture 官网网址:https://faststone-capture.com/ 网上很多注册码:https://www.cnblogs.com/LiuYanYGZ/p/16839503.html 2.Snipaste 官网网址:https://apps.microsoft.com/detail/9p1wxpkb68kx?launchtrue&modefull&…

区块链的三种共识机制——PoW、PoS和DPoS原理

区块链的核心是去中心化网络的信任机制,而共识机制是实现这一目标的关键。共识机制可分为两个阶段:(1)提出共识内容(2)对内容达成共识(遵循最长链原则)。三种主流的共识机制主要有工…

React 和 Vue的自定义Hooks是如何实现的,如何创建自定义钩子

目的:将公共逻辑提取出来,类似于 mixin,解决了mixin的设计缺陷。 React 和 Vue 自定义 Hooks 实现对比 React 自定义 Hooks React 的自定义 Hooks 是 JavaScript 函数,它们以 use 开头,可以调用其他 Hooks。 基本规则 …

构建高效事件驱动架构:AWS S3与SQS集成实践指南

引言 在现代云架构中,事件驱动的设计模式越来越受到开发者的青睐。AWS S3与SQS的集成为我们提供了一个强大的事件处理机制,能够在文件上传、删除或修改时自动触发后续的业务逻辑。本文将详细介绍如何配置S3事件通知到SQS队列,并分享实际项目中的最佳实践。 架构概述 S3事…

C++ -- STL-- List

////// 欢迎来到 aramae 的博客,愿 Bug 远离,好运常伴! ////// 博主的Gitee地址:阿拉美 (aramae) - Gitee.com 时代不会辜负长期主义者,愿每一个努力的人都能达到理想的彼岸。1. list的介绍及使用 2. list的深度剖…

rt-thread 线程间同步方法详解

rt-thread 线程间同步方法详解一、什么是线程间同步线程同步的必要性线程同步的挑战二、同步方式1、信号量信号量工作机制信号量的管理方式信号量的创建与删除信号量的获取与释放信号量的典型应用场景信号量的注意事项2、互斥量互斥量工作机制互斥量的特性互斥量的操作接口互斥…

Spring Boot + Vue2 实现腾讯云 COS 文件上传:从零搭建分片上传系统

目录 一、项目目标 二、腾讯云 COS 基本配置 1. 创建存储桶 2. 获取 API 密钥 3. 设置跨域规则(CORS) 三、后端(Spring Boot)实现 1. 依赖配置 2. 配置腾讯云 COS(application.yml) 3. 初始化 COS…

使用 Java 获取 PDF 页面信息(页数、尺寸、旋转角度、方向、标签与边框)

目录 引言 一、安装和引入PDF处理库 二、获取 PDF 页数 三、获取页面尺寸(宽高) 四、获取页面旋转角度 五、判断页面方向(横向 / 纵向) 六、获取页面标签 七、获取页面边框信息 八、总结 引言 了解 PDF 页面属性是我们在…

基于 AI 的大前端安全态势感知与应急响应体系建设

大前端应用(Web、APP、小程序)作为用户交互的入口,面临日益复杂的安全威胁:从传统的 XSS 攻击、CSRF 伪造,到新型的供应链投毒、AI 驱动的自动化爬虫,再到针对业务逻辑的欺诈攻击(如薅羊毛、账号…

Java 与 MySQL 性能优化:MySQL全文检索查询优化实践

文章目录一、引言二、InnoDB引擎下的全文检索功能详解2.1 全文索引的基本概念与原理2.2 全文索引的创建与管理2.3 全文检索的三种查询模式2.4 中文全文检索的挑战与解决方案三、CMS 场景下的全文检索性能瓶颈分析3.1 索引构建与维护开销3.2 查询性能瓶颈3.3 锁机制与并发性能问…

应用软件格式渗透 利用word去渗透(MS10-087)

用到的靶机为:WinXP漏洞原理:一、漏洞触发机制与核心组件 漏洞根源:RTF文件解析逻辑缺陷 触发组件:Microsoft Word的RTF(Rich Text Format)解析引擎,具体涉及 mso.dll 模块中的 路径规范化函数&…

解密AWS VPC路由表:显式关联与隐式关联,谁决定了网络出口?

大家好,今天我们来聊一个在 AWS 云计算世界里既基础又关键的话题:VPC 路由表。 很多刚接触 AWS 的朋友,在配置网络时可能会遇到这样的困惑:为什么我的 EC2 实例无法访问互联网?为什么某些子网的网络策略和其他子网不一…

LeetCode题解---<203.移除链表元素>

文章目录题目代码及注释关键点题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,…

【JavaScript高级】构造函数、原型链与数据处理

目录构造函数和原型构造函数实例成员和静态成员构造函数的问题构造函数原型 prototype对象原型 \_\_proto\_\_constructor 构造函数构造函数、实例、原型对象三者之间的关系原型链JavaScript 的成员查找机制(规则)原型对象的this指向扩展内置对象继承cal…

项目进度与预算脱节,如何进行同步管理

项目进度与预算脱节会导致资源浪费、成本超支和项目延期。进行同步管理的方法包括:建立统一的项目进度预算管理体系、实施实时监控与反馈机制、采用项目管理工具辅助同步管理。尤其是实施实时监控与反馈机制,通过持续监测进度与预算的匹配情况&#xff0…