使用 SVM 和决策树进行集成学习

集成学习是一种机器学习技术,它结合了多个单独的模型来提高预测性能。集成学习中使用的两种流行算法是支持向量机 (SVM) 和决策树。

什么是集成学习?
通过合并许多模型(也称为“基础学习器”或“弱学习器”),集成学习是一种机器学习方法,可创建更强大的模型(称为“集成模型”)。集成学习的概念基于这样一个前提:通过聚合众多模型的预测,集成模型可能经常优于集成中的任何单个模型。

什么是决策树?
决策树是一种树状结构,其中

  1. 每个内部节点代表对属性的“测试”(例如,某个特征是否大于某个阈值)。
  2. 每个分支代表测试的结果。
  3. 每个叶节点代表一个类标签(在分类中)或一个连续值(在回归中)。

什么是支持向量机?
支持向量机 (SVM) 是用于分类和回归任务的监督学习模型。在分类中,支持向量机找到最能区分特征空间中不同类的超平面。选择该超平面是为了最大化边距,即超平面与每个类最近的数据点之间的距离,也称为支持向量。

如何结合支持向量机(SVM)和决策树?
以下是如何结合支持向量机 (SVM) 和决策树的一些常见方法:

  1. Bagging(引导聚合):这涉及在训练数据的不同子集上训练多个 SVM 或决策树,然后组合它们的预测。这可以减少过度拟合并提高泛化能力。
  2. Boosting:像 AdaBoost 这样的算法可用于顺序组合多个 SVM 或决策树,每个后续模型都会关注前一个模型的错误。这可以提高组合模型的整体性能。
  3. 随机森林:这种集成方法结合了多个在特征的随机子集和样本上训练的决策树。它对于分类和回归任务都有效。
  4. 级联 SVM:这种方法涉及使用决策树来预先选择样本,然后将这些样本输入到单独的 SVM 分类器中。当数据集很大并且 SVM 训练的计算成本很高时,这会很有用。
  5. SVM 作为决策树的特征选择器:使用 SVM 从数据集中选择最相关的特征,然后根据所选特征训练决策树。这可以帮助提高决策树的可解释性并减少不相关特征的影响。
  6. 堆叠:在数据集上分别训练多个 SVM 和决策树,然后使用另一个模型(例如线性回归或另一个决策树)来组合它们的预测。这通常可以带来比任何单个模型更好的性能。

使用决策树实现支持向量机 (SVM)
在此实现中,我们设置使用带有支持向量机 (SVM) 和决策树 (DT) 的投票分类器作为乳腺癌数据集的基本估计器。

1、导入必要的库
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.ensemble import VotingClassifier
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier


2、加载和分割数据集

加载乳腺癌数据集
breast_cancer = load_breast_cancer()
X_bc, y_bc = breast_cancer.data, breast_cancer.target

# 将数据集分成训练集和测试集
X_train_bc, X_test_bc, y_train_bc, y_test_bc = train_test_split(X_bc, y_bc, test_size=0.2, random_state=42)


3、创建基本估计器

  • SVC(支持向量分类器):该probability=True参数允许模型预测每个类别的概率,这对于VotingClassifier.
  • DecisionTreeClassifier:该分类器创建一个模型,通过学习从数据特征推断出的简单决策规则来预测目标变量的值。每个内部节点代表对属性的“测试”,每个分支代表测试的结果,每个叶节点代表一个类标签。在 的背景下VotingClassifier,决策树充当投票的另一个基本估计器。

创建基本估算器
svm_bc = SVC(probability=True)
dt_bc = DecisionTreeClassifier()

4、集成学习

  • VotingClassifier 创建:VotingClassifier使用 来创建estimators=[('svm', svm_bc), ('dt', dt_bc)],指定用于投票的基本估计器列表。该voting='soft'参数表示分类器将使用软投票,这意味着它根据预测概率之和的 argmax 来预测类标签。
  • 训练投票分类器:使用训练数据对对象fit调用该方法,并在乳腺癌数据集上训练分类器。voting_clf_bcX_train_bcy_train_bc

# 创建投票分类器
voting_clf_bc = VotingClassifier(estimators=[('svm', svm_bc), ('dt', dt_bc)], voting='soft')

训练投票分类器
voting_clf_bc.fit(X_train_bc, y_train_bc)


模型评估

  • 进行预测:使用测试数据对对象predict调用该方法,以对乳腺癌数据集进行预测。voting_clf_bcX_test_bc
  • 评估准确性:该accuracy_score函数用于将预测标签与测试集中的y_pred_bc实际标签进行比较。y_test_bc然后使用 f 字符串格式将准确性打印到控制台。

# 进行预测
y_pred_bc = voting_clf_bc.predict(X_test_bc)

评估准确性
accuracy_bc = accuracy_score(y_test_bc, y_pred_bc)
print(f'Accuracy on breast cancer dataset: {accuracy_bc}')


输出:Accuracy on breast cancer dataset: 0.9385964912280702