当前位置: 首页 > news >正文

决策树——基于乳腺癌数据集与cpu数据集实现

决策树——乳腺癌数据实现

4.1 训练决策树模型,并计算测试集的准确率

1. 读入数据

from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
import numpy as np
import matplotlib.pyplot as plt
biopsy=datasets.load_breast_cancer() #数据集是一个字典
X=biopsy['data']
Y=biopsy['target']
X_train,X_test,Y_train,Y_test\=train_test_split(X,Y,random_state=14) #划分为训练集和测试集
#2. 决策树回归模型
clf=DecisionTreeClassifier(random_state=14)
clf.fit(X_train,Y_train)
Y_test_pred_onetree=clf.predict(X_test)
accuracy_onetree=np.mean(Y_test_pred_onetree==Y_test)*100
print("The test accuracy is {:.1f}%".format(accuracy_onetree))
#93.0%
def show_table(y_true,y_pred):from sklearn.metrics import confusion_matriximport numpy as npimport pandas as pdmatrix=confusion_matrix(y_true,y_pred)level=np.unique(y_true).tolist()Index=['True_'+str(content) for content in level]columns=['pred_'+str(content) for content in level]return(pd.DataFrame(matrix,index=Index,columns=columns))
confusion_matrix(Y_test,Y_test_pred_onetree)
The test accuracy is 93.0%array([[46,  7],[ 3, 87]], dtype=int64)
show_table(Y_test,Y_test_pred_onetree)
pred_0pred_1
True_0467
True_1387

4.2 Bagging算法,集成学习

Bagging(Bootstrap Aggregating)算法是一种集成学习方法,通过结合多个模型的预测结果来提高整体模型的性能和稳定性。其基本思想是通过对原始数据集进行多次有放回的随机抽样,生成多个不同的子数据集,并在每个子数据集上训练一个基模型。最终的预测结果通过对所有基模型的预测结果进行平均(回归问题)或投票(分类问题)来确定。

Bagging算法的主要步骤如下:

  1. 从原始数据集中有放回地随机抽样,生成多个子数据集。
  2. 在每个子数据集上训练一个基模型(如决策树)。
  3. 对新数据进行预测时,将所有基模型的预测结果进行平均或投票,得到最终的预测结果。

Bagging算法的优点包括:

  • 降低模型的方差,减少过拟合。
  • 提高模型的稳定性和泛化能力。

下面是一个使用Bagging算法进行分类的示例代码:

from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import numpy as np
import pandas as pd# 加载数据集
data = pd.read_csv('../data/第4章数据/cpus.csv', index_col=0)
Y = data['perf']
Xnames = data.columns
X = data[Xnames[0:6]]# 确保X和Y的样本数量相同
if X.shape[0] != Y.shape[0]:raise ValueError("X和Y的样本数量不同")# 划分数据集
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state=14)# 初始化Bagging分类器,基模型为决策树
bagging = BaggingClassifier(DecisionTreeClassifier(random_state=14), random_state=14)# 在训练数据上训练模型
bagging.fit(X_train, Y_train)# 在测试数据上进行预测
Y_test_pred_bagging = bagging.predict(X_test)# 计算准确率
accuracy_bagging = accuracy_score(Y_test, Y_test_pred_bagging) * 100
print("测试集准确率为 {:.1f}%".format(accuracy_bagging))

这个示例代码展示了如何使用Bagging算法结合决策树进行分类,并计算测试集的准确率。

#例4.3
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier# Initialize the Bagging Classifier with a Decision Tree
bagging = BaggingClassifier(DecisionTreeClassifier(random_state=14), random_state=14)# Fit the model on the training data
bagging.fit(X_train, Y_train)# Predict on the test data
Y_test_pred_bagging = bagging.predict(X_test)# Calculate the accuracy
accuracy_bagging = np.mean(Y_test_pred_bagging == Y_test) * 100
print("The test accuracy is {:.1f}%".format(accuracy_bagging))
The test accuracy is 92.3%
show_table(Y_test, Y_test_pred_bagging)
pred_0pred_1
True_0458
True_1387

4.3 随机森林算法

随机森林(Random Forest)算法是一种集成学习方法,通过结合多个决策树的预测结果来提高整体模型的性能和稳定性。其基本思想是通过构建多个决策树,并将每棵树的预测结果进行平均(回归问题)或投票(分类问题),从而得到最终的预测结果。

随机森林算法的主要步骤如下:

  1. 数据集随机采样:从原始数据集中有放回地随机抽样,生成多个子数据集。
  2. 决策树训练:在每个子数据集上训练一棵决策树。每棵树在训练时只使用数据集的一个随机子集,并且在每个节点的分裂时只考虑特征的一个随机子集。
  3. 预测结果集成:对新数据进行预测时,将所有决策树的预测结果进行平均(回归问题)或投票(分类问题),得到最终的预测结果。

随机森林算法的优点包括:

  • 降低过拟合:通过集成多个决策树,随机森林可以有效降低模型的方差,减少过拟合。
  • 提高泛化能力:随机森林在处理高维数据和大数据集时表现良好,具有较强的泛化能力。
  • 处理缺失值:随机森林可以处理部分缺失的数据,不需要对缺失值进行特殊处理。
  • 计算特征重要性:随机森林可以计算每个特征的重要性,有助于特征选择和数据理解。

随机森林算法的缺点包括:

  • 计算开销大:由于需要训练大量的决策树,随机森林的训练和预测时间较长,计算开销较大。
  • 模型解释性差:由于集成了多个决策树,随机森林的模型解释性较差,不容易理解每个特征对最终预测结果的影响。

下面是一个使用随机森林算法进行分类的示例代码:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn
http://www.lryc.cn/news/492742.html

相关文章:

  • 探索空间自相关:揭示地理数据中的隐藏模式
  • echarts使用示例
  • Flink高可用配置(HA)
  • 如何编写出色的技术文档
  • 学习日记_20241126_聚类方法(谱聚类Spectral Clustering)
  • 图书系统小案例
  • 目标检测之学习路线(本科版)
  • C#调用C++ DLL方法之C++/CLI(托管C++)
  • 免费搭建一个属于自己的个性化博客(Hexo+Fluid+Github)
  • vue3 开发利器——unplugin-auto-import
  • 开发需求总结19-vue 根据后端返回一年的数据,过滤出符合条件数据
  • 人工智能如何改变创新和创造力?
  • Github 基本使用学习笔记
  • 群论入门笔记
  • 2024最新python使用yt-dlp
  • Python + 深度学习从 0 到 1(00 / 99)
  • 单点登录深入详解之设计方案总结
  • Loadsh源码分析-forEach,eachRight,map,flatMap,flatMapDeep,flatMapDepth
  • 检测到“runtimelibrary”的不匹配项: 值“mtd_staticdebug”不匹配值“mdd_dynamic”
  • go clean -modcache命令清理缓存
  • C#结构体排序(数组)
  • 基于边缘智能网关的机房安全监测应用
  • 【Jenkins】自动化部署 maven 项目笔记
  • LeetCode 3243. Shortest Distance After Road Addition Queries I
  • ML 系列:第 31 节— 机器学习中的协方差和相关性
  • 【鸿蒙】鸿蒙开发过程中this指向问题
  • d3-contour 生成等高线图
  • Ubuntu20.04离线安装全教程(包括DellR940重置Raid 5、安装Ubuntu、设置root、安装nvidia英伟达显卡驱动及设置防火墙白名单)
  • Spring Boot 3 集成 Spring Security(2)授权
  • 【开篇】.NET开源 ORM 框架 SqlSugar 系列