【Sklearn】基于逻辑回归算法的数据分类预测(Excel可直接替换数据)

news2024/11/24 5:19:50

【Sklearn】基于逻辑回归算法的数据分类预测(Excel可直接替换数据)

  • 1.模型原理
  • 2.模型参数
  • 3.文件结构
  • 4.Excel数据
  • 5.下载地址
  • 6.完整代码
  • 7.运行结果

1.模型原理

逻辑回归是一种用于二分类问题的统计学习方法,尽管名字中含有“回归”,但实际上是一种分类算法。它的基本原理是通过建立一个线性模型,然后将线性输出映射到一个概率值,最终将这个概率值转换成二分类的预测结果。

下面是逻辑回归的基本原理:

  1. 线性模型: 首先,逻辑回归建立一个线性模型,将特征的线性组合映射到一个连续的实数范围。对于一个有n个特征的样本,线性模型可以表示为:
    z = b + w 1 x 1 + w 2 x 2 + … + w n x n z = b + w_1x_1 + w_2x_2 + \ldots + w_nx_n z=b+w1x1+w2x2++wnxn
    其中, z z z是线性组合的结果, b b b是偏差项(截距), w i w_i wi是特征的权重, x i x_i xi是对应的特征值。

  2. Sigmoid函数(Logistic函数): 为了将线性模型的输出转换成概率值,逻辑回归使用Sigmoid函数(也称为Logistic函数)来实现这个映射。Sigmoid函数将任意实数映射到0到1的区间,它的公式为:
    σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1
    其中, e e e是自然对数的底数。

  3. 概率预测: 经过Sigmoid函数映射后, z z z被转换成了一个0到1之间的概率值,表示样本属于正类的概率。对于二分类问题,通常将概率大于等于0.5的预测为正类,小于0.5的预测为负类。

  4. 决策边界: 在训练过程中,逻辑回归通过调整权重 w i w_i wi和偏差 b b b来拟合训练数据。拟合的过程实际上是在找到一个适合的决策边界,将不同类别的样本分开。决策边界可以是一个超平面,使得在超平面上的点被分类为正类,超平面之外的点被分类为负类。

  5. 损失函数和优化: 逻辑回归使用最大似然估计来确定参数,即找到能够使得观测数据出现的概率最大的参数。损失函数常用的是对数似然损失函数。模型通过优化算法(如梯度下降)来最小化损失函数,从而找到最佳的权重 w i w_i wi和偏差 b b b

总之,逻辑回归通过线性模型和Sigmoid函数将特征映射到概率值,然后通过优化算法来调整模型参数,使得概率预测尽可能地与实际标签一致,从而实现对样本的分类预测。

2.模型参数

LogisticRegression类的构造函数允许你传递一系列参数来自定义模型的行为。你可以根据需要修改这些参数以优化模型的性能。以下是一些常用的参数及其说明:

  1. penalty: 正则化项,可以是 “l1”、“l2”、“elasticnet” 或 “none”。默认是 “l2”。

  2. C: 正则化强度的倒数,必须为正数。较小的值表示更强的正则化。默认为1.0。

  3. solver: 优化算法,可以是 “newton-cg”、“lbfgs”、“liblinear”、“sag” 或 “saga”。默认是 “lbfgs”。

  4. max_iter: 最大迭代次数,用于算法收敛。默认为100。

  5. multi_class: 多分类问题的策略,可以是 “auto”、“ovr” 或 “multinomial”。默认是 “auto”。

  6. random_state: 随机数生成器的种子,用于重现随机初始化。

  7. class_weight: 类别权重,用于处理不平衡数据集。

  8. tol: 收敛容忍度,用于控制算法停止的条件。

等等。

你可以在创建LogisticRegression对象时,通过参数传递来修改这些选项。例如:

from sklearn.linear_model import LogisticRegression

model = LogisticRegression(penalty='l1', C=0.1, solver='saga', max_iter=500)

在这个例子中,我们使用了不同于默认值的正则化方式、正则化强度、优化算法和最大迭代次数。

你可以根据自己的数据和任务需求来调整这些参数,以获得更好的模型性能。不同的参数组合可能会对模型的性能产生不同的影响,因此在选择参数时可以尝试不同的组合,并根据交叉验证等方法来选择最佳的参数设置。

3.文件结构

在这里插入图片描述

iris.xlsx						% 可替换数据集
Main.py							% 主函数

4.Excel数据

在这里插入图片描述

5.下载地址

- 资源下载地址

6.完整代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns

def logistic_regression_classification(data_path, test_size=0.2, random_state=42):
    # 加载数据
    data = pd.read_excel(data_path)

    # 分割特征和标签
    X = data.iloc[:, :-1]  # 所有列除了最后一列
    y = data.iloc[:, -1]   # 最后一列

    # 划分训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state)

    # 创建逻辑回归模型
    # 1. ** penalty: ** 正则化项,可以是"l1"、"l2"、"elasticnet"或"none"。默认是"l2"。
    # 2. ** C: ** 正则化强度的倒数,必须为正数。较小的值表示更强的正则化。默认为1.0。
    # 3. ** solver: ** 优化算法,可以是"newton-cg"、"lbfgs"、"liblinear"、"sag"或"saga"。默认是"lbfgs"。
    # 4. ** max_iter: ** 最大迭代次数,用于算法收敛。默认为100。
    # 5. ** multi_class: ** 多分类问题的策略,可以是"auto"、"ovr"或"multinomial"。默认是"auto"。
    # 6. ** random_state: ** 随机数生成器的种子,用于重现随机初始化。
    # 7. ** class_weight: ** 类别权重,用于处理不平衡数据集。
    # 8. ** tol: ** 收敛容忍度,用于控制算法停止的条件。
    model = LogisticRegression(penalty='l1', C=0.1, solver='saga', max_iter=1000)

    # 在训练集上训练模型
    model.fit(X_train, y_train)

    # 在测试集上进行预测
    y_pred = model.predict(X_test)

    # 计算准确率
    accuracy = accuracy_score(y_test, y_pred)
    return confusion_matrix(y_test, y_pred), y_test.values, y_pred, accuracy

if __name__ == "__main__":
    # 使用函数进行分类任务
    data_path = "iris.xlsx"
    confusion_mat, true_labels, predicted_labels, accuracy = logistic_regression_classification(data_path)

    print("真实值:",true_labels)
    print("预测值:", predicted_labels)
    print("准确率:{:.2%}".format(accuracy))

    # 绘制混淆矩阵
    plt.figure(figsize=(8, 6))
    sns.heatmap(confusion_mat, annot=True, fmt="d", cmap="Blues")
    plt.title("Confusion Matrix")
    plt.xlabel("Predicted Labels")
    plt.ylabel("True Labels")
    plt.show()

    # 用圆圈表示真实值,用叉叉表示预测值
    # 绘制真实值与预测值的对比结果
    plt.figure(figsize=(10, 6))
    plt.plot(true_labels, 'o', label="True Labels")
    plt.plot(predicted_labels, 'x', label="Predicted Labels")

    plt.title("True Labels vs Predicted Labels")
    plt.xlabel("Sample Index")
    plt.ylabel("Label")
    plt.legend()
    plt.show()

7.运行结果

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

ORCA优化器浅析——IMDRelation Storage type of a relation GP6与GP7对比

如上图所示IMDRelation作为Interface for relations in the metadata cache,其定义了Storage type of a relation表的存储类型,如下所示: enum Erelstoragetype {ErelstorageHeap,ErelstorageAppendOnlyCols,ErelstorageAppendOnlyRows,Erels…

如何使用CSS实现一个模态框(Modal)效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现模态框(Modal)效果⭐ HTML 结构⭐ CSS 样式⭐ JavaScript⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎…

重磅:谷歌发布多平台应用 AI 编程神器

前几天, 谷歌发布了一个多平台应用开发神器:IDX 。 IDX 背靠 AI 编程神器 Codey,支持 React、Vue 等框架,还能补全、解释代码。 更有特色的一点就是:这是一款基于浏览器的开发全栈、用于多平台应用开发的工具。 这款开…

C语言题目的多种解法分享 2之字符串左旋和补充题

前言 有的时候,这个系列专栏中的解法之间并无优劣,只是给大家提供不同的解题思路 我决定将代码实现的过程写成注释,方便大家直接找到对应的函数,只有需要补充说明的知识才会单拿出来强调 这个系列的文章会更的比较慢&#xff0…

级联(数据字典)

二级级联: 一:新建两个Bean 父级: /*** Description 数据字典* Author WangKun* Date 2023/7/25 10:15* Version*/ Data AllArgsConstructor NoArgsConstructor TableName("HW_DICT_KEY") public class DictKey implements Seri…

学习笔记整理-JS-06-函数

一、函数基本使用 1. 什么是函数 函数就是语句的封装,可以让这些代码方便地被复用。函数具有"一次定义,多次调用"的优点。使用函数,可以简化代码,让代码更具有可读性。 2. 函数的定义和调用 和变量类似,函…

C++:模拟实现list及迭代器类模板优化方法

文章目录 迭代器模拟实现 本篇模拟实现简单的list和一些其他注意的点 迭代器 如下所示是利用拷贝构造将一个链表中的数据挪动到另外一个链表中&#xff0c;构造两个相同的链表 list(const list<T>& lt) {emptyinit();for (auto e : lt){push_back(e);} }void test_…

【ES】【elasticsearch】分布式搜索

文章目录 ☀️安装elasticsearch☀️1.部署单点es&#x1f338;1.1.创建网络&#x1f338;1.2.下载镜像&#x1f338;1.3.运行 ☀️2.部署kibana&#x1f338;2.1.部署&#x1f338;2.2.DevTools ☀️3.安装IK分词器&#x1f338;3.1.在线安装ik插件&#xff08;较慢&#xff0…

ARM汇编快速入门

本文主要分享如何快速上手ARM汇编开发的经验、汇编开发中常见的Bug以及Debug方法、用的Convolution Dephtwise算子的汇编实现相对于C版本的加速效果三方面内容。 前言 神经网络模型能够在移动端实现快速推理离不开高性能算子&#xff0c;直接使用ARM汇编指令来进行算子开发无疑…

ad+硬件每日学习十个知识点(32)23.8.12 (元器件封装、PCB封装、3D的PCB封装)

文章目录 1.元器件封装属性值说明2.PCB封装标准说明&#xff08;M、N、L&#xff09;3.电阻的PCB封装&#xff08;阻焊层&#xff09;4.电感的PCB封装&#xff08;CD、CDRH&#xff09;1.CD31的意思是&#xff0c;直径3mm&#xff0c;高度1mm![在这里插入图片描述](https://img…

【SQL应知应会】索引(二)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 索引 • MySQL版 前言一、索引1.简介2.创建2.1 索引…

Gradio——快速部署可视化人智能应用

前言 Gradio是一个开源的Python库&#xff0c;用于快速构建机器学习和数据科学演示的应用。它可以帮助你快速创建一个简单漂亮的用户界面&#xff0c;以便向客户、合作者、用户或学生展示你的机器学习模型。此外&#xff0c;还可以通过自动共享链接快速部署模型&#xff0c;并获…

IntelliJ IDEA热部署:JRebel插件的安装与使用

热部署 概述JRebel 概述 热部署&#xff0c;指修改代码后&#xff0c;无需停止应用程序&#xff0c;即可使修改后的代码生效&#xff0c;其有利于提高开发效率。 热部署方式&#xff1a; 手动热部署&#xff1a;修改代码后&#xff0c;重新编译项目&#xff0c;然后启动应用程…

【软件测试】Linux系统下安装jdk配置环境变量(详细步骤)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、安装环境 操作…

UGUI事件系统EventSystem

一. 事件系统概述 Unity的事件系统具有通过鼠标、键盘、游戏控制柄、触摸操作等输入方式&#xff0c;将事件发送给对象的功能。事件系统通过场景中EventSystem对象的组件EventSystem和Standalone Input Module发挥功能。EventSystem对象通常实在创建画布的同时被创建的&#xf…

c++杂谈-5

目录 一、一些c11新特性1. decltype关键字及函数后置返回类型2. 函数后置返回类型 二、c的内存模型三、函数指针和回调函数四、函数模版的注意事项 一、一些c11新特性 1. decltype关键字及函数后置返回类型 在C11中&#xff0c;decltype操作符&#xff0c;用于查询表达式的数…

HarmonyOS NEXT新能力,一站式高效开发HarmonyOS应用

2023年8月6日华为开发者大会2023&#xff08;HDC.Together&#xff09;圆满收官&#xff0c;伴随着HarmonyOS 4的发布&#xff0c;华为向开发者发布了汇聚所有最新开发能力的HarmonyOS NEXT开发者预览版&#xff0c;并分享了围绕“一次开发&#xff0c;多端部署” “可分可合&a…

通过Microsoft Loopback Adapter实现虚拟机和物理机的通信

问题 问&#xff1a;不借助路由器或交换机的情况下&#xff0c;能不能实现主机和虚拟及之间两个软件的通信呢&#xff1f;要求主机和虚拟及均有独立的ip地址&#xff0c;从而进行指定源的组播通信。 答&#xff1a;可以。通过借助虚拟网络适配器&#xff0c;不需要路由器或交…

深度思考rpc框架面经系列之三

6 一个rpc框架的请求调用的流程&#xff08;小红书面试&#xff09; 6.1 讲讲rpc调用原理&#xff0c;比如服务怎么发现&#xff0c;怎么调用&#xff0c;提供者怎么响应。怎么去请求&#xff0c;又怎么回来的 一个RPC&#xff08;远程过程调用&#xff09;框架的核心目的是允…

百度飞浆实战-手写数字识别

目录 参考建模过程1、数据加载和预处理2、模型的网络设计和开发模型组网 3、模型训练 代码实战1、打开aistudio找到项目 参考 视频教程 PaddleAPI DOC 建模过程 1、数据加载和预处理 飞桨框架帮助我们将MNIST数据集进行了内置 数据集名称&#xff1a; MNIST 数据集官网 &am…