头歌——机器学习——决策树案例

news2024/11/24 11:35:50

第1关:基于决策树模型的应用案例

任务描述

本关任务:使用决策树算法完成成人收入预测。

相关知识

为了完成本关任务,你需要掌握:1.数据特征处理,2.使用决策树算法完成成人收入预测。

数据处理及特征工程

本次任务我们将会使用成人数据集(来源于UCI数据集:UCI Machine Learning Repository ),该数据集从美国1994年人口普查数据库中抽取而来,共48842条数据,涉及到收入统计,因此也称作“人口普查收入”数据集。该数据集可以通过对属性变量包括年龄、工种、学历、职业等14种信息来判断年收入是否超过50k。
首先,我们来了解一下我们的数据,从而进一步明确任务,并作出针对性的分析。人口普查收入数据集是一个分类问题,目的是用来预测年收入是否超过50k$,对应我们所需要的标签,这在数据集中以“<=50K”和“>50K”来进行表示;除此之外,数据包含了用于判断该决定的相关信息,对应我们所需要的特征,这些特征一共有14个。特征与标签的表示如下:

  • age:年龄
  • workclass: 工作类别
  • fnlwgt: 序号
  • education: 受教育程度
  • education-num: 受教育时间
  • marital-status: 婚姻状况
  • occupation: 职业
  • relationship: 社会角色
  • race: 种族
  • sex: 性别
  • capital-gain: 资本收益
  • capital-loss: 资本支出
  • hours-per-week: 每周工作时间
  • native-country: 国籍
  • salary: 收入

我们可以通过以下代码,进行数据预览:

  • import numpy as np
  • import pandas as pd
  • import matplotlib.pyplot as plt
  • from matplotlib.pyplot import MultipleLocator
  • import seaborn as sns
  • data_path ='/data/bigfiles/7db918ff-d514-49ea-8f6b-ea968df742e9'
  • df = pd.read_csv(data_path,header=None,names=['age', 'workclass', 'fnlwgt', 'education', 'education-num','marital-status','occupation','relationship','race','sex','capital-gain','capital-loss','hours-per-week','native-country','salary'])

对上述对数据的预览我们需要注意数据集中这样的几个问题:

  1. 字符型属性数据中是否存在缺失值,例如:‘unknow’
  2. 部分特征为字符串格式,无法放到模型训练,后期需要该字段需要进行离散型特征编码
  3. capital-gain capital-loss属性取值为0的占比75%以上考虑去除这两个属性

在分析出这些问题后我们使用代码逐步对数据进行处理:

  1. # 去除字符串数值前面的空格
  2. str_cols=[1,3,5,6,7,8,9,13,14]
  3. for col in str_cols:
  4. df.iloc[:,col]=df.iloc[:,col].map(lambda x: x.strip())
  5. # 去除capital-gain, capital-loss特征属性
  6. df.drop(['capital-gain','capital-loss'], axis=1, inplace=True)
  7. #查找字符型属性缺失情况
  8. for col in df.columns:
  9. if df[col].dtype == object:
  10. print("Percentage of \"unknown\" in %s:" %col ,df[df[col] == "unknown"][col].count(),"/",df[col].count())

经过这些过程,我们的数据处理便结束了,我们接下来使用处理后的数据进行决策树分类器训练和预测。

决策树分类器完成成人收入预测之训练

从上述的数据分析,我们可以得知我们所要解决的是一个二分类问题,由已知的特征来推断结果的取值(0或者1),根据上节决策树的相关知识,我们开始构建模型训练及预测。 sklearn做为一个强大机器学习工具,为我们提供了决策树的函数接口。不仅如此,我们还可以使用它进行训练集和测试集的划分。下面我们便使用该工具完成上述数据集的训练,来探究各特征与预测结果之间存在的内在联系。我们的训练过程将包含以下几个方面:

数据处理

训练测试集的划分,函数 sklearn.model_selection.train_test_split

模型训练函数
sklearn.tree.DecisionTreeClassifier

下面是部分关键代码:

import numpy as np

import pandas as pd

from sklearn.tree import DecisionTreeClassifier, export_graphviz # 导入决策树模型

from sklearn.model_selection import train_test_split # 导入数据集划分模块

import matplotlib.pyplot as plt

# 数据的读入与处理

# 去除fnlwgt, capital-gain, capital-loss,特征属性

df.drop(['fnlwgt','capital-gain','capital-loss'], axis=1, inplace=True)

# 将特征采用哑变量进行编码,字符型特征经过转化可以进行训练

features=pd.get_dummies(df.iloc[:,:-1])

# 将label编码

df['salary'] = df['salary'].replace(to_replace=['<=50K', '>50K'], value=[0, 1])

labels=df.loc[:,'salary']

# 使用train_test_split按4:1的比例划分训练和测试集

# 使用DecisionTreeClassifier构建模型

#对训练集X_train训练

决策树分类器完成成人收入预测之预测及评价

上述的训练过程中我们只能大概看出模型对训练结果的拟合程度,我们还需要使用一系列指标在测试集上进行模型的衡量。分类模型的一般评价有如下几种方式:

  1. 准确率acc
  2. 精准率pre
  3. 召回率recall
  4. f1-Score
  5. auc曲线

这几个指标可由混淆矩阵计算得到,我们先来看一下混淆矩阵的产生,它是由预测结果和标签值进行计算得到的,如下图所示:

,

下面我们使用混淆矩阵进行这几个指标的说明:

  1. 准确率:Accuracy = (TP+TN)/(TP+FN+FP+TN)
    解释:(预测正确)/(预测对的和不对的所有结果),即预测正确的比例。
    API:score()方法返回的就是模型的准确率

  2. 精确率:Precision = TP/(TP+FP)
    解释:预测结果为正例样本(TP+FP)中真实值为正例(TP)的比例。
    API:accuracy_score

  3. 召回率:Recall = TP/(TP+FN)
    解释:真正为正例的样本中预测结果为正例的比例。正样本有多少被找出来了(召回了多少)
    API:recall_score

  4. 综合精确率和召回率的指标 :f1-score:f1=2P∗R/(P+R) 解释:F1分数(F1-score)是分类问题的一个衡量指标 ,f1-score是精确率和召回率的调和平均数 ,最大为1,最小为0 。
    API:f1_score

  5. AUC:ROC曲线下的面积

    ,

解释:在理想情况下,最佳的分类器应该尽可能地处于左上角,这就意味着分类器在伪反例率(预测错的概率FPR = FP / (FP + TN))很低的同时获得了很高的真正例率(预测对的概率TPR = TP / (TP + FN))。也就是说ROC曲线围起来的面积越大越好,因为ROC曲线面积越大,则曲线上面的面积越小,则分类器越能停留在ROC曲线的左上角。
相关API接口:

from sklearn.metrics import roc_auc_score

# 概率值

y_pre = predict_proba(x_test)

# auc

auc=roc_auc_score(y_test,y_pre[:,1])

下面使用这几个指标进行模型性能评估的关键代码:

from sklearn.metrics import roc_auc_score

from sklearn.metrics import classification_report

#对于测试集x_test进行预测

x_pre_test=clf.predict(x_test)

# 其他指标计算

classification_report(y_test, x_pre_test)

# 预测测试集概率值

# 计算验证集的auc值,参数为预测值和概率估计

这样整个过程便结束了。

编程要求

根据提示,在右侧编辑器补充代码,实现使用决策树进行成人收入预测,包括:

数据处理

模型训练

模型预测

测试指标计算,并打印aou的值,函数:
print("auc的值:{}".format(auc))

测试说明

平台会对你编写的代码进行测试:

预期输出:

提示: 参照示例完成任务

第1关任务——代码题

import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier, export_graphviz # 导入决策树模型
from sklearn.model_selection import train_test_split  # 导入数据集划分模块
import matplotlib.pyplot as plt
from sklearn.metrics import roc_auc_score
from sklearn.metrics import classification_report

# 数据的读入与处理
data_path ='/data/bigfiles/7db918ff-d514-49ea-8f6b-ea968df742e9'
df = pd.read_csv(data_path,header=None,names=['age', 'workclass', 'fnlwgt', 'education', 'education-num','marital-status','occupation','relationship','race','sex','capital-gain','capital-loss','hours-per-week','native-country','income'])

# 去除字符串数值前面的空格
df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)

# 去除fnlwgt, capital-gain, capital-loss,特征属性
df.drop(['fnlwgt','capital-gain','capital-loss'], axis=1, inplace=True)

# 将特征采用哑变量进行编码,字符型特征经过转化可以进行训练
features=pd.get_dummies(df.iloc[:,:-1])

# 将label编码
df['income'] = df['income'].map({'<=50K': 0, '>50K': 1})

# 按4:1的比例划分训练和测试集
X_train, X_test, y_train, y_test = train_test_split(features, df['income'], test_size=0.2, random_state=1)

# 构建模型
clf = DecisionTreeClassifier(criterion='entropy',max_depth=6,random_state=17)

#对训练集X_train训练
clf.fit(X_train, y_train)

#对于测试集x_test进行预测
x_pre_test = clf.predict(X_test)

# 其他指标计算
print(classification_report(y_test, x_pre_test))

# 预测测试集概率值
x_pre_test_proba = clf.predict_proba(X_test)[:, 1]

#计算验证集的auc值,参数为预测值和概率估计
auc = roc_auc_score(y_test, x_pre_test_proba)
print("auc的值:{}".format(auc))

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

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

相关文章

T80005编码器操作说明书:高清HDMI,高清SDI编码器

T80005编码器操作说明书&#xff1a;高清HDMI,高清SDI编码器 T80005编码器视频使用操作说明书&#xff1a;高清HDMI编码器,高清SDI编码器

Grafana+Prometheus构建强大的监控系统-保姆级教程[监控linux、oracle]

什么是Grafana&#xff1f; Grafana是一个开源软件&#xff0c;拥有丰富的指标仪表盘和图形编辑器&#xff0c;适用Prometheus、Graphite、Elasticsearch、OpenTSDB、InfluxDB、redis。。。简单点说就是一套开源WEB可视化平台。通过对数据库数据二次提取&#xff0c;做出好看的…

240627_昇思学习打卡-Day9-ResNet50图像分类

240627_昇思学习打卡-Day9-ResNet50图像分类 文章目录 240627_昇思学习打卡-Day9-ResNet50图像分类前言残差网络Residual Block代码实现Bottleneck Block代码实现 BN层&#xff08;Batch Normalization&#xff09;构建ResNet50网络数据集准备与加载模型训练与评估可视化模型预…

什么是div移动指令?如何用vue自定义指令实现?

目录 一、Vue.js框架介绍二、vue自定义指令directive三、什么是div移动指令四、使用vue自定义指令directive写一个div移动指令 一、Vue.js框架介绍 Vue.js是一个用于构建用户界面的渐进式JavaScript框架。它设计得非常灵活&#xff0c;可以轻松地被集成到现有的项目中&#xf…

swiper轮播 loop:true失效解决

数据是写死的时候&#xff0c;能够loop:true是有效的;数据是动态获取的loop:true就会失效。 方法一&#xff1a;在接收到数据后&#xff0c;使用 setTimeout(() > {this.getSwiper(); //生成swiper方法}, 0); 下面是我项目具体使用的参考例子&#xff1a; 方法二&#xff…

1982Springboot宠物美容院管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot宠物美容院管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系 统具有完整的源代码和数据库…

McgsPro初级使用教程

MCGS触摸屏 1.也被称为昆仑通态触摸屏&#xff0c;是一款在工业自动化领域广泛应用的触摸屏产品。 2.以其高度可靠、多点触控、防水防尘、宽温设计、强大的通信能力、多样化的显示内容、灵活的组态设计和丰富的脚本编程等特点&#xff0c;成为工业自动化领域的强大伙伴。 下载好…

风控图算法之社群发现算法(小数据集Python版)

风控图算法之社群发现算法&#xff08;小数据集Python版&#xff09; 在风险控制领域&#xff0c;图算法扮演着日益重要的角色。&#xff08;这方面的资料有很多&#xff0c;不再赘述&#xff09; 图算法在风控场景的应用 图分析方法在业务风控中的应用 特别是社群发现算法&a…

Linux 设置中文语言环境(ubuntu)

1. 查看当前默认 2.下载中文语言包 apt-get install language-pack-zh-hans 3. 更新语言环境并重启 update-locale LANGzh_CN.UTF-8 sudo reboot

将 Cohere 与 Elasticsearch 结合使用

本教程中的说明向你展示了如何使用推理 API 使用 Cohere 计算嵌入并将其存储起来&#xff0c;以便在 Elasticsearch 中进行高效的向量或混合搜索。本教程将使用 Python Elasticsearch 客户端执行操作。 你将学习如何&#xff1a; 使用 Cohere 服务为文本嵌入创建推理端点&…

Java技术栈中的核心组件:Spring框架的魔力

Java作为一门成熟的编程语言&#xff0c;其生态系统拥有众多强大的组件和框架&#xff0c;其中Spring框架无疑是Java技术栈中最闪耀的明星之一。Spring框架为Java开发者提供了一套全面的编程和配置模型&#xff0c;极大地简化了企业级应用的开发流程。本文将探讨Spring框架的核…

RK3588芯片介绍

RK3588是一款低功耗、高性能处理器&#xff0c;适用于基于ARM的PC和边缘计算设备、个人移动互联网设备和其他数字多媒体应用&#xff0c;集成四核Cortex-A76和四核Cortex-A55&#xff0c;并分别带有NEON协处理器。支持8K视频编解码器。许多强大的嵌入式硬件引擎为高端应用提供了…

ATA-7025:高压放大器的原理是怎样的

高压放大器是一种电子器件&#xff0c;主要用于将输入信号的电压放大到更高的水平。它在许多领域中都有重要的应用&#xff0c;包括医学影像设备、科学研究装置、激光系统等。高压放大器的原理涉及到放大器的工作原理、电路结构、工作特性等多个方面。下面将从这些方面对高压放…

用心选择,用爱呵护《米小圈上学记》和孩子一起热爱校园生活

作为家长&#xff0c;我们时常为孩子的教育和成长担忧&#xff0c;尤其是在选择适合他们阅读的书籍时更是如此。一本好的儿童读物不仅要有趣&#xff0c;还应该能够激发孩子的想象力&#xff0c;培养他们的品格与勇气。在这个过程中&#xff0c;我发现了一本特别适合孩子们的书…

【Redis一】Redis配置与优化

目录 一.关系型数据库与非关系型数据库 1.关系型数据库 2.非关系型数据库 3.二者区别 4.非关系型数据库产生背景 5.NoSQL与SQL数据记录对比 关系型数据库 非关系型数据库 二.Redis相关概述 1.简介 2.五大数据类型 3.优缺点 3.1.优点 3.2.缺点 4.使用场景 5.采用…

服务治理怎么做:降级、熔断、全链路压测

服务降级的常见场景 系统负载过高&#xff1a;在高峰期或者流量激增的情况下&#xff0c;为了防止系统崩溃&#xff0c;可以暂时关闭或降低某些非关键服务的质量。 依赖服务故障&#xff1a;当某个依赖服务不可用时&#xff0c;通过服务降级可以提供替代方案或者简化的功能&am…

Java鲜花下单预约系统源码小程序源码

让美好触手可及 &#x1f338;一、开启鲜花新篇章 在繁忙的都市生活中&#xff0c;我们总是渴望那一抹清新与美好。鲜花&#xff0c;作为大自然的馈赠&#xff0c;总能给我们带来无尽的惊喜与愉悦。但你是否曾因为工作繁忙、时间紧张而错过了亲自挑选鲜花的机会&#xff1f;今…

基于Boost和平均电流控制方法的APFC电路设计

通过学习无线充电相关知识&#xff0c;为更快熟悉APFC工作原理&#xff0c;通过实验得以掌握 技术要求&#xff1a; 1&#xff09;输入电压&#xff1a;AC 85V&#xff5e;265V&#xff1b; 2&#xff09;输出电压&#xff1a;400V1%&#xff1b; 3&#xff09;输出额定电流…

grpc学习golang版( 五、多proto文件示例)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 第五章 多proto文件示例 第六章 服务器流式传输 文章目录 一、前言二、定义proto文件2.1 公共proto文件2.2 语音唤醒proto文件2.3 人脸唤醒proto文件2.4 生成go代码2.…

MapStruct-JavaBean映射工具使用指南

在软件开发中&#xff0c;对象之间的转换是一项常见的任务&#xff0c;尤其是在处理数据模型间的映射时。传统的做法&#xff0c;如使用JavaBeanUtils&#xff0c;可能会导致性能下降&#xff0c;而手动编写转换代码则效率低下且易出错。为了解决这些问题&#xff0c;MapStruct…