当前位置: 首页 > news >正文

网站收录了被人为删了怎么办vue做前台网站

网站收录了被人为删了怎么办,vue做前台网站,安阳网站设计公司,给网站加织梦后台文章目录 sklearn学习(26) 模型选择与评估-交叉验证#xff1a;评估估算器的表现26.1 计算交叉验证的指标26.1.1 cross_validate 函数和多度量评估26.1.2 通过交叉验证获取预测 26.2 交叉验证迭代器26.2.1 交叉验证迭代器–循环遍历数据26.2.1.1 K 折26.2.1.2 重复 K-折交叉验… 文章目录 sklearn学习(26) 模型选择与评估-交叉验证评估估算器的表现26.1 计算交叉验证的指标26.1.1 cross_validate 函数和多度量评估26.1.2 通过交叉验证获取预测 26.2 交叉验证迭代器26.2.1 交叉验证迭代器–循环遍历数据26.2.1.1 K 折26.2.1.2 重复 K-折交叉验证26.2.1.3 留一交叉验证 (LOO)26.2.1.4 留 P 交叉验证 (LPO)26.2.1.5 随机排列交叉验证 a.k.a. Shuffle Split 26.2.2 基于类标签、具有分层的交叉验证迭代器26.2.2.1 分层 k 折 26.2.2.2 分层随机 Split26.2.3 用于分组数据的交叉验证迭代器26.2.3.1 组 k-fold26.2.3.2 留一组交叉验证26.2.3.3 留 P 组交叉验证26.2.3.4 Group Shuffle Split 26.2.4 预定义的折叠 / 验证集26.2.5 交叉验证在时间序列数据中应用26.2.5.1 时间序列分割 26.3 A note on shuffling26.4 交叉验证和模型选择 sklearn学习(26) 模型选择与评估-交叉验证评估估算器的表现 文章参考网站 https://sklearn.apachecn.org/ 和 https://scikit-learn.org/stable/ 学习预测函数的参数并在相同数据集上进行测试是一种错误的做法: 一个仅给出测试用例标签的模型将会获得极高的分数但对于尚未出现过的数据它则无法预测出任何有用的信息。 这种情况称为 overfitting过拟合. 为了避免这种情况在进行监督机器学习实验时通常取出部分可利用数据作为 test set测试数据集 X_test, y_test。需要强调的是这里说的 “experiment(实验)” 并不仅限于学术academic因为即使是在商业场景下机器学习也往往是从实验开始的。下面是模型训练中典型的交叉验证工作流流程图。通过网格搜索可以确定最佳参数。 利用 scikit-learn 包中的 train_test_split 辅助函数可以很快地将实验数据集划分为任何训练集training sets和测试集test sets。 下面让我们载入 iris 数据集并在此数据集上训练出线性支持向量机: import numpy as npfrom sklearn.model_selection import train_test_splitfrom sklearn import datasetsfrom sklearn import svm iris datasets.load_iris()iris.data.shape, iris.target.shape ((150, 4), (150,))我们能快速采样到原数据集的 40% 作为测试集从而测试评估我们的分类器: X_train, X_test, y_train, y_test train_test_split( ... iris.data, iris.target, test_size0.4, random_state0) X_train.shape, y_train.shape ((90, 4), (90,))X_test.shape, y_test.shape ((60, 4), (60,)) clf svm.SVC(kernellinear, C1).fit(X_train, y_train)clf.score(X_test, y_test) 0.96...当评价估计器的不同设置”hyperparameters(超参数)”时例如手动为 SVM 设置的 C 参数 由于在训练集上通过调整参数设置使估计器的性能达到了最佳状态但 在测试集上 可能会出现过拟合的情况。 此时测试集上的信息反馈足以颠覆训练好的模型评估的指标不再有效反映出模型的泛化性能。 为了解决此类问题还应该准备另一部分被称为 “validation set(验证集)” 的数据集模型训练完成以后在验证集上对模型进行评估。 当验证集上的评估实验比较成功时在测试集上进行最后的评估。 然而通过将原始数据分为3个数据集合我们就大大减少了可用于模型学习的样本数量 并且得到的结果依赖于集合对训练验证的随机选择。 这个问题可以通过 交叉验证CV 来解决。 交叉验证仍需要测试集做最后的模型评估但不再需要验证集。 最基本的方法被称之为k-折交叉验证 。 k-折交叉验证将训练集划分为 k 个较小的集合其他方法会在下面描述主要原则基本相同。 每一个 k 折都会遵循下面的过程 将 k − 1 k-1 k−1 份训练集子集作为 training data 训练集)训练模型将剩余的 1 份训练集子集用于模型验证也就是把它当做一个测试集来计算模型的性能指标例如准确率。 k-折交叉验证得出的性能指标是循环计算中每个值的平均值。 该方法虽然计算代价很高但是它不会浪费太多的数据如固定任意测试集的情况一样 在处理样本数据集较少的问题例如逆向推理时比较有优势。 26.1 计算交叉验证的指标 使用交叉验证最简单的方法是在估计器和数据集上调用 cross_val_score 辅助函数。 下面的示例展示了如何通过分割数据拟合模型和计算连续 5 次的分数每次不同分割来估计 linear kernel 支持向量机在 iris 数据集上的精度: from sklearn.model_selection import cross_val_scoreclf svm.SVC(kernellinear, C1)scores cross_val_score(clf, iris.data, iris.target, cv5)scores array([0.96..., 1. ..., 0.96..., 0.96..., 1. ])评分估计的平均得分和 95% 置信区间由此给出: print(Accuracy: %0.2f (/- %0.2f) % (scores.mean(), scores.std() * 2)) Accuracy: 0.98 (/- 0.03)默认情况下每个 CV 迭代计算的分数是估计器的 score 方法。可以通过使用 scoring 参数来改变计算方式如下: from sklearn import metricsscores cross_val_score( ... clf, iris.data, iris.target, cv5, scoringf1_macro)scores array([0.96..., 1. ..., 0.96..., 0.96..., 1. ])详情请参阅 scoring 参数: 定义模型评估规则 。 在 Iris 数据集的情形下样本在各个目标类别之间是平衡的因此准确度和 F1-score 几乎相等。 当 cv 参数是一个整数时 cross_val_score 默认使用 KFold 或 StratifiedKFold 策略后者会在估计器派生自 ClassifierMixin 时使用。 也可以通过传入一个交叉验证迭代器来使用其他交叉验证策略比如: from sklearn.model_selection import ShuffleSplitn_samples iris.data.shape[0]cv ShuffleSplit(n_splits5, test_size0.3, random_state0)cross_val_score(clf, iris.data, iris.target, cvcv) array([0.977..., 0.977..., 1. ..., 0.955..., 1. ])另外一种可选方案是使用一个可迭代生成器作为索引数组产生(train, test) 划分比如: def custom_cv_2folds(X): ... n X.shape[0] ... i 1 ... while i 2: ... idx np.arange(n * (i - 1) / 2, n * i / 2, dtypeint) ... yield idx, idx ... i 1 ...custom_cv custom_cv_2folds(iris.data)cross_val_score(clf, iris.data, iris.target, cvcustom_cv) array([1. , 0.973...])保留数据的数据转换 正如在训练集中保留的数据上测试一个 predictor 预测器是很重要的一样预处理如标准化特征选择等和类似的 data transformations 也应该从训练集中学习并应用于预测数据以进行预测: from sklearn import preprocessingX_train, X_test, y_train, y_test train_test_split( ... iris.data, iris.target, test_size0.4, random_state0)scaler preprocessing.StandardScaler().fit(X_train)X_train_transformed scaler.transform(X_train)clf svm.SVC(C1).fit(X_train_transformed, y_train)X_test_transformed scaler.transform(X_test)clf.score(X_test_transformed, y_test) 0.9333...Pipeline 可以更容易地组合估计器在交叉验证下使用如下: from sklearn.pipeline import make_pipelineclf make_pipeline(preprocessing.StandardScaler(), svm.SVC(C1))cross_val_score(clf, iris.data, iris.target, cvcv) ... array([ 0.97..., 0.93..., 0.95...])可以参阅 Pipeline管道和 FeatureUnion特征联合: 合并的评估器. 26.1.1 cross_validate 函数和多度量评估 cross_validate 函数与 cross_val_score 在下面的两个方面有些不同 - 它允许指定多个指标进行评估.除了测试得分之外它还会返回一个包含训练得分拟合次数 score-times 得分次数的一个字典。 It returns a dict containing training scores, fit-times and score-times in addition to the test score. 对于单个度量评估其中 scoring 参数是一个字符串可以调用或 None keys 将是 - [test_score, fit_time, score_time] 而对于多度量评估返回值是一个带有以下的 keys 的字典 - [test_scorer1_name, test_scorer2_name, test_scorer..., fit_time, score_time] return_train_score 默认设置为 True 。 它增加了所有 scorers(得分器) 的训练得分 keys 。如果不需要训练 scores 则应将其明确设置为 False 。 你还可以通过设置return_estimatorTrue来保留在所有训练集上拟合好的估计器。 可以将多个测度指标指定为listtuple或者是预定义评分器(predefined scorer)的名字的集合 from sklearn.model_selection import cross_validatefrom sklearn.metrics import recall_scorescoring [precision_macro, recall_macro]clf svm.SVC(kernellinear, C1, random_state0)scores cross_validate(clf, iris.data, iris.target, scoringscoring, ... cv5)sorted(scores.keys()) [fit_time, score_time, test_precision_macro, test_recall_macro]scores[test_recall_macro] array([0.96..., 1. ..., 0.96..., 0.96..., 1. ])或作为一个字典 mapping 得分器名称预定义或自定义的得分函数: from sklearn.metrics.scorer import make_scorerscoring {prec_macro: precision_macro, ... rec_macro: make_scorer(recall_score, averagemacro)}scores cross_validate(clf, iris.data, iris.target, scoringscoring, ... cv5, return_train_scoreTrue)sorted(scores.keys()) [fit_time, score_time, test_prec_macro, test_rec_macro,train_prec_macro, train_rec_macro]scores[train_rec_macro] array([0.97..., 0.97..., 0.99..., 0.98..., 0.98...])这里是一个使用单一指标的 cross_validate 的示例: scores cross_validate(clf, iris.data, iris.target, ... scoringprecision_macro, cv5, ... return_estimatorTrue)sorted(scores.keys()) [estimator, fit_time, score_time, test_score]26.1.2 通过交叉验证获取预测 除了返回结果不同函数 cross_val_predict 具有和 cross_val_score 相同的接口 对于每一个输入的元素如果其在测试集合中将会得到预测结果。交叉验证策略会将可用的元素提交到测试集合有且仅有一次否则会抛出一个异常。 警告 :交叉预测可能使用不当 cross_val_predict函数的结果可能会与cross_val_score函数的结果不一样因为在这两种方法中元素的分组方式不一样。函数cross_val_score在所有交叉验证的折子上取平均。但是函数cross_val_predict只是简单的返回由若干不同模型预测出的标签或概率。因此,cross_val_predict不是一种适当的泛化错误的度量。 函数cross_val_predict比较适合做下列事儿: 从不同模型获得的预测结果的可视化。模型混合: 在集成方法中当一个有监督估计量的预测被用来训练另一个估计量时 可用的交叉验证迭代器在下面的章节将提到。 示例 Receiver Operating Characteristic (ROC) with cross validation,Recursive feature elimination with cross-validation,Parameter estimation using grid search with cross-validation,Sample pipeline for text feature extraction and evaluation,绘制交叉验证预测图,Nested versus non-nested cross-validation. 26.2 交叉验证迭代器 接下来的部分列出了一些用于生成索引标号用于在不同的交叉验证策略中生成数据划分的工具。 26.2.1 交叉验证迭代器–循环遍历数据 假设一些数据是独立的和相同分布的 (i.i.d) 假定所有的样本来源于相同的生成过程并假设生成过程没有记忆过去生成的样本。 在这种情况下可以使用下面的交叉验证器。 注意 尽管 i.i.d 数据是机器学习理论中的一个常见假设但在实践中很少成立。如果知道样本是使用时间相关的过程生成的则使用 time-series aware cross-validation scheme 更安全。 同样如果我们知道生成过程具有 group structure 群体结构从不同 subjects主体 experiments实验 measurement devices 测量设备收集的样本则使用 group-wise cross-validation 更安全。 26.2.1.1 K 折 KFold 将所有的样例划分为 k k k 个组称为折叠 (fold) 如果 k n kn kn 这等价于 Leave One Out留一 策略都具有相同的大小如果可能。预测函数学习时使用 k − 1 k-1 k−1 个折叠中的数据最后一个剩下的折叠会用于测试。 在 4 个样例的数据集上使用 2-fold 交叉验证的示例: import numpy as npfrom sklearn.model_selection import KFold X [a, b, c, d]kf KFold(n_splits2)for train, test in kf.split(X): ... print(%s %s % (train, test)) [2 3] [0 1] [0 1] [2 3]这个示例是关于交叉验证的可视化的。请注意KFold不被分类所影响 每个折叠由两个 arrays 组成第一个作为 training set 另一个作为 test set 。 由此可以通过使用 numpy 的索引创建训练/测试集合: X np.array([[0., 0.], [1., 1.], [-1., -1.], [2., 2.]])y np.array([0, 1, 0, 1])X_train, X_test, y_train, y_test X[train], X[test], y[train], y[test]26.2.1.2 重复 K-折交叉验证 RepeatedKFold 重复 K-Fold n 次。当需要运行时可以使用它 KFold n 次在每次重复中产生不同的分割。 2折 K-Fold 重复 2 次的示例: import numpy as npfrom sklearn.model_selection import RepeatedKFoldX np.array([[1, 2], [3, 4], [1, 2], [3, 4]])random_state 12883823rkf RepeatedKFold(n_splits2, n_repeats2, random_staterandom_state)for train, test in rkf.split(X): ... print(%s %s % (train, test)) ... [2 3] [0 1] [0 1] [2 3] [0 2] [1 3] [1 3] [0 2]类似地 RepeatedStratifiedKFold 在每个重复中以不同的随机化重复 n 次分层的 K-Fold 。 26.2.1.3 留一交叉验证 (LOO) LeaveOneOut (或 LOO) 是一个简单的交叉验证。每个学习集都是通过除了一个样本以外的所有样本创建的测试集是被留下的样本。 因此对于 n n n 个样本我们有 n n n 个不同的训练集和 n n n 个不同的测试集。这种交叉验证程序不会浪费太多数据因为只有一个样本是从训练集中删除掉的: from sklearn.model_selection import LeaveOneOut X [1, 2, 3, 4]loo LeaveOneOut()for train, test in loo.split(X): ... print(%s %s % (train, test)) [1 2 3] [0] [0 2 3] [1] [0 1 3] [2] [0 1 2] [3]LOO 潜在的用户选择模型应该权衡一些已知的警告。 当与 k k k 折交叉验证进行比较时可以从 n n n 样本中构建 n n n 模型而不是 k k k 模型其中 n k nk nk 。 此外每个在 n − 1 n-1 n−1 个样本而不是在 ( k − 1 ) n / k (k-1)n/k (k−1)n/k 上进行训练。在两种方式中假设 k k k 不是太大并且 k n kn kn LOO 比 k k k 折交叉验证计算开销更加昂贵。 就精度而言 LOO 经常导致较高的方差作为测试误差的估计器。直观地说因为 n n n 个样本中的 n − 1 n-1 n−1 被用来构建每个模型折叠构建的模型实际上是相同的并且是从整个训练集建立的模型。 但是如果学习曲线对于所讨论的训练大小是陡峭的那么 5- 或 10- 折交叉验证可以泛化误差增高。 作为一般规则大多数作者和经验证据表明 5- 或者 10- 交叉验证应该优于 LOO 。 参考资料: http://www.faqs.org/faqs/ai-faq/neural-nets/part3/section-12.html;T. Hastie, R. Tibshirani, J. Friedman, The Elements of Statistical Learning, Springer 2009L. Breiman, P. Spector Submodel selection and evaluation in regression: The X-random case, International Statistical Review 1992;R. Kohavi, A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model Selection, Intl. Jnt. Conf. AIR. Bharat Rao, G. Fung, R. Rosales, On the Dangers of Cross-Validation. An Experimental Evaluation, SIAM 2008;G. James, D. Witten, T. Hastie, R Tibshirani, An Introduction to Statistical Learning, Springer 2013. 26.2.1.4 留 P 交叉验证 (LPO) LeavePOut 与 LeaveOneOut 非常相似因为它通过从整个集合中删除 p p p 个样本来创建所有可能的 训练/测试集。对于 n n n 个样本这产生了 ( n p ) {n \choose p} (pn​) 个 训练-测试 对。与 LeaveOneOut 和 KFold 不同当 p 1 p1 p1 时测试集会重叠。 在有 4 个样例的数据集上使用 Leave-2-Out 的示例: from sklearn.model_selection import LeavePOut X np.ones(4)lpo LeavePOut(p2)for train, test in lpo.split(X): ... print(%s %s % (train, test)) [2 3] [0 1] [1 3] [0 2] [1 2] [0 3] [0 3] [1 2] [0 2] [1 3] [0 1] [2 3]26.2.1.5 随机排列交叉验证 a.k.a. Shuffle Split ShuffleSplit ShuffleSplit 迭代器 将会生成一个用户给定数量的独立的训练/测试数据划分。样例首先被打散然后划分为一对训练测试集合。 可以通过设定明确的 random_state 使得伪随机生成器的结果可以重复。 这是一个使用的小示例: from sklearn.model_selection import ShuffleSplitX np.arange(5)ss ShuffleSplit(n_splits3, test_size0.25, ... random_state0)for train_index, test_index in ss.split(X): ... print(%s %s % (train_index, test_index)) ... [1 3 4] [2 0] [1 4 3] [0 2] [4 0 2] [1 3]下面是交叉验证行为的可视化。注意ShuffleSplit不受分类的影响。 ShuffleSplit 可以替代 KFold 交叉验证因为其提供了细致的训练 / 测试划分的 数量和样例所占的比例等的控制。 26.2.2 基于类标签、具有分层的交叉验证迭代器 一些分类问题在目标类别的分布上可能表现出很大的不平衡性例如可能会出现比正样本多数倍的负样本。在这种情况下建议采用如 StratifiedKFold 和 StratifiedShuffleSplit 中实现的分层抽样方法确保相对的类别频率在每个训练和验证 折叠 中大致保留。 26.2.2.1 分层 k 折 StratifiedKFold 是 k-fold 的变种会返回 stratified分层 的折叠每个小集合中 各个类别的样例比例大致和完整数据集中相同。 在有 10 个样例的有两个略不均衡类别的数据集上进行分层 3-fold 交叉验证的示例: from sklearn.model_selection import StratifiedKFold X np.ones(10)y [0, 0, 0, 0, 1, 1, 1, 1, 1, 1]skf StratifiedKFold(n_splits3)for train, test in skf.split(X, y): ... print(%s %s % (train, test)) [2 3 6 7 8 9] [0 1 4 5] [0 1 3 4 5 8 9] [2 6 7] [0 1 2 4 5 6 7] [3 8 9]下面是该交叉验证方法的可视化。 RepeatedStratifiedKFold 可用于在每次重复中用不同的随机化重复分层 K-Fold n 次。 26.2.2.2 分层随机 Split 下面是该交叉验证方法的可视化。 StratifiedShuffleSplit 是 ShuffleSplit 的一个变种会返回直接的划分比如 创建一个划分但是划分中每个类的比例和完整数据集中的相同。 26.2.3 用于分组数据的交叉验证迭代器 如果潜在的生成过程产生依赖样本的 groups 那么 i.i.d. 假设将会被打破。 这样的数据分组是特定于域的。一个示例是从多个患者收集医学数据从每个患者身上采集多个样本。而这样的数据很可能取决于个人群体。 在我们的示例中每个样本的患者 ID 将是其 group identifier 组标识符。 在这种情况下我们想知道在一组特定的 groups 上训练的模型是否能很好地适用于看不见的 group 。为了衡量这一点我们需要确保验证对象中的所有样本来自配对训练折叠中完全没有表示的组。 下面的交叉验证分离器可以用来做到这一点。 样本的 grouping identifier 分组标识符 通过 groups 参数指定。 26.2.3.1 组 k-fold GroupKFold 是 k-fold 的变体它确保同一个 group 在测试和训练集中都不被表示。 例如如果数据是从不同的 subjects 获得的每个 subject 有多个样本并且如果模型足够灵活以高度人物指定的特征中学习则可能无法推广到新的 subject 。 GroupKFold 可以检测到这种过拟合的情况。 Imagine you have three subjects, each with an associated number from 1 to 3: from sklearn.model_selection import GroupKFold X [0.1, 0.2, 2.2, 2.4, 2.3, 4.55, 5.8, 8.8, 9, 10]y [a, b, b, b, c, c, c, d, d, d]groups [1, 1, 1, 2, 2, 2, 3, 3, 3, 3] gkf GroupKFold(n_splits3)for train, test in gkf.split(X, y, groupsgroups): ... print(%s %s % (train, test)) [0 1 2 3 4 5] [6 7 8 9] [0 1 2 6 7 8 9] [3 4 5] [3 4 5 6 7 8 9] [0 1 2]每个 subject 都处于不同的测试阶段同一个科目从来没有在测试和训练过程中。请注意由于数据不平衡折叠的大小并不完全相同。 下面是该交叉验证方法的可视化。 26.2.3.2 留一组交叉验证 LeaveOneGroupOut 是一个交叉验证方案它根据第三方提供的 array of integer groups 整数组的数组来提供样本。这个组信息可以用来编码任意域特定的预定义交叉验证折叠。 每个训练集都是由除特定组别以外的所有样本构成的。 例如在多个实验的情况下 LeaveOneGroupOut 可以用来根据不同的实验创建一个交叉验证我们使用除去一个实验的所有实验的样本创建一个训练集: from sklearn.model_selection import LeaveOneGroupOut X [1, 5, 10, 50, 60, 70, 80]y [0, 1, 1, 2, 2, 2, 2]groups [1, 1, 2, 2, 3, 3, 3]logo LeaveOneGroupOut()for train, test in logo.split(X, y, groupsgroups): ... print(%s %s % (train, test)) [2 3 4 5 6] [0 1] [0 1 4 5 6] [2 3] [0 1 2 3] [4 5 6]另一个常见的应用是使用时间信息例如组可以是收集样本的年份从而允许与基于时间的分割进行交叉验证。 26.2.3.3 留 P 组交叉验证 LeavePGroupsOut 类似于 LeaveOneGroupOut 但为每个训练/测试集删除与 P P P 组有关的样本。 Leave-2-Group Out 的示例: from sklearn.model_selection import LeavePGroupsOut X np.arange(6)y [1, 1, 1, 2, 2, 2]groups [1, 1, 2, 2, 3, 3]lpgo LeavePGroupsOut(n_groups2)for train, test in lpgo.split(X, y, groupsgroups): ... print(%s %s % (train, test)) [4 5] [0 1 2 3] [2 3] [0 1 4 5] [0 1] [2 3 4 5]26.2.3.4 Group Shuffle Split GroupShuffleSplit 迭代器是 ShuffleSplit 和 LeavePGroupsOut 的组合它生成一个随机划分分区的序列其中为每个分组提供了一个组子集。 这是使用的示例: from sklearn.model_selection import GroupShuffleSplit X [0.1, 0.2, 2.2, 2.4, 2.3, 4.55, 5.8, 0.001]y [a, b, b, b, c, c, c, a]groups [1, 1, 2, 2, 3, 3, 4, 4]gss GroupShuffleSplit(n_splits4, test_size0.5, random_state0)for train, test in gss.split(X, y, groupsgroups): ... print(%s %s % (train, test)) ... [0 1 2 3] [4 5 6 7] [2 3 6 7] [0 1 4 5] [2 3 4 5] [0 1 6 7] [4 5 6 7] [0 1 2 3]下面是该交叉验证方法的可视化。 当需要 LeavePGroupsOut 的操作时这个类的信息是很有必要的但是 组 的数目足够大以至于用 P P P 组生成所有可能的分区将会花费很大的代价。在这种情况下 GroupShuffleSplit 通过 LeavePGroupsOut 提供了一个随机可重复)的训练 / 测试划分采样。 26.2.4 预定义的折叠 / 验证集 对一些数据集一个预定义的将数据划分为训练和验证集合或者划分为几个交叉验证集合的划分已经存在。 可以使用 PredefinedSplit 来使用这些集合来搜索超参数。 比如当使用验证集合时设置所有验证集合中的样例的 test_fold 为 0而将其他样例设置为 -1 。 26.2.5 交叉验证在时间序列数据中应用 时间序列数据的特点是时间 (autocorrelation(自相关性)) 附近的观测之间的相关性。 然而传统的交叉验证技术例如 KFold 和 ShuffleSplit 假设样本是独立的且分布相同的并且在时间序列数据上会导致训练和测试实例之间不合理的相关性产生广义误差的估计较差。 因此对 “future(未来)” 观测的时间序列数据模型的评估至少与用于训练模型的观测模型非常重要。为了达到这个目的一个解决方案是由 TimeSeriesSplit 提供的。 26.2.5.1 时间序列分割 TimeSeriesSplit 是 k-fold 的一个变体它首先返回 k k k 折作为训练数据集并且 ( k 1 ) (k1) (k1) 折作为测试数据集。 请注意与标准的交叉验证方法不同连续的训练集是超越前者的超集。 另外它将所有的剩余数据添加到第一个训练分区它总是用来训练模型。 这个类可以用来交叉验证以固定时间间隔观察到的时间序列数据样本。 对具有 6 个样本的数据集进行 3-split 时间序列交叉验证的示例: from sklearn.model_selection import TimeSeriesSplit X np.array([[1, 2], [3, 4], [1, 2], [3, 4], [1, 2], [3, 4]])y np.array([1, 2, 3, 4, 5, 6])tscv TimeSeriesSplit(n_splits3)print(tscv) TimeSeriesSplit(max_train_sizeNone, n_splits3)for train, test in tscv.split(X): ... print(%s %s % (train, test)) [0 1 2] [3] [0 1 2 3] [4] [0 1 2 3 4] [5]26.3 A note on shuffling 如果数据的顺序不是任意的比如说相同标签的样例连续出现为了获得有意义的交叉验证结果首先对其进行 打散是很有必要的。然而当样例不是独立同分布时打散则是不可行的。例如样例是相关的文章以他们发表的时间 进行排序这时候如果对数据进行打散将会导致模型过拟合得到一个过高的验证分数因为验证样例更加相似在时间上更接近 于训练数据。 一些交叉验证迭代器 比如 KFold 有一个内建的在划分数据前进行数据索引打散的选项。注意: 这种方式仅需要很少的内存就可以打散数据。默认不会进行打散包括设置 cvsome_integer 直接k 折叠交叉验证的 cross_val_score 表格搜索等。注意 train_test_split 会返回一个随机的划分。参数 random_state 默认设置为 None 这意为着每次进行 KFold(..., shuffleTrue) 时打散都是不同的。 然而 GridSearchCV 通过调用 fit 方法验证时将会使用相同的打散来训练每一组参数。为了保证结果的可重复性在相同的平台上应该给 random_state 设定一个固定的值。 26.4 交叉验证和模型选择 交叉验证迭代器可以通过网格搜索得到最优的模型超参数从而直接用于模型的选择。 这是另一部分 调整估计器的超参数 的主要内容。
http://www.dnsts.com.cn/news/89238.html

相关文章:

  • 典型网站建设实例精讲2017网站备案
  • 江苏网站备案流程图婚纱摄影网站应该如何做优化
  • 文化公司网站建设取个网络公司名字
  • 免费优化网站建设自己做的网站可以用于百度推广吗
  • 湖南网站制作外包容桂网站智能推广新闻
  • 莆田高端网站建设全网优化哪家好
  • 北京企业网站搭建用网站做的简历模板
  • 建设部精神文明建设网站网站开发源代码 百度文库
  • 广州网站营销推广芭嘞seo
  • dedecms网站根目录广告设计公司任务书
  • 怎样进入网站的后台easyphp安装wordpress
  • 手机企业网站开发wordpress instagram
  • 评析网站建设报价单湘潭城乡建设发展集团网站
  • 网站建设怎么下载代码平台引流推广怎么做
  • 做网站对比报告icp许可证查询系统
  • 瓦房店网站制作vps主机访问网站
  • 建设个人商城网站系统开发的特点有
  • 张云网站建设产品软文是什么意思
  • 站长交易网个人承包工程合同范本
  • 网站未备案免费网站建站+凡科建站
  • 怎么和网站主联系方式温州市建设小学网站首页
  • 深圳市做网站建设wordpress pshow
  • 无锡高端网站建设咨询网站开发现在怎么样
  • 网站套站什么意思asp网站开发教程pdf
  • 筑巢网站建设快看影视大全官方下载
  • 免费个人网站建设制作代码电商wordpress
  • 济南市章丘区建设局网站深圳禅城网站设计
  • 莱芜二中网站请大学生做网站
  • 静态网站站内搜索关键词排名点击软件
  • 福永网站建设公司哪家好基于构件的软件开发流程