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

embedded/2024/11/14 3:49:57/
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/embedded/104481.html

相关文章

C++国密SM2算法加解密的使用

目录 效果 在线校验 代码实现参考 项目 下载 效果 加密字符串:lxw 123abcD 2024-09-01:12:00加密后信息:042E82EE8ACE2BD56FA71DC6A0C34190627AA365F8EEE6261903BEE327A85EB5E1D6E78F2D79AD6F6DC9E45C0829625DC3165BB78BD897F99044A640F930653747939CF9D5A10C8216F945A559…

气膜体育馆:学校体育设施的全新选择—轻空间

随着现代教育的发展,学校对体育设施的需求日益增加。一个良好的体育馆不仅能够为学生提供健康运动的场所,还能为学校举办各类体育赛事、活动提供便利。然而,传统体育馆的建设成本高昂、周期长,并且对场地要求较高。气膜体育馆作为…

关于计算机网络的一个小讨论

采用分组交换方式,将数据包分成较小的包,到达目的地以后再组装起来, 这是路由器功能还是交换机功能 2017年11月26日,星期日,通过描述,可以看出来理论知识实际上还是停留在路由器和交换机上, 分…

MobileNetV2 论文解读

一、介绍 MobileNetv2 网络是由google 团队在2018年提出的,相比MobileNet V1网络,准确率更高,模型更小。 网络中的亮点: Inverted Residuals (倒残差结构) Linear Bottlenecks 二、MobileNetV2详解 2.1 倒残差结构 2.1.1 残差结…

2024年Linux内核社区关于large folio和mthp的关键进展

1. 概述 在 Linux 内核中,一个 folio 可以只包含 1 个 page,也可以包含多个 page。当一个 folio 包含多个 page 的时候,我们称它为一个 large folio,在中文社区,我们一般称呼其为大页。采用 large folio 可潜在带来诸多…

华为OD机试(C卷,100分)- 单词接龙

(C卷,100分)- 单词接龙 题目描述 单词接龙的规则是: 可用于接龙的单词首字母必须要前一个单词的尾字母相同; 当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等,则取字典序最小的单词;已经参…

NVIDIA Ada Lovelace 架构

目录 3D 图形领域的突破性时刻。 第四代 Tensor Core 第三代 RT Core 着色器执行重排序 DLSS 3 AV1 编码器 致力于打造出色的游戏与创作、专业图形、AI 和计算性能。 3D 图形领域的突破性时刻。 Ada GPU 架构能够为光线追踪和基于 AI 的神经图形提供革命性的性能。该架构…

算法的学习笔记—最小的 K 个数(牛客JZ40)

😀前言 在编程面试中,找出一个数组中最小的K个数是一个常见的问题。虽然看似简单,但要在高效性方面有所保证却并不容易。本文将介绍两种有效解决该问题的算法:基于堆的解法和快速选择算法。我们将详细讲解它们的实现方式、时间复杂…