使用 SVM 和决策树进行集成学习
集成学习是一种机器学习技术,它结合了多个单独的模型来提高预测性能。集成学习中使用的两种流行算法是支持向量机 (SVM) 和决策树。
什么是集成学习?
通过合并许多模型(也称为“基础学习器”或“弱学习器”),集成学习是一种机器学习方法,可创建更强大的模型(称为“集成模型”)。集成学习的概念基于这样一个前提:通过聚合众多模型的预测,集成模型可能经常优于集成中的任何单个模型。
什么是决策树?
决策树是一种树状结构,其中:
- 每个内部节点代表对属性的“测试”(例如,某个特征是否大于某个阈值)。
- 每个分支代表测试的结果。
- 每个叶节点代表一个类标签(在分类中)或一个连续值(在回归中)。
什么是支持向量机?
支持向量机 (SVM) 是用于分类和回归任务的监督学习模型。在分类中,支持向量机找到最能区分特征空间中不同类的超平面。选择该超平面是为了最大化边距,即超平面与每个类最近的数据点之间的距离,也称为支持向量。
如何结合支持向量机(SVM)和决策树?
以下是如何结合支持向量机 (SVM) 和决策树的一些常见方法:
- Bagging(引导聚合):这涉及在训练数据的不同子集上训练多个 SVM 或决策树,然后组合它们的预测。这可以减少过度拟合并提高泛化能力。
- Boosting:像 AdaBoost 这样的算法可用于顺序组合多个 SVM 或决策树,每个后续模型都会关注前一个模型的错误。这可以提高组合模型的整体性能。
- 随机森林:这种集成方法结合了多个在特征的随机子集和样本上训练的决策树。它对于分类和回归任务都有效。
- 级联 SVM:这种方法涉及使用决策树来预先选择样本,然后将这些样本输入到单独的 SVM 分类器中。当数据集很大并且 SVM 训练的计算成本很高时,这会很有用。
- SVM 作为决策树的特征选择器:使用 SVM 从数据集中选择最相关的特征,然后根据所选特征训练决策树。这可以帮助提高决策树的可解释性并减少不相关特征的影响。
- 堆叠:在数据集上分别训练多个 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、加载和分割数据集
加载乳腺癌数据集 |
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
# 创建投票分类器 |
模型评估
- 进行预测:使用测试数据对对象predict调用该方法,以对乳腺癌数据集进行预测。voting_clf_bcX_test_bc
- 评估准确性:该accuracy_score函数用于将预测标签与测试集中的y_pred_bc实际标签进行比较。y_test_bc然后使用 f 字符串格式将准确性打印到控制台。
# 进行预测 |
输出:Accuracy on breast cancer dataset: 0.9385964912280702