k-折交叉验证,留一验证

交叉验证(Cross-validation)主要用于建模应用中,例如PCR 、PLS 回归建模中。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报 误差,记录它们的平方加和。这个过程一直进行,直到所有的样本都被预报了一次而且仅被预报一次。把每个样本的预报误差平方加和,称为PRESS(predicted Error Sum of Squares)。
用交叉验证的目的是为了得到可靠稳定的模型。在建立PCR 或PLS 模型时,一个很重要的因素是取多少个主成分的问题。用cross validation 校验每个主成分下的PRESS值,选择PRESS值小的主成分数。或PRESS值不再变小时的主成分数。 [1]
常用的精度测试方法主要是 交叉验证,例如10折交叉验证(10-fold   cross validation),将 数据集分成十份,轮流将其中9份做训练1份做测试,10次的结果的均值作为对 算法精度的估计,一般还需要进行多次10折交叉验证求均值,例如: 10次10折交叉验证,以求更精确一点。
交叉验证有时也称为 交叉比对,如:10折交叉比对

Holdout 验证

常识来说,Holdout 验证并非一种交叉验证,因为数据并没有交叉使用。 随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。 一般来说,少于原本样本三分之一的数据被选做验证数据。

K-fold cross-validation

K折交叉验证,初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个 子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10折交叉验证是最常用的。

留一验证

正如名称所建议, 留一验证( LOOCV)意指只使用原本样本中的一项来当做验证资料, 而剩余的则留下来当做训练资料。 这个步骤一直持续到每个样本都被当做一次验证资料。 事实上,这等同于   K-fold 交叉验证是一样的,其中 K为原本样本个数。 在某些情况下是存在有效率的演算法,如使用kernel regression 和Tikhonov regularization。
### 使用鸢尾花数据集实现K-交叉验证 在机器学习中,K-交叉验证种评估模型性能的常用方法。它通过将数据集划分为K个子集(或称为“”),每次用其中的个子集作为验证集,其余K-1个子集作为训练集,从而进行多次训练验证[^1]。以下是使用Python中的`scikit-learn`库,在鸢尾花数据集上实现K-交叉验证的具体方法。 #### 数据准备 首先加载鸢尾花数据集,并将其特征矩阵`X`目标向量`y`分离出来。 ```python from sklearn.datasets import load_iris # 加载鸢尾花数据集 data = load_iris() X = data.data # 特征矩阵 y = data.target # 目标向量 ``` #### 定义模型 选择个机器学习模型进行训练验证。以下以K近邻(KNN)算法为例。 ```python from sklearn.neighbors import KNeighborsClassifier # 定义KNN模型 knn = KNeighborsClassifier(n_neighbors=5, weights="distance") ``` #### 设置K-交叉验证 使用`KFold`类定义K-交叉验证的参数,例如数、是否打乱数据等。 ```python from sklearn.model_selection import KFold # 定义5交叉验证 kf = KFold(n_splits=5, shuffle=True, random_state=0) ``` #### 执行交叉验证 使用`cross_val_score`函数执行K-交叉验证,并计算模型的平均得分。 ```python from sklearn.model_selection import cross_val_score # 执行5交叉验证 scores = cross_val_score(knn, X, y, cv=kf) # 输出每的得分 print("每交叉验证得分: ", scores) # 输出平均得分 print("平均得分: ", scores.mean()) ``` #### 示例输出 运行上述代码后,程序将输出每交叉验证得分以及所有的平均得分。例如: ``` 每交叉验证得分: [0.96666667 1. 1. 0.93333333 1. ] 平均得分: 0.98 ``` #### 参数优化(可选) 如果需要进步优化模型参数,可以结合`GridSearchCV`进行网格搜索。以下是个简单的示例: ```python from sklearn.model_selection import GridSearchCV # 定义参数网格 param_grid = {'n_neighbors': [3, 5, 7, 9], 'weights': ['uniform', 'distance']} # 定义GridSearchCV grid_search = GridSearchCV(KNeighborsClassifier(), param_grid, cv=5) # 执行网格搜索 grid_search.fit(X, y) # 输出最佳参数最佳得分 print("最佳参数: ", grid_search.best_params_) print("最佳得分: ", grid_search.best_score_) ``` ### 注意事项 - 在分类问题中,建议使用分层K-交叉验证(Stratified K-Fold),以确保每个中的类别分布与整体数据集致[^2]。 - 对于二分类任务,可以使用更多评价指标(如精确率、召回率、F1-score等)来全面评估模型性能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值