聚类、缺失处理、特征分析——模型几个重要的处理过程(含案例实操)

2023-10-30

在数据建模过程中,尤其是通过线性回归、逻辑回归等传统机器学习算法进行模型训练之前,往往需要对样本数据进行清洗,其中缺失值处理是一种常用方法。根据特征的类别属性与缺失特点,采用合适的方法进行缺失处理,可以有效提升模型拟合的效果,甚至在某些场景下,缺失值处理是作为模型拟合样本的前提步骤。
对于缺失值的处理方式,从难易程度可以分为“简单”和“复杂”两个方面,“简单”主要是指根据常用的统计指标进行缺失值填充,例如平均值、最大值、最小值、众数、中位数等;“复杂”主要是结合相关算法进行处理,例如极大似然估计、贝叶斯估计、决策树模型等,具体使用哪一种方法都是需要根据样本数据情况而定,但在实际业务中,经常采用的是“简单”方式,即采用平均值、众数等指标进行填充。
1、原理逻辑描述
当采用常规方法实现缺失值的处理后,虽然达到了关于数据清洗的需求,但是在很多场景下对数据样本的实际分布会产生较大偏差。现举个例子进行说明,样本数据如图1所示,共包含10个样本(ID01~ID10),work_type是指工作属性(1代表有工作,0代表无工作),social_security是指社保金额(元)。
在这里插入图片描述
图1 缺失值处理前

对于样例1字段social_security的缺失情况,假设采用平均值进行填充,若直接对字段全量平均值处理,则ID02与ID09的填充结果如下所示:
在这里插入图片描述
图2 缺失值处理后1

针对缺失值处理结果(图2),对于ID02用户的social_security=4000,但这里要注意到,该用户特征work_type(是否有工作)为0,说明用户是无工作的,那social_security(社保金额)的结果显然是不合理的,正常情况应为0才准确。在这种情况下,为了更符合实际业务理解,应对用户群体进行分类(聚类思想),即将用户分为有无工作2个类别(work_type=0/1),然后根据不同群体的平均值进行填充,实现结果如图3所示。
在这里插入图片描述
图3 缺失值处理后2

从图3最终的缺失值处理结果可以直观看出,对于样本ID02用户(有工作)的social_security(社保金额)为5333,而样本ID09用户(无工作)的social_security(社保金额)为0,这个结果显然是更符合实际情况。同样是采用平均值填充,但通过特征聚类后的处理方式在实际业务中更为合理。

2、案例实操介绍
前边的举例描述中,特征聚类的思想仅仅是从单个字段的业务含义直接进行分类判断的,在实际工作场景中,样本数据往往会包含多个特征,而且通过业务经验是无法区分类别的,因此必然需要借助于相关聚类算法进行实现。常用的聚类算法包括K-means、DBSCAN等,都可以有效划分样本的类别属性。下面我们结合一个具体场景案例,并采用基于密度的聚类算法DBSCAN,给大家详细介绍下特征聚类后的缺失值处理过程。
(1)样本数据
现有一份样本数据,包含2000条样本和5个特征,各字段的标签含义分别为客户订单(主键)、年龄、月收入、信用等级、消费等级,取数据集前10条样本具体如图4所示。
在这里插入图片描述
图4 样本数据前10

对样本特征的缺失情况进行统计汇总,python代码实现与结果输出分别如图5、图6所示。
在这里插入图片描述
图5 缺失情况汇总

在这里插入图片描述
图6 特征缺失分布

从特征缺失情况可知,字段“年龄”与“月收入”均存在缺失,且缺失比例较低,分别为2.3%和3.7%,这种情况可以采用平均值进行填充。为了使得填充后效果更符合实际业务,我们首先需要选取字段进行聚类,这里需要特别注意的是,聚类字段必须是非缺失字段,至于字段数量多少没有限定,但最好是选取区分度较好,且业务解释意义较强的特征。本例根据以上描述分析,则采用剩余2个分析字段进行聚类,即“信用等级”与“消费等级”。

(2)特征工程
从图4样本可知,字段“信用等级”与“消费等级”均属于字符型,需要将其转换为数值型,可以采用标签编码实现此过程。另外,由于聚类算法DBSCAN是基于样本的距离进行模型训练的,因此为了排除各特征量纲的影响,还需要对特征进行标准化,这里采用z-score标准化(归一化)。具体实现代码如图7所示,输出结果如图8所示。
在这里插入图片描述
图7 特征工程代码

在这里插入图片描述
图8 数据处理结果

(3)特征聚类
根据特征标准化后的数据,采用K-means算法对特征“信用等级”与“消费等级”进行聚类分析,模型的聚类数量设置为3,具体代码与结果分别如图9-11所示。

在这里插入图片描述
图9 特征K-means聚类

在这里插入图片描述
图10 特征聚类结果

在这里插入图片描述
图11 聚类特征均值

(4)缺失填充
通过特征聚类分析,将样本数据划分为3个类别,并输出每类群体的特征分布指标,即“年龄”与“月收入”的平均值(图11)。从结果来看,对于每类用户群体,在“信用等级”和“消费等级”指标相似的情况下,平均“年龄”和平均“月收入”还是有着较明显差异,尤其是“月收入”指标,类别1与类别2相差较大。接下来我们根据不同样本类别的分布情况,针对性进行字段缺失值填充,具体代码的实现过程如图12所示。
在这里插入图片描述
图12 特征缺失填充

经过以上分析与处理,我们采用了特征聚类下的缺失值处理方法,通过结果可以说明这种思路显然比直接填充的效果更好,从样本数据分布与业务场景理解,都是更贴近实际情况,对于数据分析或数据建模等工作的有效开展都有较好的支撑效果。
关于本文中所提及的数据集与代码内容,此部分内容已更新到知识星球平台,可据此进行动手实操,详情如下:
在这里插入图片描述

end

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聚类、缺失处理、特征分析——模型几个重要的处理过程(含案例实操) 的相关文章

  • 【ChatGPT恋爱攻略】情话篇篇,真诚又用心

    ChatGPT是一种人工智能助手 它可以帮你回答关于生活 工作和学习的问题 就像聊天一样 你可以提出任何问题 并得到简明扼要的答案 ChatGPT可以用来写情话 只需告诉它你的主题以及你想表达的感情 它会自动生成一段浪漫的文字 这项技术是通

随机推荐

  • 序列化和反序列化(面试已问过,常问点)

    一 序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化 把字节序列恢复为对象的过程称为对象的反序列化 对象的序列化主要有两种用途 1 把对象的字节序列永久地保存到硬盘上 通常存放在一个文件中 2 在网络上传送对象的字节序列
  • [使用python连接mysql时报错总结(涉及mysqclient、pymsql、conda)]

    工具说明 Pycharm2023 1 conda python3 x版本 问题描述 mysqlclient版本低导致报错 报错的信息 File E Miniconda envs py3662 lib site packages django
  • 爬虫之requests-html爬取国外网站大全

    Requests HTML 对 Requests 进行了封装 添加了解析 HTML 的接口 是一个 Python 的 HTML 解析库 由于该库是解析 html 对象 所以可以查看对应的 html 对象包含哪些方法与与属性 html 对象的
  • 计算机视觉会议论文写作建议顺序及注意事项

    一 写作建议顺序及注意事项 1 提炼motivation Motivation是重中之重 intro和abstract都基于此 最重要的Motivation往往只有一点即可 全文都围绕着一个最尖锐的问题 然后motivation就是基于该最
  • 如何检查STM32的HardFault_Handler故障

    STM32出现HardFault Handler故障的原因主要有两个方面 1 内存溢出或者访问越界 这个需要自己写程序的时候规范代码 遇到了需要慢慢排查 2 堆栈溢出 增加堆栈的大小 出现问题时排查的方法 发生异常之后可首先查看LR寄存器中
  • 判断是否有环以及求环的入口节点。

    目录 思路一 环形链表求环入口节点 一 判断是否有环 1 当节点个数为偶数个 slow走到中间节点 如果fast为空 则没有环 2 当节点个数为奇数个 slow走到中间节点 如果fast gt next为空 则没有环 3 如果有环 那么sl
  • GoPlus Go的数据处理方言

    Go https github com goplus gop 是GO面向大数据处理一个方言 可以做到几乎100 兼容Go的同时 提供很多语法上的便利以处理各种大数据的数据结构 例如矩阵等 例如 的例子 其输出是 安装Go git clone
  • shell编程之for循环

    文章目录 shell编程之for循环 一 for语句 1 什么是for循环 2 for语句的结构 3 for语句中常用转义字符 二 for语句应用示例 1 批量添加用户 2 根据IP地址检查主机状态 三 循环的次数 1 循环次数的格式 2
  • linux中修改环境变量及生效方法

    方法一 在 etc profile文件中添加变量 对所有用户生效 永久的 用VI在文件 etc profile文件中增加变量 该变量将会对Linux下所有用户有效 并且是 永久的 要让刚才的修改马上生效 需要执行以下代码 source et
  • Linux系统启动流程详解

    目录 前言 Linux系统的启动流程大体分为以下几个部分 因为在 BIOS阶段 计算机的行为基本上被写死了 可以做的事情并不多 一般就是通电 BIOS 主引导记录 操作系统这四步 对这四步感兴趣的小伙伴可以看这篇博客 计算机是如何启动的 所
  • 如何卸载--奇安信安全终端管理系统

    1 找到Entbase bat D Program Files x86 QAX 360safe EntClient conf 我的路径是这样的 2 右击奇安信 设置 防护 关闭自我保护 3 删除Entbase bat 中的两个qtpass
  • 一种改善调制宽带变换器的有意混叠方法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 AMWC 混叠调制宽带转换器 根据给定的硬
  • 绕过CDN寻找网站真实IP的方法汇总

    工作所需 将 绕过CDN寻找网站真实IP 的方法进行汇总 打开笔记 发现保存了好几篇以前收集的一些相关文章 文章都比较类似 方法大同小异 做个汇总 也添加一些自己积累 0x01 判断ip是否为网站真实ip 这个就很简单了 简单说下几个常见的
  • Transformer解析

    Transformer超详细解读 Transformer库 Transformer变形BERT等 https github com huggingface transformers 数据集下载 https mirrors tuna tsin
  • 动态内存管理

    对于内存我们了解道的就有栈区域 堆区 静态区 常量储存区 代码区 栈区 stack 指那些由编译器在需要的时候分配 不需要时自动清除的变量所在的储存区 如函数执行时 函数的形参以及函数内的局部变量分配在栈区 函数运行结束后 形参和局部变量去
  • linux下telnet批量验证某端口开放

    1 ip库 cat iplist txt 10 1 1 1 10 1 1 2 10 1 1 3 10 1 1 4 10 1 1 5 2 相关脚本 cat telnet sh bin bash Author jimmygong Email j
  • C++高频知识总结 p1

    总结 C C 是怎么实现接口的 C 11新特性 STL容器有哪些 vector list set dqueue的区别 iterator类型有哪些 C C 是怎么实现接口的 C 中 通过类实现面向对象的编程 而在基类中只给出纯虚函数的声明 然
  • mybatis insert操作返回值问题

  • MyBatis用户信息表的增删改查

    目录 前言 一 创建数据库 二 导入相关依赖 三 创建POJO实体 四 创建数据库连接信息配置文件 五 创建映射文件UserMapper xml 六 创建MyBatis的核心配置文件 七 创建MyBatis的工具类 八 创建测试类 九 运行
  • 聚类、缺失处理、特征分析——模型几个重要的处理过程(含案例实操)

    在数据建模过程中 尤其是通过线性回归 逻辑回归等传统机器学习算法进行模型训练之前 往往需要对样本数据进行清洗 其中缺失值处理是一种常用方法 根据特征的类别属性与缺失特点 采用合适的方法进行缺失处理 可以有效提升模型拟合的效果 甚至在某些场景