网格搜索交叉验证#
- class sklearn.model_selection.GridSearchCV(estimator, param_grid, *, scoring=None, n_jobs=None, refit=True, cv=None, verbose=0, pre_dispatch='2*n_jobs', error_score=nan, return_train_score=False)[source]#
- 对估计器的指定参数值进行穷举搜索。 - 重要的成员是fit和predict。 - GridSearchCV实现了“fit”和“score”方法。如果所使用的估计器中实现了“score_samples”、“predict”、“predict_proba”、“decision_function”、“transform”和“inverse_transform”,GridSearchCV也实现了这些方法。 - 用于应用这些方法的估计器的参数通过交叉验证的网格搜索在参数网格上进行优化。 - 更多信息请参见用户指南。 - 参数:
- estimator估计器对象
- 假设这实现了 scikit-learn 估计器接口。估计器需要提供一个 - score函数,或者必须传递- scoring。
- param_grid字典或字典列表
- 键为参数名称( - str),值为要尝试的参数设置列表的字典,或者此类字典的列表,在这种情况下,将探索列表中每个字典所跨越的网格。这使得可以搜索任何参数设置序列。
- scoringstr、可调用对象、列表、元组或字典,默认为 None
- 评估交叉验证模型在测试集上性能的策略。 - 如果 - scoring表示单个分数,可以使用:- 单个字符串(参见 评分参数:定义模型评估规则); 
- 返回单个值的可调用对象(参见 可调用评分器)。 
 - 如果 - scoring表示多个分数,可以使用:- 唯一字符串的列表或元组; 
- 返回字典的可调用对象,其中键是指标名称,值是指标分数; 
- 键为指标名称,值为可调用对象的字典。 
 - 有关示例,请参见 指定多个指标进行评估。 
- n_jobsint,默认为 None
- 并行运行的作业数。 - None表示 1,除非在- joblib.parallel_backend上下文中。- -1表示使用所有处理器。有关更多详细信息,请参见 词汇表。- v0.20 版本中的更改: - n_jobs默认值已从 1 更改为 None
- refitbool、str 或可调用对象,默认为 True
- 使用在整个数据集上找到的最佳参数重新拟合估计器。 - 对于多个指标评估,这需要是一个 - str,表示用于查找最佳参数以最终重新拟合估计器的评分器。- 在选择最佳估计器时,如果考虑因素不仅仅是最高分数,则可以将 - refit设置为一个函数,该函数根据- cv_results_返回选定的- best_index_。在这种情况下,- best_estimator_和- best_params_将根据返回的- best_index_设置,而- best_score_属性将不可用。- 重新拟合的估计器可在 - best_estimator_属性中获得,并允许直接在此- GridSearchCV实例上使用- predict。- 同样对于多个指标评估,只有在设置 - refit时,属性- best_index_、- best_score_和- best_params_才可用,并且所有这些都将针对此特定评分器确定。- 有关多个指标评估的更多信息,请参见 - scoring参数。- 请参见 使用交叉验证的网格搜索的自定义重新拟合策略,了解如何通过 - refit使用可调用对象设计自定义选择策略。- 0.20 版本中的更改: 添加了对可调用对象的支持。 
- cvint、交叉验证生成器或可迭代对象,默认为 None
- 确定交叉验证拆分策略。cv 的可能输入为: - None,使用默认的 5 折交叉验证; 
- 整数,指定 - (Stratified)KFold中的折叠数;
- 产生 (train, test) 分割作为索引数组的可迭代对象。 
 - 对于整数/None 输入,如果估计器是分类器并且 - y是二进制或多类,则使用- StratifiedKFold。在所有其他情况下,使用- KFold。这些分割器使用- shuffle=False实例化,因此跨调用的分割将相同。- 有关此处可以使用各种交叉验证策略,请参见 用户指南。 - 0.22 版本中的更改: 如果为 None,则 - cv默认值已从 3 折更改为 5 折。
- verboseint
- 控制详细程度:越高,消息越多。 - >1:显示每个折叠和参数候选的计算时间; 
- >2:还显示分数; 
- >3:还将折叠和候选参数索引与计算的开始时间一起显示。 
 
- pre_dispatchint 或 str,默认为’2*n_jobs’
- 控制在并行执行期间分派的作业数。减少此数字有助于避免在分派的作业多于 CPU 可处理的作业时内存消耗激增。此参数可以是: - None,在这种情况下,所有作业都会立即创建和生成。对于轻量级和快速运行的作业,请使用此方法,以避免因按需生成作业而导致延迟 
- 一个整数,给出生成的总作业的确切数量 
- 一个字符串,给出作为 n_jobs 函数的表达式,如“2*n_jobs” 
 
- error_score‘raise’ 或数字,默认为 np.nan
- 如果估计器拟合过程中发生错误,则分配给分数的值。如果设置为“raise”,则引发错误。如果给定数值,则引发 FitFailedWarning 警告。此参数不影响重拟合步骤,重拟合步骤将始终引发错误。 
- return_train_score布尔值,默认为 False
- 如果为 - False,则- cv_results_属性将不包含训练分数。计算训练分数用于了解不同的参数设置如何影响过拟合/欠拟合的权衡。但是,在训练集上计算分数在计算上可能很昂贵,并且并非严格要求选择产生最佳泛化性能的参数。- 0.19 版本新增。 - 0.21 版本变更: 默认值已从 - True更改为- False
 
- 属性:
- cv_results_numpy(掩码)ndarray 的字典
- 一个字典,其键为列标题,值为列,可以导入到 pandas - DataFrame中。- 例如,下表 - param_kernel - param_gamma - param_degree - split0_test_score - … - rank_t… - ‘poly’ - – - 2 - 0.80 - … - 2 - ‘poly’ - – - 3 - 0.70 - … - 4 - ‘rbf’ - 0.1 - – - 0.80 - … - 3 - ‘rbf’ - 0.2 - – - 0.93 - … - 1 - 将由 - cv_results_字典表示为- { 'param_kernel': masked_array(data = ['poly', 'poly', 'rbf', 'rbf'], mask = [False False False False]...) 'param_gamma': masked_array(data = [-- -- 0.1 0.2], mask = [ True True False False]...), 'param_degree': masked_array(data = [2.0 3.0 -- --], mask = [False False True True]...), 'split0_test_score' : [0.80, 0.70, 0.80, 0.93], 'split1_test_score' : [0.82, 0.50, 0.70, 0.78], 'mean_test_score' : [0.81, 0.60, 0.75, 0.85], 'std_test_score' : [0.01, 0.10, 0.05, 0.08], 'rank_test_score' : [2, 4, 3, 1], 'split0_train_score' : [0.80, 0.92, 0.70, 0.93], 'split1_train_score' : [0.82, 0.55, 0.70, 0.87], 'mean_train_score' : [0.81, 0.74, 0.70, 0.90], 'std_train_score' : [0.01, 0.19, 0.00, 0.03], 'mean_fit_time' : [0.73, 0.63, 0.43, 0.49], 'std_fit_time' : [0.01, 0.02, 0.01, 0.01], 'mean_score_time' : [0.01, 0.06, 0.04, 0.04], 'std_score_time' : [0.00, 0.00, 0.00, 0.01], 'params' : [{'kernel': 'poly', 'degree': 2}, ...], } - 注意 - 键 - 'params'用于存储所有参数候选的参数设置字典列表。- mean_fit_time、- std_fit_time、- mean_score_time和- std_score_time都以秒为单位。- 对于多指标评估,所有评分器的分数都可以在 - cv_results_字典中以以该评分器名称结尾的键获得(- '_<scorer_name>'),而不是上面显示的- '_score'。('split0_test_precision','mean_train_precision' 等)
- best_estimator_估计器
- 搜索选择的估计器,即在排除的数据上获得最高分数(或如果指定则为最小损失)的估计器。如果 - refit=False,则不可用。- 有关允许值的更多信息,请参见 - refit参数。
- best_score_浮点数
- 最佳估计器的平均交叉验证分数。 - 对于多指标评估,只有在指定 - refit时才存在。- 如果 - refit是一个函数,则此属性不可用。
- best_params_字典
- 在保留数据上产生最佳结果的参数设置。 - 对于多指标评估,只有在指定 - refit时才存在。
- best_index_整数
- 对应于最佳候选参数设置的 - cv_results_数组的索引。- search.cv_results_['params'][search.best_index_]中的字典给出了最佳模型的参数设置,该模型提供了最高的平均分数(- search.best_score_)。- 对于多指标评估,只有在指定 - refit时才存在。
- scorer_函数或字典
- 用于保留数据上的评分器函数,以选择模型的最佳参数。 - 对于多指标评估,此属性保存已验证的 - scoring字典,该字典将评分器键映射到评分器可调用对象。
- n_splits_整数
- 交叉验证分割(折叠/迭代)的数量。 
- refit_time_浮点数
- 用于在整个数据集上重新拟合最佳模型的秒数。 - 只有当 - refit不是 False 时才存在。- 0.20 版本新增。 
- multimetric_布尔值
- 评分器是否计算多个指标。 
- classes_形状为 (n_classes,) 的 ndarray
- 类别标签。 
- n_features_in_整数
- 在 fit 期间看到的特征数量。 
- feature_names_in_形状为 (n_features_in_,) 的 ndarray
- 在 fit 期间看到的特征名称。只有在定义了 - best_estimator_(有关更多详细信息,请参阅- refit参数的文档)并且该- best_estimator_在拟合时公开- feature_names_in_时才定义。- 1.0 版本新增。 
 
 - 另请参见 - 参数网格
- 生成超参数网格的所有组合。 
- 训练测试数据划分
- 用于将数据分割成可用于拟合 GridSearchCV 实例的开发集和用于最终评估的评估集的实用程序函数。 
- sklearn.metrics.make_scorer
- 从性能指标或损失函数创建评分器。 
 - 备注 - 除非传入显式分数,否则选择的参数是最大化排除数据分数的参数,在这种情况下,将使用该分数。 - 如果 - n_jobs设置为大于1的值,则数据会为网格中的每个点复制一份(而不是- n_jobs次)。如果单个作业耗时极短,则出于效率原因会这样做,但如果数据集很大且可用内存不足,则可能会引发错误。在这种情况下,一种解决方法是设置- pre_dispatch。然后,内存只会被复制- pre_dispatch次。一个合理的- pre_dispatch值是- 2 * n_jobs。- 示例 - >>> from sklearn import svm, datasets >>> from sklearn.model_selection import GridSearchCV >>> iris = datasets.load_iris() >>> parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]} >>> svc = svm.SVC() >>> clf = GridSearchCV(svc, parameters) >>> clf.fit(iris.data, iris.target) GridSearchCV(estimator=SVC(), param_grid={'C': [1, 10], 'kernel': ('linear', 'rbf')}) >>> sorted(clf.cv_results_.keys()) ['mean_fit_time', 'mean_score_time', 'mean_test_score',... 'param_C', 'param_kernel', 'params',... 'rank_test_score', 'split0_test_score',... 'split2_test_score', ... 'std_fit_time', 'std_score_time', 'std_test_score'] - property classes_#
- 类别标签。 - 仅当 - refit=True且估计器是分类器时可用。
 - decision_function(X)[source]#
- 使用最佳参数调用估计器的decision_function。 - 仅当 - refit=True且底层估计器支持- decision_function时可用。- 参数:
- X可索引的,长度为n_samples
- 必须满足底层估计器的输入假设。 
 
- 返回:
- y_score形状为(n_samples,)或(n_samples, n_classes)或(n_samples, n_classes * (n_classes-1) / 2)的ndarray
- 基于具有最佳参数的估计器,对 - X进行决策函数的结果。
 
 
 - fit(X, y=None, **params)[source]#
- 使用所有参数集运行拟合。 - 参数:
- X形状为(n_samples, n_features)或(n_samples, n_samples)的类数组
- 训练向量,其中 - n_samples是样本数,- n_features是特征数。对于预计算的核或距离矩阵,X的预期形状为(n_samples, n_samples)。
- y形状为(n_samples, n_output)或(n_samples,)的类数组,默认为None
- 针对分类或回归的与X相关的目标;无监督学习则为None。 
- **paramsstr到对象的字典
- 传递给估计器的 - fit方法、评分器和CV分割器的参数。- 如果拟合参数是一个长度等于 - num_samples的类数组,则它将与- X和- y一起进行交叉验证分割。例如,sample_weight参数会被分割,因为- len(sample_weights) = len(X)。但是,此行为不适用于通过构造函数的- cv参数配置的分割器传递的- groups。因此,- groups用于*执行分割*,并确定将哪些样本分配给分割的每一侧。
 
- 返回:
- self对象
- 已拟合估计器的实例。 
 
 
 - get_metadata_routing()[source]#
- 获取此对象的元数据路由。 - 请查看用户指南,了解路由机制的工作原理。 - 版本1.4中添加。 - 返回:
- routingMetadataRouter
- 一个 - MetadataRouter,封装了路由信息。
 
 
 - get_params(deep=True)[source]#
- 获取此估计器的参数。 - 参数:
- deepbool,默认为True
- 如果为True,将返回此估计器和包含的也是估计器的子对象的的参数。 
 
- 返回:
- params字典
- 参数名称与其值的映射。 
 
 
 - inverse_transform(X=None, Xt=None)[source]#
- 使用最佳参数调用估计器的inverse_transform。 - 仅当底层估计器实现 - inverse_transform且- refit=True时可用。- 参数:
- X可索引的,长度为n_samples
- 必须满足底层估计器的输入假设。 
- Xt可索引的,长度为n_samples
- 必须满足底层估计器的输入假设。 - 自版本1.5起已弃用: - Xt在1.5中已弃用,将在1.7中移除。请改用- X。
 
- 返回:
- X形状为(n_samples, n_features)的{ndarray, 稀疏矩阵}
- 基于具有最佳参数的估计器,对 - Xt进行- inverse_transform函数的结果。
 
 
 - predict(X)[source]#
- 使用找到的最佳参数调用估计器的 predict 方法。 - 仅当 - refit=True且底层估计器支持- predict时可用。- 参数:
- X可索引的,长度为n_samples
- 必须满足底层估计器的输入假设。 
 
- 返回:
- y_pred形状为 (n_samples,) 的 ndarray
- 基于具有最佳参数的估计器预测的 - X的标签或值。
 
 
 - predict_log_proba(X)[source]#
- 使用找到的最佳参数调用估计器的 predict_log_proba 方法。 - 仅当 - refit=True且底层估计器支持- predict_log_proba时可用。- 参数:
- X可索引的,长度为n_samples
- 必须满足底层估计器的输入假设。 
 
- 返回:
- y_pred形状为 (n_samples,) 或 (n_samples, n_classes) 的 ndarray
- 基于具有最佳参数的估计器预测的 - X的类对数概率。类的顺序与拟合属性 classes_ 中的顺序一致。
 
 
 - predict_proba(X)[source]#
- 使用找到的最佳参数调用估计器的 predict_proba 方法。 - 仅当 - refit=True且底层估计器支持- predict_proba时可用。- 参数:
- X可索引的,长度为n_samples
- 必须满足底层估计器的输入假设。 
 
- 返回:
- y_pred形状为 (n_samples,) 或 (n_samples, n_classes) 的 ndarray
- 基于具有最佳参数的估计器预测的 - X的类概率。类的顺序与拟合属性 classes_ 中的顺序一致。
 
 
 - score(X, y=None, **params)[source]#
- 如果估计器已重新拟合,则返回给定数据上的分数。 - 这使用由 - scoring定义的分数,否则使用- best_estimator_.score方法。- 参数:
- X形状为 (n_samples, n_features) 的类数组
- 输入数据,其中 - n_samples是样本数,- n_features是特征数。
- y形状为(n_samples, n_output)或(n_samples,)的类数组,默认为None
- 针对分类或回归的与X相关的目标;无监督学习则为None。 
- **paramsdict
- 要传递给底层评分器(s) 的参数。 - 版本 1.4 中新增: 仅当 - enable_metadata_routing=True时可用。更多详情请参见 元数据路由用户指南。
 
- 返回:
- scorefloat
- 如果提供,则由 - scoring定义的分数,否则为- best_estimator_.score方法。
 
 
 - score_samples(X)[source]#
- 使用找到的最佳参数调用估计器的 score_samples 方法。 - 仅当 - refit=True且底层估计器支持- score_samples时可用。- 0.24 版中新增。 - 参数:
- Xiterable
- 要预测的数据。必须满足底层估计器的输入要求。 
 
- 返回:
- y_score形状为 (n_samples,) 的 ndarray
- best_estimator_.score_samples方法。
 
 
 
 
     
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
