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

第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))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Adaptive Server Connection Failed on Windows

最近在使用pymssql &#xff08;版本2.3.0&#xff09;连接SQL Server2012遇到如下问题&#xff1a; pymssql._mssql.MSSQLDatabaseException: (20002, bDB-Lib error message 20002, severity 9:\nAdaptive Server connection failed (localhost)\nDB-Lib error message 2000…

Linux如何远程访问?

远程访问是现代计算机网络中非常重要的一个功能&#xff0c;它允许用户通过网络连接到远程计算机&#xff0c;并在远程计算机上执行操作。对于使用Linux操作系统的用户来说&#xff0c;Linux远程访问是非常常见的需求。本文将介绍如何实现Linux远程访问&#xff0c;并简要介绍一…

GUI Guider(V1.7.2) 设计UI在嵌入式系统上的应用(N32G45XVL-STB)

目录 概述 1 使用GUI Guider 设计UI 1.1 创建页面 1.2 页面切换事件实现 1.3 生成代码和仿真 1.3.1 生成和编译代码 1.3.2 仿真UI 2 GUI Guider生成的代码结构 2.1 代码结构介绍 2.2 Project目录下的文件 3 板卡上移植UI 3.1 加载代码至工程目录 3.2 主函数中调…

高职人工智能专业实训课之“自然语言处理”

一、前言 在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术日益成为研究和应用的热点。为了满足高职院校对NLP专业实训课程的需求&#xff0c;唯众人工智能教学实训凭借其前沿的教育技术平台&#xff0c;特别是GPU虚拟化技术&#xff0c;为学生提供了高…

C语言转义序列的含义和用法

基础理论 在C语言中&#xff0c;转义序列是一种特殊的字符组合&#xff0c;以反斜杠\开头&#xff0c;后面跟着一个或多个字符&#xff0c;用于表示不能直接输入的字符或者控制字符。转义序列允许程序员在字符串中包含那些不易直接输入的字符&#xff0c;如换行符、制表符或特…

2-3KW户储、家储逆变器设计资料

储能电源方案双向逆变器板资料&#xff0c;原理文件&#xff0c;PCB文件&#xff0c;源代码&#xff0c;bom清单。 bom表&#xff1a; PCB&#xff1a; 变压器电感 2-3KW户储、家储逆变器设计通常需要考虑以下几个方面&#xff1a; 输入电压范围&#xff1a;逆变器需要能够适应…

“人工智能+”带来新变化

以生成式人工智能&#xff08;AIGC&#xff09;为代表的新一代人工智能技术创新加速演进&#xff0c;相关商业化应用成果也不断涌现&#xff0c;行业应用范围不断拓展&#xff0c;深度赋能实体经济&#xff0c;为行业提质增效与实现减排提供助力。 自主航运初创公司OrcaAI于6月…

帕金森患者营养补充指南:维生素的重要性与选择

帕金森病&#xff0c;在众多营养素中&#xff0c;维生素对于帕金森病患者来说尤为重要。本文将详细介绍帕金森患者应该补充哪些维生素&#xff0c;以及这些维生素的重要性。 一、维生素B组 维生素B组在帕金森病患者中扮演着重要的角色。其中&#xff0c;维生素B6是神经递质多…

JavaSE (Java基础):方法简介

6 Java中的方法 下面关于Java方法的介绍都引用了某B大佬狂神的PPT 6.1 方法简介 自己看注释&#xff0c;&#xff0c;&#xff0c;&#xff0c;这就是方法&#xff01; package com.zlx.method;public class Demo01 {//main方法public static void main(String[] args) {//实…

基于YOLOv5+PyQT5的吸烟行为检测(含pyqt页面、模型、数据集)

简介 吸烟不仅对个人健康有害,也可能在某些特定场合带来安全隐患。为了有效地监控公共场所和工作环境中的吸烟行为,我们开发了一种基于YOLOv5目标检测模型的吸烟检测系统。本报告将详细介绍该系统的实际应用与实现,包括系统架构、功能实现、使用说明、检测示例、数据集获取…

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上&#xff0c;或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景&#xff1a; 表单…

同城跑腿APP开发,随叫随到超方便!

随着移动互联网的发展和人们生活节奏的加快&#xff0c;越来越多的人们没有闲暇的时间来做一些繁琐的事情&#xff0c;比如说买药、挂号、排队、送花、取文件等等。如果没有时间去处理这些事情怎么办&#xff1f;开发同城跑腿APP&#xff0c;提供跑腿服务&#xff0c;随时办事随…

uni-app与原生插件混合开发调试1-环境准备

uni-app与原生插件混合开发调试系列文章分为3篇&#xff0c;分别详细讲了《环境准备》、《搭建uni-app本地开发调试环境》和《安卓原生插件开发调试和打包》&#xff0c;3篇文章完整详细地介绍了“从环境安装配置到本地开发调试到原生插件打包”整个流程。 相关名词和概念解释…

C++ | Leetcode C++题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; class Solution { public:int majorityElement(vector<int>& nums) {int candidate -1;int count 0;for (int num : nums) {if (num candidate)count;else if (--count < 0) {candidate num;count 1;}}return candidate;…

大咖共话|智领未来,数字化革新生命健康产业

在数字化浪潮席卷全球的今天&#xff0c;生命健康产业正迎来前所未有的发展机遇。6月20日&#xff0c;“第三届滨海中关村协同创新发展交流会”在北京隆重举办&#xff0c;唯迈医疗与业界大咖齐聚一堂&#xff0c;在“数字化赋能驱动生命健康产业发展”圆桌论坛上&#xff0c;共…

Modsecurity安装+Nginx+腾讯云CentOS+XSS-Labs靶场+WAF规则

君衍. 一、项目环境介绍二、ModSecurity介绍1、Modsecurity基本概述2、Modsecurity工作原理3、Modsecurity功能特点4、Modsecurity优点5、Modsecurity缺点 三、Nginx介绍及配置文件1、Nginx基本概述2、Nginx应用场景3、正向代理4、反向代理5、负载均衡6、动静分离7、主页面路径…

LeetCode 算法:二叉树的中序遍历 c++

原题链接&#x1f517;&#xff1a;二叉树的中序遍历 难度&#xff1a;简单⭐️ 题目 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2] 示例 2&#xff1a; 输入&…

运动蓝牙耳机哪个口碑最好?五大高口碑顶尖单品推荐

在这个快节奏时代&#xff0c;智能手机的普及使得运动开放式耳机逐渐成为我们日常出行的必备单品。运动开放式耳机凭借独特的外形设计&#xff0c;赢得了众多消费者的喜爱。它们不同于传统的入耳式设计&#xff0c;以舒适佩戴为核心&#xff0c;有效缓解了长时间佩戴对耳部造成…

Pikachu靶场--CRSF

借鉴参考 CSRF跨站请求伪造&#xff08;CTF教程&#xff0c;Web安全渗透入门&#xff09;_bilibili pikachu靶场CSRF之TOKEN绕过_csrf token绕过的原理-CSDN博客 CSRF(get) 发现需要登录 查看提示&#xff0c;获取username和password 选择一个用户进行登录 选择修改个人信息 …

哪款护眼落地灯护眼效果好?五款高品质护眼落地灯分享

哪款护眼落地灯护眼效果好&#xff1f;想要保护好宝宝视力&#xff0c;从灯光上下手可是很关键&#xff01;普通照明灯有眩光、蓝光是伤害娃视力的主要“元凶”&#xff01;现在市面上护眼大路灯炙手可热&#xff0c;哪款护眼落地灯质量好&#xff1f;护眼大路灯应该怎么选呢&a…