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

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

def entropy(y):
    length = len(y)
    counter = {}
    for item in y:
        counter[item] = counter.get(item, 0) + 1
    res= 0
    for _, cnt in counter.items():
        p = float(cnt) / length
        res =np.sum(-p*np.log(p))
    return res

#######End#########

#######Begin#######
# 计算最优划分属性和值的函数
def try_spit(x,y):
    best_entropy=float("inf")
    best_d,best_v=-1,-1
    for 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])/2
                x_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,v
    return 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 DecisionTreeClassifier

def 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.mfbz.cn/a/475813.html

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

相关文章

聚类算法之DBSCAN (Density-Based Spatial Clustering of Applications with Noise)

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; DBSCAN是在1990年代后期推出的一种聚类方法&#xff0c;它迅速成为基于密度的聚类技术中最受欢迎和广泛使用的算法之一。与传统的聚类方法如K-me…

MT1490 修改字符串

原题链接:https://www.matiji.net/exam/brushquestion/490/778/B3FCFEC101BD05189BB74D522E019504 输入1个字符串, 如果其中小写字符多于大写字符&#xff0c;则将其全部转换为小写字符&#xff0c;如果大写字符多于小写字符&#xff0c;则全部转换为大写字符。 输入格式&…

高精度铸铁平台制造工艺有多精细——河北北重机械

高精度铸铁平台制造工艺通常包括以下几个步骤&#xff1a; 材料准备&#xff1a;选择合适的铸铁材料&#xff0c;并确保其质量符合要求。常用的铸铁材料包括灰铸铁、球墨铸铁等。 模具制造&#xff1a;根据平台的设计要求&#xff0c;制造适用的模具。模具一般由砂型、金属模具…

基于springboot+mysql+Shiro实现的宠物医院管理系统

1.项目介绍 系统主要为用户提供了管理员权限的用户&#xff0c;实现了前台查看客户信息、在线添加预约等&#xff1b;后台管理医生坐诊信息、管理就诊信息、修改密码&#xff0c;管理公告、管理宠物分类、管理就诊、管理用户、修改密码等。在设计方面&#xff0c;本系统采用MV…

CTF-辨别细菌

题目描述&#xff1a;try your best to find the flag. 进入靶场后发现是一个游戏&#xff0c;需要全部答对才可以得到最后的flag 查看了一下源码&#xff0c;发现有一个答案模板的模块 尝试解释一下代码 <!-- 答案模版 --> <script id"template_game_pi…

我国高纯电子级过氧化氢产量逐渐增长 未来有望实现完全国产替代

我国高纯电子级过氧化氢产量逐渐增长 未来有望实现完全国产替代 高纯电子级过氧化氢是氧化氢产品中技术含量最高的细分品类&#xff0c;多用于印刷电路板蚀刻、硅片清洗、光刻胶剥离等方面。经过多年发展&#xff0c;高纯电子级过氧化氢制备工艺已经成熟&#xff0c;大致可分为…

系统设计实例(二)新闻订阅系统

新闻订阅系统的设计和实现 Web 服务器&#xff1a;Web 服务器将流量重定向到不同的内部服务。Post 服务&#xff1a;在数据库和缓存中持久化帖子。Fanout 服务&#xff1a;将新内容推送到朋友的新闻订阅中。新闻订阅数据存储在缓存中以便快速检索。通知服务&#xff1a;通知朋…

设置客户端桌面壁纸 文件夹重定向

域策略-设置客户端桌面壁纸 1/服务器管理器组策略管理-gwy.com-Defait Domain Policy-右击编辑 2/用户配置-首选项-置windows设置-文件夹-右击文件夹-创建-C:\bgp-应用 3/在客户端策略更新-gpupdate /force 命令符-查看是否正确 4/服务器创建c:\image\R-C.jpg&#xff0c;共享文…

【什么是Internet?网络边缘,网络核心,分组交换 vs 电路交换,接入网络和物理媒体】

文章目录 一、什么是Internet&#xff1f;1.从具体构成角度来看2.从服务角度来看 二、网络结构1.网络边缘1.网络边缘&#xff1a;采用网络设施的面向连接服务1.1.目标&#xff1a;在端系统之间传输数据1.2.TCP服务 2.网络边缘&#xff1a;采用网络设施的无连接服务2.1目标&…

Zotero引入英文参考文献作者都是大写字母问题

修改之前是这样的&#xff1a; 修改过程 进入word 打开样式编辑器 打开后&#xff0c;找到这里&#xff1a; 删除 text-case“uppercase” 就可以实现这个样式&#xff1a; 然后我们点击保存&#xff0c;将这个样式文件另存为&#xff0c;然后替换掉原来的文件 源文件在 …

算法详解——Dijkstra算法

Dijkstra算法的目的是寻找单起点最短路径&#xff0c;其策略是贪心加非负加权队列 一、单起点最短路径问题 单起点最短路径问题&#xff1a;给定一个加权连通图中的特定起点&#xff0c;目标是找出从该起点到图中所有其他顶点的最短路径集合。需要明确的是&#xff0c;这里关心…

技巧 获取指定文件夹下的所有文件名称

一. powershell脚本 当一行命令太长的时候&#xff0c;使用反引号 来换行 # 设置要扫描的文件夹路径 $folderPath "E:\mp3"# 构建输出文件的完整路径,将结果输出到桌面上的all_file_name.txt文件中 $outputFilePath [System.IO.Path]::Combine([System.Environm…

档案著录员好干吗

档案著录员是负责对档案资料进行著录、整理和管理的专业人员。他们的工作主要包括&#xff1a; 1. 著录档案资料&#xff1a;根据相关规范和标准&#xff0c;对档案资料进行详细的著录&#xff0c;包括档号、题名、日期、责任者、关键词等信息&#xff0c;以便于后续的检索和利…

缅甸的大开发时代即将到来 缅文wordpress主题模板

Simplify WordPress外贸网站模板 Simplify WordPress外贸网站模板&#xff0c;简洁实用的外贸公司wordpress外贸建站模板。 https://www.jianzhanpress.com/?p4565

蓝桥杯(2):python基础算法【下】

贪心、双指针、二分 11 贪心 11.1 定义 11.2 适用情况 如何判断&#xff1f;&#xff1f;&#xff1f;&#xff01; 11.3 实例 11.3.1 石子合并 只考虑一步&#xff0c;每次都找最小的 那么问题的核心就是&#xff1a;如何选出最小的&#xff01; #石子合并 import heapqn…

Pytorch神经网络-元组/列表如何喂到神经网络中

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

GPT2从放弃到入门(二)

引言 本文介绍如何利用GPT2从零训练一个多轮对话聊天机器人&#xff0c;按照本文的思路可以轻松地训练自己的数据。 数据处理 ⚠️ 这是本文的核心部分&#xff0c;其他的内容甚至可以不用看。 本小节阐述多轮对话数据的处理。 数据来自网上的一份开源数据&#xff1a;htt…

【c++入门】命名空间,缺省参数与函数重载

&#x1f525;个人主页&#xff1a; Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff01;本篇内容我们进入一个新的阶段&#xff0c;进入c的学习&#xff01;希望我的博客内容能对你有帮助&#xff01; 目录 1.c关键字2.第一个c代码3.命名空间3.1 nam…

Linux - 线程互斥和互斥锁

文章目录 前言一、为什么要线程互斥原子性 二、互斥锁互斥锁的创建与销毁互斥锁进行互斥 前言 前几节课&#xff0c;我们学习了多线程的基础概念&#xff0c;这节课&#xff0c;我们来对线程互斥和互斥锁的内容进行学习。 一、为什么要线程互斥 首先我们要明白&#xff0c;对…

AOP切面编程

1.基本概念&#xff1a; AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&#xff09;&#xff0c;跟oop面向过程编程相对&#xff0c;AOP一般用于将公共逻辑和业务逻辑进行拆分&#xff0c;可以减少代码间的耦合性。 有道翻译&#xff1a;AOP—面向切面…