《机器学习》——逻辑回归(下采样)

文章目录

    • 什么是下采样?
    • 为什么在逻辑回归中要使用下采样?
    • 使用下采样和不使用下采样的区别
    • 实例
      • 1、实例内容
      • 2、实例步骤

什么是下采样?

  • 下采样(Down - Sampling)是一种数据处理技术,主要用于处理数据集中不同类别样本数量不均衡的情况。它通过减少数据集中数量较多类别的样本数量,使不同类别样本的数量达到相对平衡。

为什么在逻辑回归中要使用下采样?

  • 在逻辑回归应用于分类任务时,如果数据集中存在类别不平衡的情况,例如正类样本只占总样本数的 1%,而负类样本占 99%。逻辑回归模型在训练过程中会倾向于将更多的样本预测为负类,因为这样可以获得较高的准确率(把所有样本都预测为负类,准确率也能达到 99%)。下采样可以平衡不同类别样本的数量,使得逻辑回归模型能够更加关注少数类的特征,从而提高模型对少数类的分类性能。

使用下采样和不使用下采样的区别

  • 不使用下采样,是对原始数据直接进行训练集和测试集的划分,进行模型的性能测试。
  • 使用下采样是,对原始数据进行划分后再对训练集进行划分,划分成y值相同数量相同的训练集,原始数据划分的测试集,当测试集。

实例

我们从实例中观察下采样。

1、实例内容

本次实例是对银行的数据进行分类的问题,数据部分内容为在这里插入图片描述
共有28万多条数据。其中Time为无关特征,class为分类特征有两个分类分别为0、1,其余全部为特征变量。如图看看出Amount里的数据与其他特征的数据有区别,故此数据处理中要对Amount进行z标准化处理。

2、实例步骤

  • 导入数据
  • 处理数据
  • 下采样处理数据
  • 画图查看样本个数
  • 抽取数据进行划分
  • 选择较优惩罚因子
  • 建立最优模型并训练数据
  • 测试数据并评估模型性能
  • 导入数据
    需要数据测试的自取通过网盘分享的文件:creditcard.csv
    链接: https://pan.baidu.com/s/1BIjUp16GBRlkbmN86XjCuw 提取码: rqhx
data = pd.read_csv('creditcard.csv')
  • 处理数据
"""数据标准化:z标准化"""
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
a = data[['Amount']] # 返回dataframe数据,而不是series
data['Amount']=scaler.fit_transform(data[['Amount']])data = data.drop(['Time'],axis=1) # 删除无用列
  • 下采样处理数据
"""下采样解决样本不均衡问题"""
positive_eg = data[data["Class"]==0] # 获取到了所有标签(Class=0)的数据
negative_eg = data[data["Class"]==1] # 获取到了所有标签(Class=1)的数据
np.random.seed(seed=0) # 随机种子
positive_eg = positive_eg.sample(len(negative_eg)) # sample表示随机从参数里面选择参数data_c = pd.concat([positive_eg,negative_eg]) # 是把两个pandas数据组合为一个
print(data_c)

在这里插入图片描述

  • 画图查看样本个数
"""绘制图形,查看正负样本个数"""
mpl.rcParams['font.sans-serif']=['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus']=False
labels_count = pd.value_counts(data_c["Class"]) # 统计表格data_c中class这一列中,为0的数量和为1的数量
plt.title('正负例样本数') # matplotlib直接显示中文?
plt.xlabel('类别')
plt.ylabel('频数')
labels_count.plot(kind='bar')
plt.show()

在这里插入图片描述
可以看到训练集中class为0和1的样本数量。

  • 抽取数据进行划分
    其中test_size=0.3代表从被切分数据的百分之三十。
"""训练集使用下采样数据,测试集使用原始数据进行预测"""
from sklearn.model_selection import train_test_split# 抽选数据后,对下采样数据划分
x = data_c.drop("Class",axis=1) # 对data_c数据进行划分,以y轴
y = data_c.Class
x_train,x_test,y_train,y_test= \train_test_split(x,y,test_size=0.3,random_state=0)# 对原始数据集进行切分,用于后期的测试
x_whole =data.drop("Class",axis=1)
y_whole = data.Class
x_train_w,x_test_w,y_train_w,y_test_w= \train_test_split(x_whole,y_whole,test_size=0.2,random_state=0)
  • 选择较优惩罚因子

在这里插入图片描述

"""执行交叉验证操作
scoring:可选"accuracy(精度)"、recall(召回率)、roc_auc(roc值)neg_mean_squared_error(均方误差)
"""
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import  cross_val_score # 交叉验证的函数# 交叉验证选择较优惩罚因子
scores = []
c_param_range = [0.01,0.1,1,10,100]
for i in c_param_range:# 第一个词循环的时候C=0.01,5个逻辑回归模型lr = LogisticRegression(C=i,penalty='l2',solver='lbfgs',max_iter=1000)score = cross_val_score(lr,x_train,y_train,cv=10,scoring='recall') # 交叉验证score_mean = sum(score)/len(score) # 交叉验证后的值召回率scores.append(score_mean) # 里面保存了所有的交叉验证召回率print(score_mean) # 将不同的c参数分别传入模型,分别看看哪个模型效果更好best_c = c_param_range[np.argmax(scores)] # 寻找到scores中最大值的对应的c参数

在这里插入图片描述

  • 建立最优模型并训练数据
  • 自测:
lr = LogisticRegression(C=best_c,penalty='l2',max_iter=1000)
lr.fit(x_train,y_train)
  • 测试数据并评估模型性能
  • 分别对原始数据划分的测试集和原始数据的训练集划分的测试集进行训练:
from sklearn import metrics# 传入下采样后的测试数据
test_s_predicted = lr.predict(x_test_w)
print(metrics.classification_report(y_test_w, test_s_predicted))# 传入原数据的测试数据
test_predicted = lr.predict(x_test)
print(metrics.classification_report(y_test, test_predicted))

在这里插入图片描述
因为银行主要观察特征为1的人,宁愿原本为0的预测为1,也不愿判断错一个1的样本。故主要看召回率,从测试结果可以看出准确率还是挺高的,也没有产生过拟合和欠拟合。

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

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

相关文章

Python实现接口签名调用

目录: 1、第三方接口签名调用2、调用结果 1、第三方接口签名调用 import json import requests import hashlib import time import hmac access_key xxxxxxxxxxxxxxx secret_key xxxxxxxxxxxxxxx # 应用信息 def _wps4_sig(method, url, date, body): print(body)if bod…

什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系

我不知道有多少人和我一样,没学习过.netCore,想要学习,但是版本号太多就蒙了,不知道学什么了,这里解释下各个版本的关系 我们一般开始学习微软的时候,都是开始学习的.netframework,常用的就是4…

对比式机器学习揭示了跨物种共享和特异性的脑功能结构|文献速递-视觉大模型医疗图像应用

Title 题目 Contrastive machine learning reveals species -shared and -specific brain functional architecture 对比式机器学习揭示了跨物种共享和特异性的脑功能结构 01 文献速递介绍 猕猴被广泛作为人类的动物模型,用于研究大脑和行为的关键方面&#xf…

中药和西药的区别

中药和西药的区别 一、定义与来源 (一)中药 中药主要是在中国传统医学理论指导下用于预防、诊断、治疗疾病或调节人体机能的药物。它的来源广泛,包括植物药、动物药、矿物药等。植物药是中药的主要组成部分,例如人参&#xff0…

PostgreSQL学习笔记(一):PostgreSQL介绍和安装

目录 概念 PostgreSQL简介 PostgreSQL的关键特性 1. 标准兼容性 2. 扩展性 3. 数据完整性和可靠性 4. 丰富的数据类型 5. 查询能力 6. 事务和并发控制 7. 扩展和插件 8. 跨平台和多语言支持 9. 高可用性和扩展性 常用场景 安装 Linux apt安装 下载安装包安装 客…

Python跨年烟花

目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…

ABP框架8——仓储的作用及其基础Demo

一、使用仓储的好处 1.提高CRUD接口复用性2.解耦业务逻辑(BLL)和增删改查(CRUD),换ORM特别方便,不需要改应用层,直接改仓储层3.做复杂查询4.事务支持 二、Demo public class BookRepository …

毕设中所学

1、交叉引用 在毕业设计论文Word中交叉引用参考文献_交叉引用如何标注[1~6]-CSDN博客 另:将标号或其他文字改为上标的快捷键是CtrlShift。 图的交叉引用一样,修改引用类型即可。 2、ENVI安装 ENVI5.6 安装教程,新手入门(超详细…

git 问题解决记录

在用git上传文件到仓库中出现了2个问题 第一个问题: 需要修改git的代理端口与电脑自己的代理服务器设置中的端口和VPN的端口保持一致, 比如我的端口是7897,就设置 git config --global http.proxy http://127.0.0.1:7897 git config --glo…

DATACOM-DHCP-复习-实验

DHCP 概述工作原理DHCP分配机制 配置配置基于全局地址池的DHCP服务器配置DHCP Relay中继验证 实验配置DHCP中继 参考 概述 动态主机配置协议DHCP(Dynamic Host Configuration Protocol)是一种网络管理协议,用于集中对用户IP地址进行动态管理和…

RK3588+麒麟国产系统+FPGA+AI在电力和轨道交通视觉与采集系统的应用

工业视觉识别系统厂家提供的功能主要包括: 这些厂家通过先进的视觉识别技术,实现图像的采集、处理与分析。系统能够自动化地完成质量检测、物料分拣、设备监控等任务,显著提升生产效率和产品质量。同时,系统具备高度的灵活性和可扩…

物联网控制期末复习

第3章 物联网控制系统的过程通道设计 3.1 模拟量输出通道 3.1.1单模拟量输出通道的构成 计算机控制系统的模拟量输出通道将计算机产生的数字控制信号转换为模拟信号(电压或电流)作用于执行机构,以实现对被控对象的控制。 多D/A结构&#…

python3中的生成器

一. 简介 前面简单学习了 python3中的迭代器,本文来学习 python3中生成器。 在 Python 中,生成器(Generator)是一种特殊的迭代器,在 Python 中,生成器(Generator)是一种特殊的迭代…

数据库运维学习选择

在如今国产化浪潮澎湃的 IT 领域,数据库运维宛如一座充满机遇的宝藏,等待着新人去挖掘。如果你像曾经的我一样,非科班出身、毫无基础,别慌,我以多年奋战在一线的经验,为你照亮前行的路。 一、基础奠基&…

2501d,jingo优化

原文 大家好,我重构和优化了一下jin.go这里: 我去掉了vibe.d依赖,因为它又慢又大,而且我无法与2版本交朋友.当仅运行1000个vibe纤程时,不仅应用崩溃,甚至图形系统驱动也崩溃一次,这需要重启笔记本电脑. 当前,我用小栈大小的本地流(4kb)解决. 我真很期待photon的稳定性,以恢复支…

js的一些处理

1.翻转字符串 let str abcdef str str.split().reverse().join() console.log(str) 因此想到了我之前写的截取字符串获取参数跳转,在写一遍 let str nameJack&age18&gender男 let list str.split(&); let obj {} list.forEach((v)>{ …

vue3 css实现文字输出带光标显示,文字输出完毕,光标消失的效果

Vue实现过程如下&#xff1a; <template><div ><p ref"dom_element" class"typing" :class"{over_fill: record_input_over}"></p></div> </template> <script setup> import {onMounted, ref} from…

node.js之---集群(Cluster)模块

为什么会有集群&#xff08;Cluster&#xff09;模块&#xff1f; 集群&#xff08;Cluster&#xff09;模块的作用 如何使用集群&#xff08;Cluster&#xff09;模块&#xff1f; 为什么会有集群&#xff08;Cluster&#xff09;模块 Node.js 是基于 单线程事件驱动 模型的…

[C++]vector(超详细)

在学习完了string后&#xff0c;我们来学习新的STL容器vector&#xff0c;是真正的属于STL中的一员&#xff0c;vector也是STL的基础容器&#xff0c;英文释义是向量&#xff0c;其实实质上就是顺序表。 在这个部分我们会学习的非常快&#xff0c;第一个原因是由于vector的设计…

2025年度全国会计专业技术资格考试 (甘肃考区)报名公告

2025年度全国会计专业技术资格考试 &#xff08;甘肃考区&#xff09;报名公告 按照财政部、人力资源和社会保障部统一安排&#xff0c;2025年度全国会计专业技术初级、中级、高级资格考试报名即将开始&#xff0c;现将甘肃考区有关事项通知如下&#xff1a; 一、报名条件 …