- 机器学习基础
- ML - 首页
- ML - 简介
- ML - 快速入门
- ML - 基本概念
- ML - 生态系统
- ML - Python 库
- ML - 应用
- ML - 生命周期
- ML - 必备技能
- ML - 实现
- ML - 挑战与常见问题
- ML - 限制
- ML - 真实案例
- ML - 数据结构
- ML - 数学基础
- ML - 人工智能
- ML - 神经网络
- ML - 深度学习
- ML - 获取数据集
- ML - 分类数据
- ML - 数据加载
- ML - 数据理解
- ML - 数据准备
- ML - 模型
- ML - 监督学习
- ML - 无监督学习
- ML - 半监督学习
- ML - 强化学习
- ML - 监督学习与无监督学习
- 机器学习数据可视化
- ML - 数据可视化
- ML - 直方图
- ML - 密度图
- ML - 箱线图
- ML - 相关矩阵图
- ML - 散点矩阵图
- 机器学习统计学
- ML - 统计学
- ML - 均值、中位数、众数
- ML - 标准差
- ML - 百分位数
- ML - 数据分布
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假设
- 机器学习中的回归分析
- ML - 回归分析
- ML - 线性回归
- ML - 简单线性回归
- ML - 多元线性回归
- ML - 多项式回归
- 机器学习中的分类算法
- ML - 分类算法
- ML - 逻辑回归
- ML - K近邻算法 (KNN)
- ML - 朴素贝叶斯算法
- ML - 决策树算法
- ML - 支持向量机
- ML - 随机森林
- ML - 混淆矩阵
- ML - 随机梯度下降
- 机器学习中的聚类算法
- ML - 聚类算法
- ML - 基于中心点的聚类
- ML - K均值聚类
- ML - K中心点聚类
- ML - 均值漂移聚类
- ML - 层次聚类
- ML - 基于密度的聚类
- ML - DBSCAN 聚类
- ML - OPTICS 聚类
- ML - HDBSCAN 聚类
- ML - BIRCH 聚类
- ML - 亲和传播
- ML - 基于分布的聚类
- ML - 凝聚层次聚类
- 机器学习中的降维
- ML - 降维
- ML - 特征选择
- ML - 特征提取
- ML - 向后消除法
- ML - 前向特征构建
- ML - 高相关性过滤器
- ML - 低方差过滤器
- ML - 缺失值比例
- ML - 主成分分析
- 强化学习
- ML - 强化学习算法
- ML - 利用与探索
- ML - Q学习
- ML - REINFORCE 算法
- ML - SARSA 强化学习
- ML - 演员-评论家方法
- 深度强化学习
- ML - 深度强化学习
- 量子机器学习
- ML - 量子机器学习
- ML - 使用 Python 的量子机器学习
- 机器学习杂项
- ML - 性能指标
- ML - 自动工作流程
- ML - 提升模型性能
- ML - 梯度提升
- ML - 自举汇聚 (Bagging)
- ML - 交叉验证
- ML - AUC-ROC 曲线
- ML - 网格搜索
- ML - 数据缩放
- ML - 训练和测试
- ML - 关联规则
- ML - Apriori 算法
- ML - 高斯判别分析
- ML - 成本函数
- ML - 贝叶斯定理
- ML - 精度和召回率
- ML - 对抗性
- ML - 堆叠
- ML - 轮次
- ML - 感知器
- ML - 正则化
- ML - 过拟合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 数据泄露
- ML - 机器学习的货币化
- ML - 数据类型
- 机器学习 - 资源
- ML - 快速指南
- ML - 速查表
- ML - 面试题
- ML - 有用资源
- ML - 讨论
机器学习 - 提升模型性能
Boosting 是一种流行的集成学习技术,它结合多个弱学习器来创建一个强学习器。它的工作原理是迭代地训练弱学习器在数据的子集上,并为误分类的样本分配更高的权重,以增加它们在后续迭代中的重要性。这个过程会重复进行,直到达到所需的性能水平。
以下是一些提升机器学习中模型性能的技术:
特征工程 - 特征工程包括从现有特征创建新特征或转换现有特征以使其对模型更有信息量。这可能包括诸如独热编码、缩放、归一化和特征选择等技术。
超参数调整 - 超参数是在训练过程中未学习但由数据科学家设置的参数。它们控制模型的行为,调整它们可以显著影响模型性能。网格搜索和随机搜索是超参数调整的常用技术。
集成学习 - 集成学习包括组合多个模型以提高性能。诸如 Bagging、Boosting 和 Stacking 等技术可用于创建集成。随机森林是 Bagging 集成的示例,而梯度提升机 (GBM) 是 Boosting 集成的示例。
正则化 - 正则化是一种通过向损失函数添加惩罚项来防止过拟合的技术。L1 正则化 (Lasso) 和 L2 正则化 (Ridge) 是线性模型中常用的技术,而 dropout 是神经网络中使用的一种技术。
数据增强 - 数据增强包括通过应用旋转、缩放和翻转等变换从现有数据生成新数据。这有助于减少过拟合并提高模型性能。
模型架构 - 模型的架构会显著影响其性能。诸如深度学习和卷积神经网络 (CNN) 等技术可用于创建更复杂的模型,这些模型能够更好地学习数据中的复杂模式。
提前停止 - 提前停止是一种通过在模型性能停止在验证集上改进时停止训练过程来防止过拟合的技术。这可以防止模型继续学习数据中的噪声,并有助于提高泛化能力。
交叉验证 - 交叉验证是一种用于评估模型在数据的多个子集上的性能的技术。这有助于识别过拟合,并可用于选择模型的最佳超参数。
这些技术可以使用 scikit-learn、TensorFlow 和 Keras 等各种机器学习库在 Python 中实现。通过使用这些技术,数据科学家可以提高其模型的性能并创建更准确的预测。
以下示例演示了如何使用 Scikit-learn 实现交叉验证:
示例
from sklearn.datasets import load_iris from sklearn.model_selection import cross_val_score from sklearn.ensemble import GradientBoostingClassifier # Load the iris dataset iris = load_iris() X = iris.data y = iris.target # Create a Gradient Boosting Classifier gb_clf = GradientBoostingClassifier() # Perform 5-fold cross-validation on the classifier scores = cross_val_score(gb_clf, X, y, cv=5) # Print the average accuracy and standard deviation of the cross-validation scores print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
输出
执行此代码后,将产生以下输出:
Accuracy: 0.96 (+/- 0.07)
集成带来的性能提升
集成可以通过组合多个模型来提升机器学习结果。基本上,集成模型由多个单独训练的监督学习模型组成,并以各种方式合并其结果,以实现比单个模型更好的预测性能。集成方法可以分为以下两组:
顺序集成方法
顾名思义,在这种集成方法中,基学习器是顺序生成的。这种方法的动机是利用基学习器之间的依赖关系。
并行集成方法
顾名思义,在这种集成方法中,基学习器是并行生成的。这种方法的动机是利用基学习器之间的独立性。
集成学习方法
以下是最流行的集成学习方法,即组合来自不同模型的预测的方法:
Bagging
Bagging 也称为 Bootstrap Aggregating。在 Bagging 方法中,集成模型试图通过组合在随机生成的训练样本上训练的单个模型的预测来提高预测精度并降低模型方差。集成模型的最终预测将通过计算所有单个估计器的预测平均值来给出。Bagging 方法最好的例子之一是随机森林。
Boosting
在 Boosting 方法中,构建集成模型的主要原则是通过顺序训练每个基模型估计器来增量地构建它。顾名思义,它基本上结合了多个弱基学习器,这些学习器在训练数据的多次迭代中顺序训练,以构建强大的集成。在弱基学习器的训练过程中,会为之前被误分类的学习器分配更高的权重。Boosting 方法的示例是 AdaBoost。
投票
在这个集成学习模型中,构建多个不同类型的模型,并使用一些简单的统计数据(例如计算平均值或中位数等)来组合预测。此预测将作为训练的附加输入以进行最终预测。
Bagging 集成算法
以下是三种 Bagging 集成算法:
Bagged 决策树
众所周知,Bagging 集成方法适用于具有高方差的算法,而在这方面,最好的算法是决策树算法。在下面的 Python 示例中,我们将使用 sklearn 的 BaggingClassifier 函数和 DecisionTreeClassifier(一种分类和回归树算法)在 Pima 印第安人糖尿病数据集上构建 Bagged 决策树集成模型。
首先,导入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import BaggingClassifier from sklearn.tree import DecisionTreeClassifier
现在,我们需要像在前面的示例中那样加载 Pima 糖尿病数据集:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下来,输入 10 折交叉验证,如下所示:
seed = 7 kfold = KFold(n_splits=10, random_state=seed) cart = DecisionTreeClassifier()
我们需要提供我们将构建的树的数量。这里我们将构建 150 棵树:
num_trees = 150
接下来,使用以下脚本构建模型:
model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)
计算并打印结果,如下所示:
results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
输出
0.7733766233766234
上面的输出显示我们的 Bagged 决策树分类器模型的准确率约为 77%。
随机森林
它是Bagging决策树的扩展。对于单个分类器,训练数据集的样本是带放回地抽取的,但树的构建方式降低了它们之间的相关性。此外,在构建每棵树时,会考虑特征的随机子集来选择每个分割点,而不是贪婪地选择最佳分割点。
在下面的Python示例中,我们将使用sklearn的`RandomForestClassifier`类在Pima印第安人糖尿病数据集上构建Bagging随机森林集成模型。
首先,导入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import RandomForestClassifier
现在,我们需要像之前的例子一样加载Pima糖尿病数据集:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下来,输入 10 折交叉验证,如下所示:
seed = 7 kfold = KFold(n_splits=10, random_state=seed)
我们需要指定要构建的树的数量。这里我们将构建150棵树,分割点从5个特征中选择:
num_trees = 150 max_features = 5
接下来,使用以下脚本构建模型:
model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)
计算并打印结果,如下所示:
results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
输出
0.7629357484620642
上面的输出显示我们的Bagging随机森林分类器模型的准确率约为76%。
Extra Trees (极端随机树)
这是Bagging决策树集成方法的另一种扩展。在这种方法中,随机树是从训练数据集的样本构建的。
在下面的Python示例中,我们将使用sklearn的`ExtraTreesClassifier`类在Pima印第安人糖尿病数据集上构建Extra Trees集成模型。
首先,导入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import ExtraTreesClassifier
现在,我们需要像之前的例子一样加载Pima糖尿病数据集:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下来,输入 10 折交叉验证,如下所示:
seed = 7 kfold = KFold(n_splits=10, random_state=seed)
我们需要指定要构建的树的数量。这里我们将构建150棵树,分割点从5个特征中选择:
num_trees = 150 max_features = 5
接下来,使用以下脚本构建模型:
model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)
计算并打印结果,如下所示:
results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
输出
0.7551435406698566
上面的输出显示我们的Bagging Extra Trees分类器模型的准确率约为75.5%。
Boosting集成算法
以下是两种最常见的Boosting集成算法:
AdaBoost
它是最成功的Boosting集成算法之一。该算法的关键在于它赋予数据集实例权重的方式。因此,在构建后续模型时,算法需要较少关注这些实例。
在下面的Python示例中,我们将使用sklearn的`AdaBoostClassifier`类在Pima印第安人糖尿病数据集上构建用于分类的AdaBoost集成模型。
首先,导入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import AdaBoostClassifier
现在,我们需要像之前的例子一样加载Pima糖尿病数据集:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下来,输入 10 折交叉验证,如下所示:
seed = 5 kfold = KFold(n_splits=10, random_state=seed)
我们需要指定要构建的树的数量。这里我们将构建150棵树,分割点从5个特征中选择:
num_trees = 50
接下来,使用以下脚本构建模型:
model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)
计算并打印结果,如下所示:
results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
输出
0.7539473684210527
上面的输出显示我们的AdaBoost分类器集成模型的准确率约为75%。
随机梯度提升 (Stochastic Gradient Boosting)
它也称为梯度提升机 (Gradient Boosting Machines)。在下面的Python示例中,我们将使用sklearn的`GradientBoostingClassifier`类在Pima印第安人糖尿病数据集上构建用于分类的随机梯度提升集成模型。
首先,导入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.ensemble import GradientBoostingClassifier
现在,我们需要像之前的例子一样加载Pima糖尿病数据集:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下来,输入 10 折交叉验证,如下所示:
seed = 5 kfold = KFold(n_splits=10, random_state=seed)
我们需要指定要构建的树的数量。这里我们将构建150棵树,分割点从5个特征中选择:
num_trees = 50
接下来,使用以下脚本构建模型:
model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)
计算并打印结果,如下所示:
results = cross_val_score(model, X, Y, cv=kfold) print(results.mean())
输出
0.7746582365003418
上面的输出显示我们的梯度提升分类器集成模型的准确率约为77.5%。
投票集成算法
如前所述,投票法首先从训练数据集创建两个或多个独立模型,然后投票分类器将包装这些模型,并在需要新数据时取子模型预测结果的平均值。
在下面的Python示例中,我们将使用sklearn的`VotingClassifier`类在Pima印第安人糖尿病数据集上构建投票集成模型。我们将逻辑回归、决策树分类器和SVM的预测结果结合起来,用于解决分类问题,如下所示:
首先,导入所需的包,如下所示:
from pandas import read_csv from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score from sklearn.linear_model import LogisticRegression from sklearn.tree import DecisionTreeClassifier from sklearn.svm import SVC from sklearn.ensemble import VotingClassifier
现在,我们需要像之前的例子一样加载Pima糖尿病数据集:
path = r"C:\pima-indians-diabetes.csv" headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] data = read_csv(path, names=headernames) array = data.values X = array[:,0:8] Y = array[:,8]
接下来,输入 10 折交叉验证,如下所示:
kfold = KFold(n_splits=10, random_state=7)
接下来,我们需要创建子模型,如下所示:
estimators = [] model1 = LogisticRegression() estimators.append(('logistic', model1)) model2 = DecisionTreeClassifier() estimators.append(('cart', model2)) model3 = SVC() estimators.append(('svm', model3))
现在,通过组合上面创建的子模型的预测结果,创建投票集成模型。
ensemble = VotingClassifier(estimators) results = cross_val_score(ensemble, X, Y, cv=kfold) print(results.mean())
输出
0.7382262474367738
上面的输出显示我们的投票分类器集成模型的准确率约为74%。