决策树——基于乳腺癌数据集与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算法的主要步骤如下:
- 从原始数据集中有放回地随机抽样,生成多个子数据集。
- 在每个子数据集上训练一个基模型(如决策树)。
- 对新数据进行预测时,将所有基模型的预测结果进行平均或投票,得到最终的预测结果。
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)算法是一种集成学习方法,通过结合多个决策树的预测结果来提高整体模型的性能和稳定性。其基本思想是通过构建多个决策树,并将每棵树的预测结果进行平均(回归问题)或投票(分类问题),从而得到最终的预测结果。
随机森林算法的主要步骤如下:
- 数据集随机采样:从原始数据集中有放回地随机抽样,生成多个子数据集。
- 决策树训练:在每个子数据集上训练一棵决策树。每棵树在训练时只使用数据集的一个随机子集,并且在每个节点的分裂时只考虑特征的一个随机子集。
- 预测结果集成:对新数据进行预测时,将所有决策树的预测结果进行平均(回归问题)或投票(分类问题),得到最终的预测结果。
随机森林算法的优点包括:
- 降低过拟合:通过集成多个决策树,随机森林可以有效降低模型的方差,减少过拟合。
- 提高泛化能力:随机森林在处理高维数据和大数据集时表现良好,具有较强的泛化能力。
- 处理缺失值:随机森林可以处理部分缺失的数据,不需要对缺失值进行特殊处理。
- 计算特征重要性:随机森林可以计算每个特征的重要性,有助于特征选择和数据理解。
随机森林算法的缺点包括:
- 计算开销大:由于需要训练大量的决策树,随机森林的训练和预测时间较长,计算开销较大。
- 模型解释性差:由于集成了多个决策树,随机森林的模型解释性较差,不容易理解每个特征对最终预测结果的影响。
下面是一个使用随机森林算法进行分类的示例代码:
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn