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

devtools/2024/11/25 10:19:41/

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

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.ppmy.cn/devtools/136814.html

相关文章

[高阶数据结构三] B-树详解

1.前言 相信大家或多或少的都听过B树,本篇文章将带领大家一步一步学习B树,从了解他的概念到模拟实现他的插入过程。 本章重点: 了解B树的相关概念后,由于后续学习B树的插入过程较难,所以会一步一步的对他的插入进行分…

C++:用红黑树封装map与set-1

文章目录 前言一、STL源码分析二、红黑树的构建三、map与set整体框架的搭建与解析四、如何取出进行比较?1. met与set的数据是不同的2. 取出数据进行比较1)问题发现2)仿函数解决 五、封装插入六、迭代器的实现1. operator* 与operator->2. …

Dubbo Golang快速开发Rpc服务

开发 RPC Server & RPC Client 基于 Dubbo 定义的 Triple 协议,你可以轻松编写浏览器、gRPC 兼容的 RPC 服务,并让这些服务同时运行在 HTTP/1 和 HTTP/2 上。Dubbo Go SDK 支持使用 IDL 或编程语言特有的方式定义服务,并提供一套轻量的 …

【计算机网络】IP协议

一、IP协议的功能 提供将数据从A主机跨网络送到主机B的能力 (在复杂的网络环境中确定一个合适的路径) 二、IP协议格式 ​​​​​​​1.报头的含义 (1)一般字段 ① 4位版本:指定IP协议的版本,对于IPv4来说就是4 ② 4位首部长度…

定时/延时任务-Timer用法

文章目录 1. 概要2. 简述2.1 固定速率2.2 固定延时2.3 区别 3. Timer 的用法3.1 固定延时 - public void schedule(TimerTask task, long delay, long period)3.1.1 解释 3.2 固定延时 - public void schedule(TimerTask task, Date firstTime, long period)3.3 固定速率 - pub…

mfc100u.dll是什么?分享几种mfc100u.dll丢失的解决方法

mfc100u.dll 是一个动态链接库(DLL)文件,属于 Microsoft Foundation Classes (MFC) 库的一部分。MFC 是微软公司开发的一套用于快速开发 Windows 应用程序的 C 类库。mfc100u.dll 文件包含了 MFC 库中一些常用的函数和类的定义,这…

C++设计模式:建造者模式(Builder) 房屋建造案例

什么是建造者模式? 建造者模式是一种创建型设计模式,它用于一步步地构建一个复杂对象,同时将对象的构建过程与它的表示分离开。简单来说: 它将复杂对象的“建造步骤”分成多部分,让我们可以灵活地控制这些步骤。通过…

设计模式-创建型-建造者模式

1.概念 建造者设计模式(Builder Design Pattern)是一种创建型设计模式,它通过将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示。 2.作用 用于简化对复杂对象的创建 3.应用场景 当我们有一个非…