深度学习实战1--决策树与随机森林(最新版本不报错)

news/2024/9/18 23:00:15/ 标签: 深度学习, 决策树, 随机森林
1.乳腺癌数据集简介

        乳腺癌数据集包含了美国威斯康星州记录的569个病人的乳腺癌的病情,包含30个维度的生理指标数据(特征),以及乳腺癌是恶性还是良性的标签。因为这是一个二分类问题, 也叫二类判别数据集。

2.实战任务

        这数据主要包含569个样本。每个样本有30个特征(30个生理指标数据)和1个标签 (良性还是恶性)。对于本次任务,并不需要了解30个生理指标的含义。只要知道,这30个指标和恶性、良性之间存在某种关联。

3.思路

解决思路非常简单,对于这种大数据问题(对于几百万的数据来说流程类似),主要有5个步骤:

(1)了解数据集,探索数据;

(2)特征工程;

(3)构建模型;

(4)训练模型;

(5)用测试集来评估模型。

注意这个流程是主要的流程步骤,但不是绝对的。在下一个实战中,会讲解如何使 用模型融合,来增强整体模型的泛化能力。

泛化能力泛化能力是机器学习中一个非常重要的概念,它指的是模型对于在训练过程中未曾见过的数据的表现能力。

4.废话不多说直接上代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import pyplot
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.preprocessing import LabelEncoder# 读取数据
breast_cancer_data = pd.read_csv("D:\\breast_data.csv",header=None,names=['C_D', 'C_T', 'U_C_Si', 'U_C_Sh', 'M_A', 'S_E_C_S', 'B_N', 'B_C', 'N_N', 'M', 'Class']
)# 查看维度
print('查看维度:')
print(breast_cancer_data.shape)# 查看数据
print('查看数据')
print(breast_cancer_data.head(25))# 数据统计描述
print('数据统计描述')
print(breast_cancer_data.describe())# 数据分布情况
print("数据分布情况")
print(breast_cancer_data.groupby('Class').size())#按照'class'列的值进行分组,并计算每个组的元素数量
#缺失数据处理
#计算B_N列的平均值,忽略问号
mean_value=breast_cancer_data[breast_cancer_data["B_N"]!="?"].astype(int)["B_N"].mean()
#astype更改类型
#用计算出的平均值替换问号。并转换为整数类型
breast_cancer_data['B_N']=breast_cancer_data["B_N"].replace("?",mean_value).astype(int)
#评估算法
X=breast_cancer_data.iloc[:,1:9]#iloc特征列选取
Y=breast_cancer_data['Class']#目标列
X_train,X_validation,y_train,y_validation=train_test_split(X,Y,test_size=0.2,random_state=7)
'''test_size=0.2: 指定测试集占总数据集的比例为20%。这意味着剩余的80%将被用作训练集
random_state=7: 随机数生成器的种子。设置这个参数可以确保每次分割数据集时都能得到相同的结果,这对于实验的可重复性很重要
随机数种子可以是任何整数值,但通常选择一个固定的数字,如0、7、42等,这些数字在编程社区中被广泛接受作为默认值选择哪个数字作为种子并没有严格的规则,重要的是保持一致性,以便在需要时能够复现结果'''
#使用knn算法
knn=KNeighborsClassifier()
knn.fit(X_train,y_train)
predictions=knn.predict(X_validation)#X_validation: 这是验证集的特征数据,模型将使用这些数据来生成预测结果
print('使用knn算法的精确度:',accuracy_score(y_validation,predictions))#y_validation: 这是验证集的真实标签,即模型预测之前已知的正确答案
print('混淆矩阵:\n',confusion_matrix(y_validation,predictions))#这是模型对验证集X_validation的预测结果
print('分类报告:\n',classification_report(y_validation,predictions))

运行结果

  • 精确度(Precision):对于每个类别,表示为正类别的预测中,有多少是正确的
  • 召回率(Recall):也称为真正率或灵敏度,表示为每个类别,实际为正类别的样本中,有多少被正确预测。
  • F1 分数(F1 Score):精确度和召回率的调和平均值,是一个综合考虑精确度和召回率的性能指标。
  • 支持度(Support):每个类别的实际出现次数

 

Sklearn   库的全称是 Scikit-learn,  是一种机器学习的工具。可以简单高效地进行数据 挖掘,快速地调用常见的数据分析工具。 pandas和numpy一般同时使用,不单独使用。

5.优化:#一个关于警告的库

import warnings

井让本代码不再弹出任何警告

warnings.filterwarnings("igmore")

warning 不影响程序运行,但是总是弹出来也使人心神不宁。这个语句可以忽视所有的 warning,这样就不会在代码中看到任何的warning了,这是一个小技巧。但是建议大家在有时间且有能力的情况下,看一下warning 打印出的信息。信息一般是,例如某个语法将会在未来某个版本中作废,请使用某语句来代替等。

接下来是分步骤讲解,光想要代码的小伙伴可以忽略不看了,想了解更多的小伙伴可以看一下。

优化:用剪枝增强决策树的繁华能力,修改决策树。加大最大深度的设置

过拟合:指的是模型在训练数据上表现得非常好,但是对于未见过的新数据,其预测能力却很差

决策树剪枝:决策树剪枝是防止决策树过拟合的一种技术。在决策树的构建过程中,剪枝有助于减少树的复杂度,提高模型的泛化能力。

探索数据

        探索数据就是查看数据的大小、维度等特征。为了将数据整合整理,建议将数据都用 Pandas 的 dataframe格式存储起来,这样操作快速,可视化方便。

决策树模型

        在训练之前,需要划分数据集和测试集。把数据集中的30%作为测试集来验证模型的效果。

df_train   是要被划分的特征;df_target  是对应特征的标签,也就是label。test_size是数据集中,把多少划分成test,多少划分成train。random_state是设定随机种子,因为这个划分是随机在数据集中选取30%的数据作为test(不是前30%也不是后30%而是随机选取),因此每一次运行代码可能得到的测试集不  样,这样就难以重复运行同样的代码来改进模型。因此通过设定 random_state,       让每一次的随机都是相同的随机。这个划分不仅仅可以用于划分测试集和训练集,还可以用来分割训练集来实现 多模型,增强泛化能力。

        例如,假设现在已经有的训练集和测试集。可以再把训练集对半分成训练集1和训练集2。在训练模型的时候,可以一个用训练集1进行训练, 一个用训练集2进行训练,在验证模型的时候分别把测试机输入两个模型,然后将结果取平均值。这样泛化能力会增强。

 


http://www.ppmy.cn/news/1519392.html

相关文章

【3.6】贪心算法-解救生艇问题

一、题目 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit 。 返回载到每一个人所需的最小船数。(保证每个人都能被船载)。 二、解题思路 题目要求每艘船最多能载两人&…

安美数字酒店宽带运营系统-任意文件读取

漏洞描述: 安美数字酒店宽带运营系统 weather.php 接口存在任意文件读取漏洞,未经身份验证攻击者可通过该漏洞读取系统重要文件(如数据库配置文件、系统配置文件)、数据库配置文件等等,导致网站处于极度不安全状态 fo…

c++中的匿名对象及内存管理及模版初阶

目录 c中的匿名对象 日期到天数的转换 深入理解析构 深入理解拷贝构造 内存管理 全局变量和static变量的区别; malloc/calloc/realloc的区别 new和delete的意义? operator new与operator delete函数 对比malloc和new operator 定制operator ne…

OceanBase 功能解析之 Binlog Service

前言 MySQL,是在全球广泛应用的开源关系型数据库,除了其稳定性、可靠性和易用性,他早期推出的二进制日志功能,即binlog,也是MySQL广受欢迎的原因。 MySQL binlog,即二进制日志,是 MySQL 中用于…

django之ForeignKey、OneToOneField 和 ManyToManyField

在Django中,ForeignKey、OneToOneField 和 ManyToManyField 是用于定义模型之间关系的字段类型。 ForeignKey ForeignKey 用于定义多对一的关系。例如,一个Employee可以属于一个Department,一个Department可以有多个Employee。 from djang…

String的基本特;String的内存分配;字符串拼接操作;intern()的使用;经典面试题

目录 String的基本特性String的内存分配字符串拼接操作intern()的使用经典面试题 String的基本特性 创建的两种方式 String s “a” //字面量的定义方式 String s2 new String(“fd”) String类声明为final,不可被继承,实现了Serializable接口&#xf…

昇腾AI处理器的计算核心 - AI Core即DaVinci Core

昇腾AI处理器的计算核心 - AI Core即DaVinci Core flyfish 从一段代码的解释开始 template <typename T> class GlobalTensor { public:void setGlobalBuffer(T* buffer, uint32_t buffersize) {// 在这里实现设置全局缓冲区的逻辑} };语法的说明&#xff0c;主要用于…

优化 Webpack 打包体积的思路

在现代前端开发中&#xff0c;优化 Webpack 打包体积是提升应用性能的重要手段。以下是一些有效的优化思路&#xff1a; 提取第三方库&#xff1a;将第三方库单独打包&#xff0c;并通过 CDN 引入。这样不仅减少了打包体积&#xff0c;还利用了 CDN 的缓存优势&#xff0c;提高…

索迪迈科技油罐车监控系统中车载摄像头的布局策略

随着科技的不断发展&#xff0c;车载监控系统在油罐车上的安装已经成为了一种趋势。这不仅大大降低了车辆的安全隐患与运营成本&#xff0c;更对石油运输企业优化资源配置、提高市场竞争力起到了积极的促进作用。那么&#xff0c;在油罐车监控系统中&#xff0c;如何合理布局车…

html table tbody deleteRow有残留?

html table tbody deleteRow有残留? 问题描述&#xff1a;这个问题描述的是在使用 HTML 的 deleteRow 方法从一个 table 的 tbody 中删除行时&#xff0c;表格中仍然存在某些行。 参考方法1&#xff1a;表格移除多行的时候, 移除行数字索引顺序要从大到小, 而不能从小到大。 …

【华为OD】2024D卷——查找众数与中位数

题目&#xff1a; 众数是指一组数据中出现次数量多的那个数&#xff0c;众数可以是多个。 中位数是指把一组数据从小到大排列&#xff0c;最中间的那个数&#xff0c;如果这组数据的个数是奇数&#xff0c;那最中间那个就是中位数&#xff0c;如果这组数据的个数为偶数&#xf…

【我的Android进阶之旅】使用TabLayout自定义一个TitleTabView

文章目录 零、效果图一、自定义一个TitleTabView1.1 自定义属性(attrs.xml 中)1.2 自定义TitleTabView1.3 TabItem的子布局1.4 颜色值二、在 XML 中使用 `TitleTabView`2.1 布局文件(XML)2.1.1属性说明三、在 Kotlin 中使用 `TitleTabView`:零、效果图 其中Tab 2是选中的效果…

【笔记】数据结构——8月27日

toc 静态链表 静态链表的存储结构 #define maxn 15struct space {int cur;int key; }s[maxn];int LocateElem_SL(SLinkList *s,ElemType e) {//在静态链表中查找第一个值为e的元素//若找到&#xff0c;则返回它在链表中的位置&#xff0c;否则返回0 is[0].cur;while(i&…

使用本地IP无法访问前端项目的问题

说明&#xff1a;记录一次使用本机IP无法访问前端项目的问题 场景&解决 前端项目在我本机电脑上部署完成&#xff0c;我想通过局域网的IP把地址发给测试&#xff0c;发现使用localhost和127.0.0.0都能访问到前端项目&#xff0c;但是这个地址只能在自己的电脑上访问。 解…

记一次学习--webshell绕过(利用清洗函数)

目录 样本 样本修改 样本 <?php $a array("t", "system"); shuffle($a); $a[0]($_POST[1]); 通过 shuffle 函数打乱数组,然后通过$a[0]取出第一个元素&#xff0c;打乱后第一个元素可能是t也可能是system。然后再进行POST传参进行命令执行。 这里抓…

使用 Puppeteer 在 PHP 中解决 reCAPTCHA 以进行网页抓取

您是否在抓取数据时遇到 reCAPTCHA 障碍&#xff1f;我也遇到过。这些 CAPTCHA 挑战会将简单的抓取任务变成一大障碍。但别担心&#xff0c;我有一个解决方案可以帮助您轻松绕过这些障碍。 在本博文中&#xff0c;我将引导您使用 Puppeteer&#xff08;一个功能强大的 Node.js…

瑞芯微RK3566开发板USB OTG模式介绍及命令切换,触觉智能EVB3566主板鸿蒙硬件厂商

一、USB OTG的模式 host模式&#xff08;下行&#xff09;&#xff1a;为u盘等设备供电&#xff0c;不可以进行调试&#xff0c;连接adb或者烧录等操作。 device模式&#xff08;上行&#xff09;&#xff1a;可以进行调试&#xff0c;连接adb或者烧录等操作&#xff0c;即US…

基于xr-frame实现微信小程序的人脸识别3D模型叠加AR功能(含源码)

前言 xr-frame是一套小程序官方提供的XR/3D应用解决方案&#xff0c;基于混合方案实现&#xff0c;性能逼近原生、效果好、易用、强扩展、渐进式、遵循小程序开发标准。xr-frame在基础库v2.32.0开始基本稳定&#xff0c;发布为正式版&#xff0c;但仍有一些功能还在开发&#…

商圣集团:数字创新,引领智慧生活新篇章

在全球化经济不断演进的大潮中&#xff0c;数字经济已成为推动社会进步的关键引擎&#xff0c;重塑着我们的生产与生活模式。商圣集团&#xff0c;以服务社会、创新驱动为核心价值观&#xff0c;致力于利用数字化技术&#xff0c;为个人和企业带来高效、便捷的服务体验&#xf…

OpenCV绘图函数(7)从一个椭圆定义中提取出多边形的顶点坐标函数ellipse2Poly()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 近似一个椭圆弧为一个多边形线。 函数 ellipse2Poly 计算近似指定椭圆弧的多边形线的顶点。它被 ellipse 函数所使用。如果 arcStart 大于 arcEn…