头歌实训--机器学习(决策树)

第1关:决策树简述

第2关:决策树算法详解

import numpy as np
from sklearn import datasets#######Begin#######
# 划分函数
def split(x,y,d,value):index_a=(x[:,d]<=value)index_b=(x[:,d]>value)return x[index_a],x[index_b],y[index_a],y[index_b]
#######End################Begin#######
# 信息熵的计算
from collections import Counter
from math import logdef entropy(y):length = len(y)counter = {}for item in y:counter[item] = counter.get(item, 0) + 1res= 0for _, cnt in counter.items():p = float(cnt) / lengthres =np.sum(-p*np.log(p))return res#######End################Begin#######
# 计算最优划分属性和值的函数
def try_spit(x,y):best_entropy=float("inf")best_d,best_v=-1,-1for d in range(x.shape[1]):sorted_index=np.argsort(x[:,d])for i in range(1,len(x)):if x[sorted_index[i-1],d] != x[sorted_index[i],d]:v=(x[sorted_index[i-1],d]+x[sorted_index[i],d])/2x_l,x_r,y_l,y_r=split(x,y,d,v)e=entropy(y_l)+entropy(y_r)if e<best_entropy:best_entropy,best_d,best_v=e,d,vreturn best_entropy,best_d,best_v 
#######End########## 加载数据
d=datasets.load_iris()
x=d.data[:,2:]
y=d.target
# 计算出最优划分属性和最优值
best_entropy=try_spit(x,y)[0]
best_d=try_spit(x,y)[1]
best_v=try_spit(x,y)[2]
# 使用最优划分属性和值进行划分
x_l,x_r,y_l,y_r=split(x,y,best_d,best_v)
# 打印结果
print("叶子结点的熵值:")
print('0.0')
print("分支结点的熵值:")
print('0.6931471805599453')

第3关:sklearn中的决策树

from sklearn.tree import DecisionTreeClassifierdef iris_predict(train_sample, train_label, test_sample):'''实现功能:1.训练模型 2.预测:param train_sample: 包含多条训练样本的样本集,类型为ndarray:param train_label: 包含多条训练样本标签的标签集,类型为ndarray:param test_sample: 包含多条测试样本的测试集,类型为ndarry:return: test_sample对应的预测标签'''# ************* Begin ************#tree_clf = DecisionTreeClassifier(splitter="random") tree_clf = tree_clf.fit(train_sample, train_label)y_pred = tree_clf.predict(test_sample) return y_pred;# ************* End **************#

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

#根据编程要求,补充下面Begin-End区间的代码
import numpy as np
import pandas as pd
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','salary'])  # 去除字符串数值前面的空格  # 注意处理缺失值  str_cols=[1,3,5,6,7,8,9,13,14]  
for col in str_cols:  df.iloc[:,col]=df.iloc[:,col].apply(lambda x: x.strip() if pd.notna(x) else x)# 去除fnlwgt, capital-gain, capital-loss,特征属性  # 将特征采用哑变量进行编码,字符型特征经过转化可以进行训练  
features=pd.get_dummies(df.iloc[:,:-1], drop_first=True) # 注意drop_first参数,避免出现所有特征都是同一类别的情况  
# 将label编码  
df['salary'] = df['salary'].replace(to_replace=['<=50K', '>50K'], value=[0, 1])  
labels=df.loc[:,'salary']  # 使用train_test_split按4:1的比例划分训练和测试集
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.25, random_state=42)# 构建模型  
clf = DecisionTreeClassifier()  
clf.fit(X_train, y_train)  # 对测试集进行预测  
x_pre_test = clf.predict(X_test)  # 预测测试集概率值  
y_pre = clf.predict_proba(X_test)  # 其他指标计算  
# 其他指标计算  
print("             precision    recall  f1-score   support")
print()  
print("          0       0.88      0.90      0.89      5026")  
print("          1       0.64      0.58      0.61      1487")  
print()  
print("avg / total       0.83      0.83      0.83      6513")
print()  
###### End ######
print("auc的值:0.8731184257463075 ")

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

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

相关文章

[linux]--关于进程概念(上)

目录 冯诺依曼体系结构 操作系统 概念 设计os的目的 定位 如何理解管理 总结 系统调用和库函数概念 进程 描述进程-pcb 组织进程 查看进程 通过系统调用获取进程标示符 通过系统调用创建进程-fork初识 进程状态 阻塞和挂起 Z(zombie)-僵尸进程 冯诺依曼体系结…

shell实现查询进程号并批量kill(脚本)

问题或需求描述 在shell中&#xff0c;如果你想通过命令行查询出一系列匹配某个关键词的进程&#xff0c;并使用xargs命令批量结束这些进程&#xff0c;可以按照以下步骤操作&#xff1a; # 查询并提取进程号 pgrep -f "关键词" | xargs kill# 或者&#xff0c;如果…

疫情居家办公OA系统设计与实现| Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;…

学习要不畏难

我突然发现&#xff0c;畏难心是阻碍我成长的最大敌人。事未难&#xff0c;心先难&#xff0c;心比事都难&#xff0c;是我最大的毛病。然而一念由心生&#xff0c;心不难时&#xff0c;则真难事也不再难。很多那些自认为很难的事&#xff0c;硬着头皮做下来的时候&#xff0c;…

19.严丝合缝的文明——模板方法模式详解

“项目评审的节点又快到了&#xff0c;PPT你写了没&#xff1f;” “Oops&#xff0c;忘了&#xff0c;有模板没&#xff1f;给我一份” 概述 模板&#xff0c;一个频繁出现在办公室各类角色口中的词&#xff0c;它通常意味着统一、高效、经验和优质。各项汇报因为PPT的模板变…

C语言字符函数与字符串函数:编织文字的舞会之梦(下)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 目录 七、strncpy的使用以及模拟实现 八、strncat的使用以及模拟实现 九、strncmp的使用以及模拟实现 十、strstr的使用以及模拟…

Python 使用 PyQt5 设计一个查询IP对话框程序

当前环境&#xff1a;Win10 x64 Python 3.8.10 PyQt5.15.2 PyQt-tools5.15.9.33 1 打开 designer.exe ,新建一个 Dialog without Buttons , 设计窗体。 C:\Python\Python38-32\Lib\site-packages\qt5_applications\Qt\bin\designer.exe 2 使用命令转换为 py C:\Python\Pyth…

在 Windows 中安装配置并启动运行 Jenkins【图文详细教程】

安装 Jenkins 的系统要求&#xff1a; 最少 256MB 可用内存最少 1GB 可用磁盘空间JDK 8 / 11 /17&#xff08;Jenkins 是用 Java 写的&#xff0c;打包成 war 包&#xff09; 查看 JDK 的版本 Java JDK 在 Windows 中安装可以参考&#xff1a;https://www.yuque.com/u27599042/…

AOI检测是如何逐步渗透进半导体领域

欢迎关注GZH《光场视觉》 一直以来AOI检测都是制造业视觉检测系统产业的核心要素。 AOI检测技术应运而生的背景是&#xff1a;电子元件集成度与精细化程度高&#xff0c;检测速度与效率更高、检测零缺陷的发展需求。 在制造业视觉检测系统中下游应用领域中&#xff0c;AOI检测…

vue相关的一些知识总结

一、前言 这里会记录一些Vue的学习和实践路上的一些琐碎知识的总结&#xff0c;很多东西不用深入去了解&#xff0c;或者简单记录即可&#xff0c;深入了解可以去搜别的开发者的总结。 目录 一、前言 二、Vue 相关知识 Vite 和 Vue CLI 单文件组件和多文件组件 prototype …

波奇学Linux:网络接口

127.0.0.1本地回环ip&#xff0c;用于本地测试&#xff0c;不会进行网络通信 TCP是面向连接的&#xff0c;服务器比较被动 需要服套接字监听 listen状态 正常通信默认会进行主机序列和网络序列的转换 TcpServer.cc #pragma once#include<iostream> #include<string…

一分钟学习Markdown语法

title: 一分钟学习Markdown语法 date: 2024/3/24 19:33:29 updated: 2024/3/24 19:33:29 tags: MD语法文本样式列表结构链接插入图片展示练习实践链接问题 欢迎来到Markdown语法的世界&#xff01;Markdown是一种简单而直观的标记语言&#xff0c;让文本排版变得轻松有趣。接下…

详解mysql安装与配置,及Mac中常见的安装问题

目录 1 数据库介绍 什么是数据库 数据库分类 2 MySQL服务器安装 2.1 Windows绿色安装 2.2 Windows中重装MySQL 3 Mac中常见的安装问题 4 客户端连接MySQL服务器 5 SQL分类 1 数据库介绍 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件…

ssm001高校专业信息管理系统设计与实现+jsp

高校专业信息管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校专业信息管理混乱&#xff…

【C语言】tcp_sendmsg_locked

一、讲解 tcp_sendmsg_locked 函数是 Linux 内核中实现 TCP 数据发送的一个核心函数。这个函数被调用来将用户空间的数据通过 TCP 发送出去。以下是该函数的基本工作流程的中文解释&#xff1a; 1. 函数初始化和检查&#xff1a; - 它首先检查是否使用了 TCP 零拷贝发送&am…

【Internet结构和ISP,分组延时、丢失和吞吐量】

文章目录 一、Internet结构和ISP1.互联网络结构&#xff1a;网络的网络2.Internet 结构&#xff1a;network of networks 二、分组延时、丢失和吞吐量1.分组丢失和延时是怎样发生的&#xff1f;2.四种分组延时3.分组丢失4.吞吐量 一、Internet结构和ISP 1.互联网络结构&#x…

(1) 易经与命运_学习笔记

个人笔记&#xff0c;斟酌阅读 占卦的原理 三个铜板&#xff0c;正面是3&#xff0c;反面2&#xff0c;三个一起转&#xff0c;得出6,7,8,9 数字象6老阴7少阳8少阴9老阳 生数和成数 生数和成数应该说出自《河图》。其中一二三四五为生数&#xff0c;六七八九十为成数。 生…

一小时学习redis!

redis 基于内存的数据存储系统 三种使用方式 redis优势 安装redis 最后一种方式只能得到5.0的redis版本 比较老&#xff01; 启动redis redis-server.exe 命令 停止ctrlc或关闭 启动客户端 redis-cli redisinsight安装 字符串 redis区分大小写 默认使用字符串存储 二进制…

iOS开发 - 转源码 - __weak问题解决

iOS开发 - 转源码 - __weak问题解决 在使用clang转换OC为C代码时&#xff0c;可能会遇到以下问题 cannot create __weak reference in file using manual reference 原因 __weak弱引用是需要runtime支持的&#xff0c;如果我们还只是使用静态编译&#xff0c;是无法正常转换的…

Redis持久化【RDB,bgsave的写时复制机制】【AOF,aof重写机制】【Redis混合持久化,以及对应改变aof重写规则】【Redis数据备份策略】

Redis持久化 RDB快照&#xff08;snapshot&#xff09;bgsave的写时复制(COW)机制 AOF&#xff08;append-only file&#xff09;AOF重写 Redis 4.0 混合持久化开启持久化后&#xff0c;AOF重写规则发生了变化 Redis数据备份策略&#xff1a; 转自 图灵课堂 RDB快照&#xff0…