Bootstrap

决策树——基于乳腺癌数据集与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_matrix
  import numpy as np
  import pandas as pd
  matrix=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_0 pred_1
True_0 46 7
True_1 3 87

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_0 pred_1
True_0 45 8
True_1 3 87

4.3 随机森林算法

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

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

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

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

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

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

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

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

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn
;