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

1.乳腺癌数据集简介

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

2.实战任务

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

3.思路

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

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

(2)特征工程;

(3)构建模型;

(4)训练模型;

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

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

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

4.废话不多说直接上代码
python 复制代码
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进行训练,在验证模型的时候分别把测试机输入两个模型,然后将结果取平均值。这样泛化能力会增强。

相关推荐
炸膛坦客1 小时前
深度学习:(四)python中的广播
人工智能·python·深度学习
蜡笔小新星3 小时前
机器学习和深度学习的区别
开发语言·人工智能·经验分享·深度学习·学习·机器学习
向阳逐梦7 小时前
图像检测【YOLOv5】——深度学习
人工智能·深度学习·yolo
神一样的老师7 小时前
在AIoT设备上加速深度神经网络推理的进展:一项综述
人工智能·深度学习
wei_shuo10 小时前
神经网络的公式推导与代码实现(论文复现)
人工智能·深度学习·神经网络
Hoper.J12 小时前
9. 什么是 Beam Search?深入理解模型生成策略
深度学习·语言模型·llm·aigc·beam search·集束搜索
aWty_12 小时前
机器学习--AlexNet
人工智能·深度学习·机器学习
i嗑盐の小F12 小时前
【 ACM独立出版,见刊后1个月检索!!!】第二届通信网络与机器学习国际学术会议(CNML 2024,10月25-27)
网络·图像处理·人工智能·深度学习·算法·机器学习·计算机视觉
红米煮粥12 小时前
神经网络-MNIST数据集训练
人工智能·深度学习·神经网络
奇客软件13 小时前
iPhone 上丢失了重要的联系人?如何恢复已删除的 iPhone 联系人
windows·深度学习·ios·电脑·笔记本电脑·iphone·学习方法