sklearn的k折交叉验证的详细过程(数据和模型的角度)

sklearn的k折交叉验证的详细过程(数据和模型的角度)

前提
一般博客大家都是介绍K折在数据上的拆分,再加一个sklearn代码的demo,就没了。
这样对于我来说,这两年就一直停留在这个阶段,知道他甚至感觉熟悉他,就是吃不透他。
直到今天,我才想到去看sklearn的交叉验证源码,sklearn的流程一般是公认的。
大概知道这个流程,但是由于缺乏看见权威资料什么的一直没敢确定。
所以这个卡了2年就很是无语。

分析的逻辑:
sklearn有现成的k折交叉验证代码,只要看懂了sklearn的流程,体会了它的思路,那么在神经网络上也是一样应用的。

分析:

  1. 完整的交叉验证评估demo
from sklearn import datasets
from sklearn import svm
from sklearn.model_selection import cross_val_score,cross_validate


iris = datasets.load_iris()

clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, iris.data, iris.target, cv=5)
print(scores)
cross_validate()
  1. 进入cross_val_score(),第515-527行调用函数cv_results = cross_validate()
  2. 进入cross_validate(),第266-283行:
        results = parallel(
        delayed(_fit_and_score)(
            clone(estimator),
            X,
            y,
            scorers,
            train,
            test,
            verbose,
            None,
            fit_params,
            return_train_score=return_train_score,
            return_times=True,
            return_estimator=return_estimator,
            error_score=error_score,
        )
        for train, test in cv.split(X, y, groups)
    )
    
  3. clone(estimator)表明,每次输入的estimator都是重新初始化的,不是接着上一轮(上一个cv)中训练的。
  4. _fit_and_score()训练和评估,这里好像只能用一个评价指标,没深究。

总结:
sklearn的五折交叉:
1. 数据上,分成5份,4份做训练集,1份做测试集,迭代5次,相当于构建了5个用于训练和测试的数据集
2. 模型上,每轮训练(每个cv)之前都要把模型初始化。
3. 总体而言,相当于,使用5个初始化一样的模型,在5个数据集(五折划分构建来的)上训练并测试。

one more thing:
参数寻优GridSearchCV()结合了参数寻优和交叉验证,这个的详细过程如何?

由于以前看过这部分的代码,初步判定是:对每组参数集做k折交叉验证,再依据评估指标(如每折测试集评估指标的平均值和指定比较哪个指标)选出最佳参数集。

你可能感兴趣的:(ML,and,DL,#,ML原理及应用,sklearn,K折交叉详细过程,模型的操作处理,cross_val_score,cross_validate)