数据划分方法简述:数据离散化和均值标准差分级法(含python代码)

news2024/10/6 0:04:43

文章目录

  • 1 问题缘起
  • 2. 数据离散化
      • 等距离散
      • 等频离散
      • 聚类离散
      • 其他
  • 3. 均值标准差分级

1 问题缘起

在数学建模中,我经常遇到这样一个问题:

在某一步中,需要把数据分成好几个类别或者是按照数据大小分级划分。

放到一维数据中形象一点解释就是我有这么一条线,x轴没有任何意义,y轴代表数据的大小,我需要把这些数据分为5类(在图中切4刀),应该怎么划分?

在这里插入图片描述

经典的例子是 2023 年美赛C题 Wordle 的倒数第二问,很多团队评估了每个单词的难度系数,但是不知道怎么按照这个难度系数划分难度等级。这是个细节问题,很容易钻牛角尖。

看上去确实没什么,但是如果乱划分或者直接划分,似乎糙了点,或者说找不到什么理论依据,不严谨。

个人总结出了两类方法:

  1. 数据离散化
  2. 均值标准差分级

2. 数据离散化

注意了,这边用的是数据离散化的思想解决问题,并不是指在一开始预处理时的数据离散化。相当于为我们划分数据找了个理论依据。

这边提一下几种常见的离散化方式:

等距离散

等距分布的思想就是如果这是一个上下限已知的数据集,取数据的值域[min, max],然后再等分值域。

以这张图为例:

在这里插入图片描述

365条数据是分布在[0,1]之间,那么5等分之后的结果就是

类别1:(-∞,0.2]
类别2:(0.2,0.4]
类别3:(0.4,0.6]
类别4:(0.6,0.8]
类别5:(0.8,+∞)

新的数据落到哪个区间就算哪个类别。

python代码:

n = 5
data["score_label"] = pd.cut(x=data["score"], bins=n, labels=[str(i+1) for i in rnage(n)])

等频离散

等频分布的思想就是如果这是一个数据量已知的数据集 dataset,对数据排序得到 dataset_sorted,取排序后的数据 reset_index,按照 reset_index 等分的 dataset_sorted 离散化数据。

还是以这张图为例:

在这里插入图片描述

365条数据是分布在[0,1]之间,那么5等分之后的结果就是

类别1:(-∞,dataset_sorted[73]]
类别2:(dataset_sorted[73],dataset_sorted[146]]
类别3:(dataset_sorted[146],dataset_sorted[219]]
类别4:(dataset_sorted[219],dataset_sorted[292]]
类别5:(dataset_sorted[292],+∞)

新的数据的值落到哪个区间就算哪个类别。

python代码:

n = 5
data = data.sort_values("score").reset_index()
data["score_label"] = (data.index / data.shape[0] * (n-1)).astype(int)

聚类离散

可以用聚类的方法计算。将需要划分的数据放入聚类算法中,按照聚类的结果划分数据。一般建议K-means聚类(密度的 DBSCAN 也不错),因为没必要玩花活。

不过感觉这个方法也不严谨,因为如果我们的任务是5分类,然后我们采用K-means聚类划分,那么我们的k值势必会取5,但是k=5不一定是当前数据集的最佳聚类数量。

所以这个方法更适合在不知道需要划分为几类数据的时候使用,顺便还能确认下划分成几类比较好~

python代码:

k=5
km = KMeans(n_clusters=k).fit(data)
data["score_label"] = km.labels_

其他

当然还有基于其他数据离散化的想法:1R离散法、基于卡方分裂的离散法、二值化离散法等等等等,这边就不细讲了。具体的操作和步骤这篇讲的很棒。

3. 均值标准差分级

这个方法是我刷论文的时候偶然发现的,当时感觉是在瞎扯,没怎么关注,后来被朋友安利了一下才开始重视它。

论文是《基于加权马尔可夫模型的股票预测》:程丽娟,冯洁明。

在这里插入图片描述

大概理解了一下方法:

在这里插入图片描述

对于奇数个划分区域,使用第二个划分方法,对于偶数个划分趋于使用第一个划分方法。

当然,如果数据在两边的分布比较稀疏,导致本方法划分之后样本不平衡。我们也可以发挥下主观能动性,这样划分:

在这里插入图片描述

不过个人认为如果要追求划分结果的样本平衡,那直接用等频离散不是更香嘛

python代码:

import numpy as np
import pandas as pd
# 仅限单列

file = pd.read_csv("data.csv", encoding="utf-8-sig")
col = file.columns
print("输入你要分成几类")
choice = int(input())
print(file.describe())
mean = file.describe().loc["mean"][col[0]]
std = file.describe().loc["std"][col[0]]
ret = []
for i in range(int(choice / 2)):
    ret.insert(0, mean - (i + ((choice % 2) / 2)) * std)
    ret.append(mean + (i + ((choice % 2) / 2)) * std)
ret.insert(0, -np.inf)
ret.append(np.inf)
ret = list(set(ret))
ret.sort()
file["std_clf"] = pd.cut(x=file[col[0]], bins=ret, right=True, labels=[i+1 for i in range(len(ret)-1)])
print(file)

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

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

相关文章

InstructGPT原理讲解及ChatGPT类开源项目

InstructGPT原理讲解及ChatGPT类开源项目 Generative Pre-Trained Transformer(GPT) 是OpenAI的提出的生成式预训练语言模型,目前已经发布了GPT-1、GPT-2、GPT-3和GPT-4,未来也将发布GPT-5。 最近非常火的ChatGPT是基于Instruct…

【ChatGPT】稳定性好响应速度快可部署到国内服务器的ChatGPT 强力推荐!

朋友们,大家好,我是 jonssonyan。今天分享一个免费开源的 ChatGPT 项目,它的表现无论是响应速度还是稳定性都比 ChatGPT Plus 还要优秀,只需要有个 Access Token 或者使用热心网友提供的共享账号 就可以免费在线体验,也…

Vicuna-13B量化模型单GPU可跑

链接在这(需要科学上网) Vicuna-13B: Best Free ChatGPT Alternative According to GPT-4 🤯 | Tutorial (GPU) 有人在B站转了人家的视频 ChatGPT:在你的本地电脑上运行Vicuna-13B 🤯|教程 (GPU) 下面就是部署的步骤…

023 - C++ 继承

本期我们学习 C 面向对象编程中的继承。 面向对象编程是一个巨大的编程范式,类之间的继承是它的一个基本面,它是我们可以实际利用的最强大的特性之一。 先了解这些 继承允许我们有一个相互关联的类的层次结构。展开来说,它允许我们有一个包…

Ceph入门到精通-Ceph介绍及放置规范

2.cephadm介绍 2.1cephadm介绍 Cephadm 是随着 Ceph 新版本 v15.2.0(Octopus)发布的安装工具,并且不支持 Ceph的旧版本,Ceph中已经Cephadm 不依赖于外部配置工具,如 Ansible、 Rook 和 Salt,它通过 SSH 将管理器守护进程连接到主机…

通信中间件

通信中间件需要解决什么问题 分布式系统中两个不同的系统需要进行通信的时候,使用的是scocket编程,需要直接面对网络中的四层模型,编程时需要确定目标端的详细物理地址。这是非常不方便的。为了解决这个问题,需要通信中间件来屏蔽…

Linux系统编程学习 NO.1 ——操作系统的历史发展

什么是操作系统? 首先,需要明白一个概念操作系统的本质是系统软件,我们平时在电脑上的界面就是一种图形化的操作系统界面。界面上通常安装可执行应用程序如QQ,wps等等,这些应用程序被称为应用软件。大家买的电脑其实是…

【Java实战篇】Day14.在线教育网课平台--消息队列实现异步通知

文章目录 一、需求:支付通知1、需求分析2、技术方案3、集成RabbitMQ4、生产端发送消息5、消费方发送消息 二、需求:在线学习1、需求分析2、表设计与实体类3、接口定义--查询课程4、接口定义获取视频5、Service层开发6、FeignClient定义7、代码完善 三、需…

HOG+SVM分类器实践

文章目录 HOGSVM分类器实践制作SVM分类器导入所需的库提取HOG特征读取正样本和负样本训练分类器定义主函数小结 测试SVM分类器相关疑问1. 提取HOG特征为什么不能彩色图像呢?2. 出现如下错误3. 测试代码中,当我传入100*100的图片时候,为什么im…

Linux下安装Java8环境

查看主机是否已经安装Java环境 java -version 如下图所示,未找到java命令,则需要安装Java环境 JDK官网下载: https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html 根据自己系统的位数下载相应版本…

基于Dokcer安装RabbitMQ

基于Dokcer安装RabbitMQ 一、RabbitMQ介绍 1.1 现存问题 服务调用:两个服务调用时,我们可以通过传统的HTTP方式,让服务A直接去调用服务B的接口,但是这种方式是同步的方式,虽然可以采用SpringBoot提供的Async注解实现…

第6章:集合

集合简介 一种无序且唯一的数据结构。不关心顺序,集合里面的元素都是唯一的。 栈,队列,链表他们里面都有可能出现重复的数据,但是集合里面的元素是唯一的。 栈,队列,链表它们都有自己的顺序,但是…

使用媒体查询实现移动端适配,媒体查询meta标签配置(@media screen and,min-width和max-width)

简述:我们在写网站的时候,难免会遇到需要做移动端适配的需求,今天来记录下使用媒体查询实现移动端的适配。媒体查询是一种CSS技术,可以根据设备屏幕的属性(如宽度、高度、方向和分辨率)选择应用特定样式&am…

火爆全网,JMeter接口自动化测试详细实战(超详细)吐血整理...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 JMeter接口自动化测…

深度学习 - 44.Gate 与 MMOE 实现多目标学习

目录 一.引言 二.摘要 Abstract 三.介绍 Introduction 四.相关工作 RELATED WORK 1.DNN 中的多任务学习 2.SubNet 集成与 Expert 混合 3.多任务学习应用 五.建模方法 MODELING APPROACHES 1.Shared-bottom Multi-task Model 2.Mixture-of-Experts 3.Multi-gate Mixt…

NOPI用法之自定义单元格背景色(3)

NPOI针对office2003使用HSSFWorkbook,对于offce2007及以上使用XSSFWorkbook;今天我以HSSFWorkbook自定义颜色为例说明,Office2007的未研究呢 在NPOI中默认的颜色类是HSSFColor,它内置的颜色有几十种供我们选择,如果不…

模态分解算法 EMD、EEMD、CEEMD

一、模态分解算法EMD算法介绍 (一)模态分解相关的算法有以下几类 IMF 固有模态函数\EMD经验模态分解\EEMD集合经验模态分解\CEEMD 互补集合经验\(EEMD的标准形式)CEEMDAN自适应噪声完备集合经验模态分解\VMD 变分模态分解 &…

Crypko.ai:动漫角色生成和设计平台

【产品介绍】 Crypko.ai是一个基于GAN(生成对抗网络)的高质量动漫角色生成和设计平台,可以让用户通过简单的操作,创造出各种风格和特征的动漫角色,并且可以对角色的头发、脸部、衣服、风格等进行编辑和调整。 Crypko.a…

【GNN】谱域图卷积

谱域图卷积 1. 谱域卷积的背景知识 1.1 谱域图卷积实现思路 f 1 ( t ) ⋆ f 2 ( t ) F − 1 [ F 1 ( w ) F 2 ( w ) ] f_1(t) \star f_2(t) F^{-1}[F_1(w)F_2(w) ] f1​(t)⋆f2​(t)F−1[F1​(w)F2​(w)] 1.2 如何定义图上的傅里叶变换 经典傅里叶变换: x ( …

人工智能+自助餐:一种有效减少食物浪费的创新方案

一、案例背景: 自助餐是一种受欢迎的餐饮形式,可以满足不同顾客的口味和需求。但是,自助餐也存在着浪费食物的问题,有的顾客拿得多吃得少,有的顾客只吃部分食物,剩下的扔掉。据统计,2022年中国…