- 机器学习基础
- 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 - 分类算法
- ML - 逻辑回归
- ML - K近邻算法 (KNN)
- ML - 朴素贝叶斯算法
- 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 - 利用与探索
- 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 - 讨论
机器学习 - 交叉验证
交叉验证是一种强大的技术,用于在机器学习中估计模型在未见数据上的性能。它是构建稳健机器学习模型的重要步骤,因为它有助于识别过拟合或欠拟合,并有助于确定最佳模型超参数。
什么是交叉验证?
交叉验证是一种用于评估模型性能的技术,它通过将数据集划分为子集,在数据的一部分上训练模型,然后在剩余的数据上验证模型来实现。交叉验证的基本思想是使用数据的一个子集来训练模型,并使用另一个子集来测试其性能。这使得机器学习模型能够在各种数据上进行训练,并更好地泛化到新数据。
有不同的交叉验证技术可用,但最常用的技术是k折交叉验证。在k折交叉验证中,数据被划分为k个大小相等的部分。然后在k-1个部分上训练模型,并在剩余的部分上进行测试。此过程重复k次,每次使用k个部分中的一个作为验证数据。然后对k次迭代的模型最终性能取平均值,以获得模型性能的估计值。
为什么交叉验证很重要?
交叉验证是机器学习中必不可少的一项技术,因为它有助于防止模型过拟合或欠拟合。过拟合发生在模型过于复杂并且过分拟合训练数据时,导致在新数据上的性能下降。另一方面,欠拟合发生在模型过于简单并且无法捕捉数据中的潜在模式时,导致训练数据和测试数据上的性能下降。
交叉验证还有助于确定最佳模型超参数。超参数是控制模型行为的设置。例如,在决策树算法中,树的最大深度是一个超参数,它决定了模型的复杂程度。通过使用交叉验证来评估模型在不同超参数值下的性能,我们可以选择最大化模型性能的最佳超参数。
在Python中实现交叉验证
在本节中,我们将讨论如何使用Scikit-learn库在Python中实现k折交叉验证。Scikit-learn是一个流行的Python机器学习库,它提供了一系列用于数据预处理、模型选择和评估的算法和工具。
为了演示如何在Python中实现交叉验证,我们将使用著名的鸢尾花数据集。鸢尾花数据集包含三种不同鸢尾花物种的花萼长度、花萼宽度、花瓣长度和花瓣宽度的测量值。目标是构建一个模型,可以根据其测量值预测鸢尾花物种。
首先,我们需要使用Scikit-learn的load_iris()函数加载数据集,并使用train_test_split()函数将其拆分为训练集和测试集。训练集将用于训练模型,测试集将用于评估模型的性能。
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # Load the Iris dataset iris = load_iris() # Split the data into a training set and a test set X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
接下来,我们将使用Scikit-learn的DecisionTreeClassifier()函数创建一个决策树分类器。
from sklearn.tree import DecisionTree
创建一个决策树分类器。
clf = DecisionTreeClassifier(random_state=42)
现在,我们可以使用k折交叉验证来评估模型的性能。我们将使用Scikit-learn的cross_val_score()函数执行k折交叉验证。该函数将模型、训练数据、目标变量和折叠数作为输入。它返回一个分数数组,每个折叠一个。
from sklearn.model_selection import cross_val_score # Perform k-fold cross-validation scores = cross_val_score(clf, X_train, y_train, cv=5)
在这里,我们指定折叠数为5,这意味着数据将被划分为5个大小相等的部分。cross_val_score()函数将在4个部分上训练模型,并在剩余的部分上进行测试。此过程将重复5次,每次使用一个部分作为验证数据。该函数返回一个分数数组,每个折叠一个。
最后,我们可以计算分数的均值和标准差,以获得模型性能的估计值。
import numpy as np # Calculate the mean and standard deviation of the scores mean_score = np.mean(scores) std_score = np.std(scores) print("Mean cross-validation score: {:.2f}".format(mean_score)) print("Standard deviation of cross-validation score: {:.2f}".format(std_score))
此代码的输出将是分数的均值和标准差。平均分数表示模型在所有折叠上的平均性能,而标准差表示分数的可变性。
示例
以下是Python中交叉验证的完整实现:
from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier from sklearn.model_selection import cross_val_score import numpy as np # Load the iris dataset iris = load_iris() # Define the features and target variables X = iris.data y = iris.target # Create a decision tree classifier clf = DecisionTreeClassifier(random_state=42) # Perform k-fold cross-validation scores = cross_val_score(clf, X, y, cv=5) # Calculate the mean and standard deviation of the scores mean_score = np.mean(scores) std_score = np.std(scores) print("Mean cross-validation score: {:.2f}".format(mean_score)) print("Standard deviation of cross-validation score: {:.2f}".format(std_score))
输出
执行此代码时,将产生以下输出:
Mean cross-validation score: 0.95 Standard deviation of cross-validation score: 0.03