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

【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 LogisticRegressionmodel = 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 snsdef 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, accuracyif __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.hqwc.cn/news/66437.html

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

相关文章

MySQL 事务原理:锁机制

文章目录 一、锁类型1.1 全局锁1.2 表级锁1.2.1 表锁1.2.2 元数据锁1.2.3 意向锁1.2.4 自增锁 1.3 行级锁1.3.1 记录锁1.3.2 间隙锁1.3.3 临键锁1.3.4 插入意向锁 1.4 锁的兼容性 二、锁的CUDP2.1 查询2.2 删除、更新2.3 插入 三、锁的对象四、并发死锁4.1 相反加锁顺序导致死锁…

三维可视化平台有哪些?Sovit3D可视化平台怎么样?

随着社会经济的发展和数字技术的进步,互联网行业发展迅速。为了适应新时代社会发展的需要,大数据在这个社会经济发展过程中随着技术的进步而显得尤为重要。同时,大数据技术的快速发展进程也推动了可视化技术的飞速发展,国内外各类…

老网工必备好物,分享15个网络监控神器

下午好,我的网工朋友。 近年来,随着虚拟、云和边缘网络的增加,网络监控工具已经显得越来越重要。 在当今大多数企业中,监控混合IT环境中的网络流量对于主动网络管理至关重要。 无论是检测行为异常、占用带宽、应对新威胁&#…

springboot使用configtree读取树形文件目录中的配置

文章目录 一、介绍二、演示环境三、项目演示1. 配置文件2. 导入配置3. 检测配置属性 四、应用场景五、源码解析1. ConfigTreeConfigDataLocationResolver2. ConfigTreeConfigDataLoader 六、总结 一、介绍 相信绝大多数使用springboot开发项目的朋友们在添加配置时&#xff0c…

对约瑟夫问题的进一步思考

约瑟夫问题重述: 在计算机编程的算法中,类似问题又称为约瑟夫环 约瑟夫环:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。 例如N6,M5&#xff0…

[Mongodb 5.0]单机启动

安装完mongodb后,会自动生成下面两个目录(mongod.conf中设定的),用来存放日志和数据 /var/lib/mongo (数据目录) /var/log/mongodb (日志目录) 要启动一个单机版的mongodb,一般有两种方式: 第一种启动方式:直接使用…

Spring 使用注解开发、代理模式、AOP

使用注解开发 在Spring4之后&#xff0c;要使用注解开发&#xff0c;必须要保证AOP的包导入了 项目搭建&#xff1a; 在配置文件中导入约束&#xff0c;增加注解支持 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.spri…

双端列表 —— Deque 接口概述,使用ArrayDeque实现队列和双端队列数据结构

Deque接口简介 Deque译为双端队列&#xff0c;在双向都能作为队列来使用&#xff0c;同时可用作栈。Deque接口的方法是对称成比例的。 Deque接口继承Queue接口&#xff0c;因此具有Queue&#xff0c;Collection&#xff0c;Iterable的方法属性。 双端队列的工作原理 在常规队…

Springboot集成ip2region离线IP地名映射-修订版

title: Springboot集成ip2region离线IP地名映射 date: 2020-12-16 11:15:34 categories: springboot description: Springboot集成ip2region离线IP地名映射 1. 背景2. 集成 2.1. 步骤2.2. 样例2.3. 响应实例DataBlock2.4. 响应实例RegionAddress 3. 打开浏览器4. 源码地址&…

K8S系列一:概念入门

I. K8S概览 1.1 K8S是什么&#xff1f; K8S是Kubernetes的全称&#xff0c;官方称其是&#xff1a; Kubernetes is an open source system for managing containerized applications across multiple hosts. It provides basic mechanisms for deployment, maintenance, and …

uniapp开发小程序-分包(微信错误码:800051)

在使用uniapp开发小程序时&#xff0c;上传的时候因为文件过大&#xff0c;显示上传失败。 以下是开发过程中遇到的问题及解决方法&#xff1a; 1. 问题一&#xff1a;因为文件过大&#xff0c;显示上传失败 ①尝试过把本地使用的图片压缩到最小&#xff1b; ②把图片转换为网…

【Vue-Router】路由入门

路由&#xff08;Routing&#xff09;是指确定网站或应用程序中特定页面的方式。在Web开发中&#xff0c;路由用于根据URL的不同部分来确定应用程序中应该显示哪个内容。 构建前端项目 npm init vuelatest //或者 npm init vitelatest安装依赖和路由 npm install npm instal…