1994年美国人口普查数据 分类预测与集成学习

       对于分类预测学习任务,从指定的数据源读取数据,对数据进行必要的处理,选取合适的特征,构造分类模型,确定一个人的年收入是否超过50K。

       数据来源:1994年美国人口普查数据库。数据存放在data目录中,其中,adult.data存放训练数据,adult.test存放测试数据。

     (下载地址:https://archive.ics.uci.edu/ml/datasets/Adult )

特征列介绍:

age:年龄,整数

workclass:工作性质,字符串,包含少数几种取值,例如:Private、State-gov等

education:教育程度,字符串,包含少数几种取值,例如:Bachelors、Masters等

education_num:受教育年限,整数

maritial_status:婚姻状况,字符串,包含少数几种取值,例如:Never-married、Divorced等

occupation:职业,字符串,包含少数几种取值,例如:Sales、Tech-Support等

relationship:亲戚关系,字符串,包含少数几种取值,例如:Husband、Wife等

race:种族,字符串,包含少数几种取值,例如:White、Black等

sex:性别,字符串,包含少数几种取值,例如:Female, Male

capital_gain:资本收益,浮点数

capital_loss:资本损失,浮点数

hours_per_week:每周工作小时数,浮点数

native_country:原籍,包含少数几种取值,例如:United-States, Mexico等

分类标签列:income  >50K   ≤50K

数据探查

熟悉数据,查看数据结构和数据分布情况

  • 读取数据文件,查看行列信息

行列信息结果:

  • 查看数值类型列的数据描述信息

对于数值类型的列,可以分别查看每列的基本统计信息,例如:数据个数、均值、标准差、极值、四分位数、中位数

  • 以可视化的方式查看数值类型的取值分布情况

在上一步骤中,capital_gain和capital_loss列的极小值、四分位数均为0,而极大值很大,这意味着其数据主要分布在0附近。可以通过分箱统计的方式查看数值分布情况。

直方统计图是很直观的查看数值分布的方法。下面的代码将所有数值分成20个区间,然后统计每个区间中的数据个数。

  • 查看文本类型列的取值

对于文本类型的列,观察文本的取值有哪些,unique函数用于提取出数据集合中的唯一值。

可以发现,某些列(例如:workclass, occupation,native_country等)包含'?'这样的字符,可视为缺失值。后续应处理此类缺失值;训练数据的wage_class包括两个值:<=50K 和 >50K 而测试数据的是:<=50K. 和 >50K. 后续应使二者统一。

  • 查看文本类型的取值分布情况

首先,对一个包含多个文本列名的列表text_columns使用一个for循环遍历这个列表。在循环中,使用plt.subplot()函数创建一个子图,将多个图形绘制到一个平面上。然后,提取train_data数据集中对应于当前文本列名的数据,并计算每个值的计数。

  • 观察某行数据及单个字段

上面的探查中,发现workclass字段的第一个字符为空格符,进一步可以发现,所有的文本字段第一个字符均为空格。为便于数据处理,后续应设法将多余的空格去除

  • 分析education取值与wage_class的对应数量关系

通过查看某个特征的若干种取值分别对应着多少个特定分类的样本,可以大致了解哪些取值在样本中比重较大,哪些取值比重较小。

可以看到,当education为Doctorate, Masters或Prof-school时,收入>50K的样本数要超过<=50K的数量;而其余取值则相反。这可能意味着,上述3种取值对于收入是否超过50K有较大影响。

pandas.crosstab是用于生成交叉表的函数。在数据分析中,交叉表(也称为列联表)是一种特殊的二维表格,用于汇总和分组两个或多个变量之间的数据。 pandas.crosstab可以接受多个数组,并将它们转换为交叉表。

数据清洗

  • 去除所有文本字段首尾的多余空格

train_data.dtypes属性记录了数据集中所有列的类型信息,包括列下标索引(index)及对应的类型名称,train_data.dtypes[index] 返回指定下标索引的列的类型。此处仅匹配类型为文本字符串(object)的列。

train_data[column_index].str.strip()用于将指定列数据转换成字符串,然后调用strip函数去除首尾空格

  • 统一分类标签

训练数据和测试数据的wage_class字段的值应统一,将测试数据集中的标签列更改成与训练数据集的一致,即:去掉原始标签值最后的"."号

  • 处理'?'字段

对于训练数据集,用'?'标记的字段,视为无效值,本例中直接移除含有无效值的样本行。

对于测试数据集,带'?'的数据,用出现次数最多的值(文本字段)填充。

pandas.replace是一个用于替换DataFrame或Series中特定值的函数。给定一个DataFrame或Series,可以使用replace方法将其中的某些值替换为其他值。

pandas.dropna是一个用于去除DataFrame或Series中空值的函数。给定一个DataFrame或Series,可以使用dropna方法从中移除包含缺失数据(NA或NaN)的行或列。

数据预处理 

  • 文本字段转换成数值字段的方法试验

workclass的取值是文本类型,但模型训练需要的特征必须是数值,因此需要转换

通过Categorical函数,可将文本转换成数值。相同的文本值被赋予相同的数值,并且从1,2,3...依次增长

pandas.Categorical是pandas库中的一个数据类型,用于表示具有有限数量的不同值的数据。它可以用于对离散数据进行处理和分析,例如将字符串、整数或其他数据类型转换为分类变量。通过将数据转换为Categorical对象,我们可以更有效地利用内存,同时提高分析效率,因为Categorical对象在内部使用整数编码来表示不同的分类变量。此外,Categorical对象还支持许多方便的方法,如排序、聚合和查找唯一值等。

下面是一个示例,展示如何使用pandas.Categorical将字符串列转换为分类变量:

在下面的示例中,我们首先创建了一个包含字符串的DataFrame,然后将其"fruits"列转换为Categorical对象。最后,我们打印了转换后的"fruits"列,可以看到它现在被存储为三个不同的类别:apple、banana和cherry。

  • 将所有文本列均转换成数值编码

将训练数据和测试数据合并起来进行编码。

模型训练

1. 准备工作

准备好训练特征数据集、标签数据集和测试特征数据集、标签数据集,预设超参数。

2.使用XGBoost模型训练,并且优选出最佳的模型参数

先固定learning_rate和subsample,以便优选另外两个超参数:max_depth, min_child_weight。

训练过程截图:

3. 计算模型性能

针对测试数据进行预测,分别计算每个类别的精确度、召回率和F1值

4. 再次调整超参数

在上述最优超参数{‘max_depth’: 3, ‘min_child_weight’: 5},条件下调整learning_rate, 以及subsample并选出最优超参数

5. 寻找最优的模型训练迭代停止时机

利用前述选定的最佳参数:{'max_depth': 3, 'min_child_weight': 5, 'learning_rate': 0.05, 'subsample': 0.8},构建最有XGBoost模型

XGBoost模型训练时,如果迭代次数过多会进入过拟合。表现就是随着迭代次数的增加,测试集上的测试误差开始下降;当开始过拟合或者过训练时,测试集上的测试误差开始上升,或者波动

通过设置early_stopping_rounds可指定停止训练的时机。当测试集上的误差在early_stopping_rounds轮迭代之内都没有降低的话,就停止训练

通过best_iteration属性可获得最佳的迭代次数

6. 计算最终模型的性能

特征分析

1. 查看各个特征之间的相关性

绘制数据集中每两个特征(列)之间的相关性热力图,可观察到sex和relationship的负相关性很强(黑色方格),education和education_num的正相关性也比较强(白色方格),因此可以各保留1个特征 * 去掉部分强相关特征后,对建模结果几乎们没有影响,但应该能减少计算量。

2. 去除强相关的冗余特征

本例中去除education_num,保留education特征;去除relationship,保留sex特征。

预测并计算性能:

3. 将age特征分箱处理

考虑到age(年龄)是连续的自然数值,在一定程度上,考虑年龄区间可能会比年龄值本身更有意义

numpy.digitize方法用于将数据集划分到指定的区间中,并重新赋给区间编号值

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

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

相关文章

AD使用快捷键

1、如何实现元器件旋转45放置 在Preferences >> PCB Editor >> General中将Rotation Step&#xff08;旋转的步进值&#xff09;由90改为45&#xff0c;这样以后每次按空格键旋转器件时旋转角度为45。 2、显示网络、隐藏网络 N 3、对齐 2、设置DRC检查选项&#xf…

SAP-应付暂估核对

前言 本篇前面是应付暂估核对的核对逻辑&#xff0c;后面是核对过程中发现的问题&#xff0c;拿出来大家参考一下。 需求实现 一、采购订单收货暂估凭证 采购订单情况&#xff1a;采购订单号码5300000048 采购单价PBXX总价是含税单价&#xff0c;不含税单价是3,539.82 订单计…

数据可视化在智慧社区中的关键应用

数据可视化能够在智慧社区中发挥重要作用&#xff0c;通过直观和交互的方式将复杂的数据呈现出来&#xff0c;提升社区管理效率&#xff0c;优化居民生活体验&#xff0c;促进社区的可持续发展。在智慧社区中&#xff0c;数据可视化的应用涵盖了安全、环境、能源、交通和公共服…

CFA官网资料说明

进入到资料后台你就会发现&#xff0c;分了三个板块&#xff0c;分别是Study, Prepare和The Exam。 Study板块 主要提供备考重要资料&#xff0c;包括教材下载、自学习系统 Prepare板块 主要帮助考生准备考试&#xff0c;提供了一些小工具、包括机考软件指南 The exam板块…

秋招突击——第六弹——Java的SSN框架快速入门——MyBatisPlus

文章目录 引言正文入门案例整和MybatisPlus的相关内容 概述标准数据层开发分页查询DQL编程控制条件查询——NULL值处理 查询投影查询条件设定等于操作范围查询模糊查询分组查询 字段映射和表名映射 DML编程控制——增删改查相关操作添加操作id生成策略控制 删除操作多数据删除逻…

【物联网】物联网操作系统简介

目录 一、物联网操作系统概述 1.1内存占用 1.2 内存管理 二、物联网操作系统构成 三、物联网操作系统关键特性 3.1 调度方式 3.2 I/O操作方式 3.3 网络服务 3.3.1 TinyOS网络协议栈 3.3.2 LiteOS网络协议栈 一、物联网操作系统概述 物联网操作系统是支撑物联网大规模…

电商还存在错位竞争空间吗?

“上链接试了&#xff0c;十几分钟&#xff0c;成本5块的东西卖1块5了。”今年618前期&#xff0c;某个电商平台上线了自动跟价功能&#xff0c;有一个卖家尝试了一会儿之后赶紧关了。 又一个618&#xff0c;平台、商家、消费者们又迎来了一次狂欢。只是与往年不同的是&#x…

20240620每日后端---------Spring Boot中的 5 大设计模式最佳实践和示例 这些是我经常使用的设计模式并且非常喜欢

在本文中&#xff0c;我们将深入探讨五种基本设计模式&#xff0c;并探讨在 Spring Boot 项目中有效应用它们的最佳实践。每个模式都将附有一个实际示例来演示其实现。 单例模式 Singleton 模式确保一个类只有一个实例&#xff0c;并提供对它的全局访问点。这对于管理资源&am…

绝地求生PUBG联名补偿奖励来了 补偿奖励介绍详情解析

《绝地求生》(PUBG) 作为一款战术竞技型射击类沙盒游戏&#xff0c;从上线以来就深受玩家小伙伴们的喜爱&#xff0c;即便是没有玩过的小伙伴&#xff0c;对“吃 鸡”二字想必也是很耳熟的&#xff0c;这正是《绝地求生》(PUBG) 的别称。 在北京时间6月12日&#xff0c;由于绝…

通过注解@ConfigurationProperties和全局配置文件中配置数据绑定

1、创建创建出两个JavaBean&#xff1a;User和Address 2、在User类上加注解 Component // 标记为组件&#xff0c;放到spring的ioc容器里 ConfigurationProperties(prefix "user") // 和配置文件绑定&#xff0c;可以从配置文件中的注入数据 public class User {…

性能工具之 JMeter 常用组件介绍(七)

文章目录 一、后置处理器1、Regular Expression Extractor(正则表达式提取器)2、JSON Extractor(JSON表达式提取器)3、Regular Expression Extractor(正则表达式提取器) 二、小结 本文主要介绍JMeter主流后置处理器的功能 一、后置处理器 从上面可以看出后置处理可以插件挺多&a…

CASS界址点顺序重排

1、绘制一个宗地&#xff0c;如下&#xff1a; 2、注记界址点号&#xff0c;如下 3、【地籍】--【调整宗地内界址点顺序】&#xff0c;如下&#xff1a; 重排完成后&#xff0c;点击工具栏的【重】按钮&#xff0c;即可刷新标注。

C++的动态内存分配

使用new/delete操作符在堆中分配/释放内存//使用new操作符在堆中分配内存int* p1 = new int;*p1 = 2234;qDebug() << "数字是:" << *p1;//使用delete操作符在堆中释放内存delete p1;在分配内存的同时初始化//在分配内存的时初始化int* p2 = new int(100…

Mybatis Plus 详解 IService、BaseMapper、自动填充、分页查询功能

结构直接看目录 前言 MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 愿景 我们的愿景是成为 MyBatis 最好的搭档&#xff0c;就像 魂斗罗 中的 1P、2P&#xff0c;基友搭配&#xff0c;效…

电子期刊制作教程:跟着步骤轻松学会制作

随着数字时代的快速发展&#xff0c;电子期刊以其独特的便捷性和互动性&#xff0c;已经成为信息传播的重要载体。你是否也想掌握制作电子期刊的技能呢&#xff1f;今天&#xff0c;就让我来为你一步步解析电子期刊的制作过程&#xff0c;带你轻松学会制作属于自己的电子期刊。…

Zookeeper 一、Zookeeper简介

1.分布式系统定义及面临的问题 分布式系统是同时跨越多给物理主机&#xff0c;独立运行的多个软件所组成的系统。类比一下&#xff0c;分布式系统就是一群人一起干活。人多力量大&#xff0c;每个服务器的算力是有限的&#xff0c;但是通过分布式系统&#xff0c;由n个服务器组…

阵列波束形成与维纳滤波

本篇文章是博主在通信等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对通信等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在通信领域笔记&#xff1a;…

算法设计与分析 实验4 动态规划法求扔鸡蛋问题

目录 一、实验目的 二、问题描述 三、实验要求 四、实验内容 动态规划法 算法描述 算法伪代码描述 算法复杂度分析 数据测试 二分优化的动态规划法 算法描述 二分优化&#xff1a; 算法伪代码 算法复杂度分析 数据测试 单调决策优化的动态规划法 算法描述 算…

多线程下JVM内存模型 和 volatile关键字

1、线程的概念 线程&#xff08;thread&#xff09;是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流&#xff0c;一个进程中可以并发多个线程&#xff0c;每条线程并行执行不同的任务…

微软修复Wi-Fi驱动高危漏洞 影响Windows所有版本 可通过局域网发起攻击

微软修复 WiFi 驱动程序中的高危安全漏洞&#xff0c;该漏洞影响 Windows 所有版本&#xff0c;可以通过公共 WiFi 等发起攻击。如果攻击者能够接入到目标设备所处的网络中&#xff0c;则可以悄无声息完成攻击&#xff0c;不需要用户进行任何交互。 在本月例行安全更新中微软修…