亦菲喊你来学习之机器学习(6)--逻辑回归算法

news2024/12/1 0:36:06

逻辑回归

逻辑回归(Logistic Regression)是一种广泛使用的统计方法,用于解决分类问题,尤其是二分类问题。尽管名字中有“回归”二字,但它实际上是一种分类算法,因为它试图通过线性回归的方式去预测一个事件的发生概率(即属于某个类别的概率),然后根据设定的阈值(通常是0.5)来分类。

注意哦!逻辑回归其实是分类算法!!!

逻辑回归模型

逻辑回归模型使用逻辑函数(通常是sigmoid函数)将线性回归的预测值转换为概率值。sigmoid函数的公式如下:

在这里插入图片描述

其中,z 是线性回归模型的预测值,即 z=β0+β1x1+β2x2+⋯+βnxn,其中 β0 是截距,β1,β2,…,βn 是回归系数,x1,x2,…,xn 是特征值。

逻辑回归模型的训练过程主要是找到最佳的回归系数(即 β 值),使得模型的预测概率与实际标签之间的差异最小。这通常通过最大化似然函数(在逻辑回归中,常用的是对数似然函数)来实现,也就是最小化负对数似然损失(Negative Log Likelihood Loss, NLL Loss)。

总的来说:就是通过概率来分类。

实现模型

对于实现一个算法模型,我们一般从以下几个方面来完成:

  1. 训练模型
  2. 测试模型

训练模型

  1. 收集数据

  1. 数据预处理
import pandas as pd
data = pd.read_csv('creditcard.csv') #读取数据
data = data.drop('Time',axis=1) #去除无关变量

from sklearn.preprocessing import StandardScaler #导入归一化方法
scaler = StandardScaler()
#对需要归一化处理的数据归一化,避免权重影响
data['Amount'] = scaler.fit_transform(data[['Amount']])
  1. 绘制图像,查看正负样本个数
import matplotlib.pyplot as plt
from pylab import mpl

#字体调整
mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False

#对样本中每个类别的数量计数,将其可视化,观察数据
lei_count = pd.value_counts(data['Class'])
plt.title('样本数')
plt.xlabel('类别')
plt.ylabel('数量')

lei_count.plot(kind = 'bar')
plt.show()
  1. 随机分割数据集与测试集

使用train_test_split方法,在数据中随机抽取数据作为训练集与测试集

x = data.drop(["Class"],axis=1)
y = data.Class

from sklearn.model_selection import train_test_split

train_x,test_x,train_y,test_y = \
    train_test_split(x,y,test_size=0.3,random_state=0)	#test_size表示抽取的的测试集所占的百分比
  1. 交叉验证,选择较优的惩罚因子

在逻辑回归的算法中,逻辑模型的参数中,有一参数为正则化强度C,越小的数值表示越强的正则化。我们要进行调参数,看看哪个惩罚因子最为合适,使模型拟合效果更好:

#交叉验证选择较优的惩罚因子
scores = []
c_param_range = [0.01,0.1,1,10,100] #参数:一般常用的惩罚因子

for i in c_param_range:
    lr = LogisticRegression(C = i,penalty='l2',solver='lbfgs',max_iter=1000)
    # C表示正则化强度,越小的数值表示越强的正则化。防止过拟合
    score = cross_val_score(lr,x_train,y_train,cv = 8,scoring='recall')
    #交叉验证,将模型和数据集传入,对其进行划分,每份轮流作为测试集来测试模型。返回一个列表对象
    score_mean = sum(score)/len(score)
    scores.append(score_mean)
beat_c = c_param_range[np.argmax(scores)] #argmax取出最大值的索引位置
  1. 训练模型
lr = LogisticRegression(C = beat_c,penalty='l2',max_iter=1000)
lr.fit(x_train,y_train) #训练模型

测试模型

  1. 先用训练数据再次进入模型测试,查看他本身的模型训练效果怎么样:
from sklearn import metrics

train_predicted = lr.predict(x_train)
print(metrics.classification_report(y_train,train_predicted)) #绘制混淆矩阵,查看测试参数
---------------------------------------------------------------
              precision    recall  f1-score   support

           0       1.00      1.00      1.00    199019
           1       0.88      0.62      0.73       345

    accuracy                           1.00    199364
   macro avg       0.94      0.81      0.86    199364
weighted avg       1.00      1.00      1.00    199364
  1. 再用分割的测试集来测试模型:
test_predicted = lr.predict(x_test)
print(metrics.classification_report(y_test,test_predicted))
----------------------------------------------
              precision    recall  f1-score   support

           0       1.00      1.00      1.00     85296
           1       0.88      0.62      0.73       147

    accuracy                           1.00     85443
   macro avg       0.94      0.81      0.86     85443
weighted avg       1.00      1.00      1.00     85443

到这为止我们的模型就训练好啦,但是!!通过混淆矩阵我们可以发现,模型对类别为1的召回率只有0.62,这是比较差的,是什么原因导致的呢?

其实,在训练模型时第三步查看样本个数时,我们通过图片可以发现样本数量极度不均衡,致使训练时,类别1的数据训练不够,拟合欠缺,那么我们该如何处理呢?

处理方法有过采样(扩充样本数量)和下采样(数量多的将数据量向数量少的类别数量靠近),可以解决这个问题!我们下篇来介绍。

总结

本篇介绍了:

  1. 什么是逻辑回归:逻辑回归其实是分类算法!!!
  2. 逻辑回归算法如何分类:计算每个数据的属于哪个类别的概率,判断属于哪个类。(默认阈值0.5为分界线)
  3. 训练模型:
    1. 使用train_test_split方法,在数据中随机抽取数据作为训练集与测试集,使测试更有说服力。
    2. 交叉验证,选择较优的惩罚因子

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

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

相关文章

【计算机组成原理】二、数据的表示和运算:3.算术逻辑单元ALU(逻辑运算、加法器)

4.运算器ALU 文章目录 4.运算器ALU4.1逻辑运算非(NOT)与(AND)或(OR)异或(XOR)同或(XNOR) 4.2加法器4.2.1一位全加器4.2.2串行加法器4.2.3并行加法器 4.3ALU功…

金九银十简历石沉大海?别投了,软件测试岗位饱和了....

各大互联网公司的接连裁员,政策限制的行业接连消失,让今年的求职雪上加霜,想躺平却没有资本,还有人说软件测试岗位饱和了,对此很多求职者深信不疑,因为投出去的简历回复的越来越少了。 另一面企业招人真的…

IDEA翻译插件-Translation

简介 Translation是一个为IntelliJ IDEA和其他基于JetBrains的IDE(如 PyCharm、WebStorm 等)设计的插件。这个插件的主要功能是帮助开发者在编写代码或文档时快速翻译文本。它集成了谷歌翻译、微软翻译、DeepL 翻译、OpenAI 翻译、有道翻译等众多翻译引…

CISAW安全运维认证考试重点内容介绍

CISAW安全运维认证是信息、运维方面非常重要的证书,从事与信息安全以及运维方向的人员都会考这个证书,其持有证书在工作上带来极大的帮助。 那么,CISAW安全运维认证考试重点内容是什么?就目前的问题给大家一些列讲解,…

vue-element-admin解决三级目录的KeepAlive缓存问题(详情版)

vue-element-admin解决三级目录的KeepAlive缓存问题(详情版) 本文章将从问题出现的角度看看KeepAlive的缓存问题,然后提出两种解决方法。本文章比较详细,如果只是看怎么解决,代码怎么改,请前往配置版。 一…

2007-2022年上市公司资源节约数据

2007-2022年上市公司资源节约数据 1、时间:2007-2022年 2、来源:上市公司年报、社会责任报告、上市公司网站信息 3、指标:水资源节约、电力节约、原煤节约、天然气节约、汽油节约、柴油节约、集中供热节约、折算成统一标准煤共计节约 4、…

stl容器适配器 stack与queue,priority_queue

目录 一.stack 1.stack的使用 2.适配器 3.stack相关的题目 最小栈. - 力扣(LeetCode) ​编辑 栈的弹出压入序列栈的压入、弹出序列_牛客题霸_牛客网 用两个栈实现队列. - 力扣(LeetCode) 4.stack的模拟实现 二.queue队列…

一起学习LeetCode热题100道(48/100)

48.路径总和 III(学习) 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只…

前端获取主流浏览器的信息进行判断 实现自适应内容(360浏览器)

我一般都是用谷歌浏览器进行开发,在开发大屏可视化的时候出现了浏览器不适应的问题,需要不同的浏览器进行判断,360返回 Chrome 内核, 获取的信息无法跟谷歌浏览器区别 这个是中国的主流浏览器: 比如谷歌可以正常显示&…

十要素超声波气象传感器

十要素微型气象传感器(也称为全要素微型气象传感器)通常具有以下几个基本功能: 温度测量:测量环境的温度,并提供实时温度数据。 湿度测量:测量环境的湿度水平,并提供实时湿度数据。 大气压力测…

【安全靶场】-DC-5

❤️博客主页: iknow181🔥系列专栏: 网络安全、 Python、JavaSE、JavaWeb、CCNP🎉欢迎大家点赞👍收藏⭐评论✍ 一、收集信息 1.用burp测试穷尽文件名 使用两个字典 发现footer页面 可能存在文件包含,因为co…

记一次 MIGO 短缺BA 非限制使用 35,713.970 USD : 100002919-Z040 100Z 1000 99991231

mb52数量 一想到该物料的启用了批次管理 , 应该去查一下 批次管理的底表 MCHB (各种库存地表见 SAP MM 库存分类及对应的存储表-CSDN博客) 实际调用migo的参数 这下明确了,总共一起60000多是足够调出的,但是99991231这…

zabbix通过snmp监控物理服务器硬件信息

背景:公司的华三服务器周末的时候市电跳闸,监控没有设置告警,幸好有UPS供电,工作日发现问题后市电恢复。 方法: 1、登陆物理服务器带外,开放snmp并设置团体名 2、找一台安装了nmap的机器,查看…

python使用gurobi用法解析和案例

文章目录 1. Gurobi Python接口的基本使用2. 变量类型3. 目标函数4. 约束条件5. 模型求解和结果分析6. 常见注意事项7. gurobi代码示例 1. Gurobi Python接口的基本使用 在Python中使用Gurobi进行优化,通常需要按以下步骤操作: 导入Gurobi包 &#xff…

【Java】—— 使用Java在控制台实现海豚记账软件

目录 1. 项目背景 2. 代码思路 2.1 主要功能 2.2 数据结构 2.3 控制流程 3. 实现步骤 3.1 初始化变量 3.2 显示菜单 3.3 处理用户输入 3.4 退出程序 4. 知识点解析 4.1 Scanner类 4.2 字符与数字转换 4.3 循环与条件判断 5.完整代码 6.运行结果展示 1. 项目背景…

【秋招笔试】8.18字节跳动秋招(第一场)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 编程一对一辅导 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收…

IOS 12 自定义用户协议对话框

实现效果 实现逻辑 本文使用QMUI里面提供的控制器 自定义控件 实现。 添加依赖 #腾讯开源的UI框架,提供了很多功能,例如:圆角按钮,空心按钮,TextView支持placeholder #https://github.com/QMUI/QMUIDemo_iOS #http…

《向量数据库指南》——解决方案:采用安全、高性能的Milvus Cloud向量数据库,赋能Dopple AI的创新与发展

解决方案:采用安全、高性能的Milvus Cloud向量数据库,赋能Dopple AI的创新与发展 在当今这个数据驱动的时代,向量数据库作为机器学习、人工智能等领域的重要基础设施,正发挥着越来越关键的作用。对于Dopple AI这样一个致力于创新的前沿团队来说,选择一个合适的向量数据库…

盘点8大跨境电商平台发展前景及选品分析(亚马逊、速卖通篇)

跨境电商行业在全球范围内持续发展,各大平台各有特色,针对不同的市场和消费者群体提供多元化的服务。以下是亚马逊、Shopee、TikTok、TEMU、速卖通、eBay、Lazada、SHEIN这八大跨境电商平台的背景、主要针对群体、消费者购物偏好及选品建议的简要介绍&am…

C语言:函数详解(1)

目录 一、函数的概念 二、库函数 三、自定义函数 3.1 函数的语法形式 3.2 函数的举例 四、形参和实参 4.1 实参 4.2 形参 4.3 实参与形参的关系 一、函数的概念 数学中我们其实就见过函数的概念,比如:⼀次函数 ykxb ,k和b都是常数&am…