• sklearn笔记:调参


    1 介绍

    • 超参数是不直接在估计器中学习的参数。 在 scikit-learn 中,它们作为参数传递给估计器类的构造函数。 
    • 需要搜索超参数空间以获得最佳交叉验证分数。

    • scikit-learn 中提供了两种通用的参数搜索方法:
      • 对于给定的值,GridSearchCV 会详尽地考虑所有参数组合
      • RandomizedSearchCV 可以从具有指定分布的参数空间中采样给定数量的候选者。
      • 这两个工具都有连续的减半对应搜索方法 HalvingGridSearchCV 和 HalvingRandomSearchCV,它们可以更快地找到一个好的参数组合。

    1.1 查找指定估计其的所有超参数

    要查找给定估计器的所有参数的名称和当前值,需要使用get_params()

    1. import numpy as np
    2. from sklearn.svm import SVC
    3. X = np.array([[-3, -7], [-2, -10], [1, 1], [2, 5]])
    4. y = np.array([1, 1, 2, 2])
    5. #数据部分
    6. clf=SVC(kernel='linear')
    7. clf.fit(X, y)
    8. #fit数据
    9. clf.get_params()
    10. '''
    11. {'C': 1.0,
    12. 'break_ties': False,
    13. 'cache_size': 200,
    14. 'class_weight': None,
    15. 'coef0': 0.0,
    16. 'decision_function_shape': 'ovr',
    17. 'degree': 3,
    18. 'gamma': 'scale',
    19. 'kernel': 'linear',
    20. 'max_iter': -1,
    21. 'probability': False,
    22. 'random_state': None,
    23. 'shrinking': True,
    24. 'tol': 0.001,
    25. 'verbose': False}
    26. '''

    2 Grid Search

    • GridSearchCV 提供的网格搜索从 param_grid 参数指定的参数值网格中详尽地生成候选者。
    • 例如,以下 param_grid 指定应探索两个网格:
      • 一个具有线性内核和 [1, 10, 100, 1000] 中的 C 值
      • 一个具有 RBF 内核,C 值的范围为 [1, 10, 100, 1000],γ值的范围为 [0.001, 0.0001]。
    1. param_grid = [
    2. {'C': [1, 10, 100, 1000], 'kernel': ['linear']},
    3. {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
    4. ]

    当“拟合”到数据集上时,所有可能的参数值组合都会被评估并保留最佳组合。

    2.1 构造函数使用方法

    1. class sklearn.model_selection.GridSearchCV(
    2. estimator,
    3. param_grid,
    4. *,
    5. scoring=None,
    6. n_jobs=None,
    7. refit=True,
    8. cv=None,
    9. verbose=0,
    10. pre_dispatch='2*n_jobs',
    11. error_score=nan,
    12. return_train_score=False)

    2.1.1 主要参数说明

    estimator估计器
    param_grid
    • 以参数名称 (str) 作为键的字典和要尝试作为值的参数设置列表
    • 或此类字典的列表,在这种情况下,将探索列表中每个字典跨越的网格。 
    scoring模型评价标准,默认None,使用estimator的误差估计函数。根据所选模型不同,评价准则不同
    refit默认为True,即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集
    cv交叉验证参数,默认None,使用5折交叉验证

     2.1.2 举例

    1. from sklearn import svm, datasets
    2. from sklearn.model_selection import GridSearchCV
    3. iris = datasets.load_iris()
    4. parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
    5. svc = svm.SVC()
    6. clf = GridSearchCV(svc, parameters)
    7. #对svc进行grid search,其中参数范围是parameters中的两两组合
    8. clf.fit(iris.data, iris.target)
    9. #将训练数据和label输入进去,进行拟合
    10. import pandas as pd
    11. pd.DataFrame(clf.cv_results_)

     2.1.3  类属性

    cv_results_

    各参数组合交叉验证的结果,

    (转化成DataFrame后的结果 可见2.1.2例子输出部分)

    best_estimator_

    搜索选择的估计器,即在数据集上给出最高分数的估计器。

    best_score_

    最佳估计器的平均交叉验证结果

    best_params_

    最佳参数组合

    classes_

    类别的label

    n_features_in_

    输入的参数维度

     2.1.4 方法

    decision_function(X)

    对于X中的数据,计算他们在最优估计器上的数值

    fit(X,y)
    get_params
    predict(X)
    score(X,Y)
    transform(X)

    3 Random Search

    •  RandomizedSearchCV 实现了对参数的随机搜索,其中每个设置都是从可能的参数值的分布中采样的。

    3.1 主要使用方法

    1. class sklearn.model_selection.RandomizedSearchCV(
    2. estimator,
    3. param_distributions,
    4. *,
    5. n_iter=10,
    6. scoring=None,
    7. n_jobs=None,
    8. refit=True,
    9. cv=None,
    10. verbose=0,
    11. pre_dispatch='2*n_jobs',
    12. random_state=None,
    13. error_score=nan,
    14. return_train_score=False)

    3.1.2 主要参数说明

    estimator估计器
    param_distributions
    • 以参数名称 (str) 作为键、分布或要尝试的参数列表作为值的字典。
    • 分布需要提供 rvs 抽样方法(例如来自 scipy.stats.distributions 的那些)。
    • 如果给出一个列表,则对其进行均匀采样。
    • 如果给定一个字典列表,首先对各个字典进行均匀采样,然后使用该字典对参数进行采样。
    n_iter采样的参数设置数。 n_iter 权衡运行时间与解决方案的质量。
    scoring模型评价标准,默认None,使用estimator的误差估计函数。根据所选模型不同,评价准则不同
    refit默认为True,即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集
    cv交叉验证参数,默认None,使用5折交叉验证

     3.1.3 举例

    1. from sklearn import svm, datasets
    2. from sklearn.model_selection import RandomizedSearchCV
    3. from scipy.stats import uniform
    4. iris = datasets.load_iris()
    5. distributions = {'kernel':('linear', 'rbf'), 'C':uniform(loc=0, scale=400)}
    6. svc = svm.SVC()
    7. clf = RandomizedSearchCV(svc, distributions)
    8. #对svc进行random search,其中参数是从distributions中的分布中随机选择的
    9. clf.fit(iris.data, iris.target)
    10. import pandas as pd
    11. pd.DataFrame(clf.cv_results_)

     

    3.1.4  类属性

    cv_results_

    各参数组合交叉验证的结果,

    (转化成DataFrame后的结果 可见3.1.3例子输出部分)

    best_estimator_

    搜索选择的估计器,即在数据集上给出最高分数的估计器。

     

    best_score_

    最佳估计器的平均交叉验证结果

     

    best_params_

    最佳参数组合

    classes_

    类别的label

    n_features_in_

    输入的参数维度

     3.1.5方法

    decision_function(X)

    对于X中的数据,计算他们在最优估计器上的数值

    fit(X,y)
    get_params
    predict(X)
    score(X,Y)
    transform(X)

  • 相关阅读:
    PowerBI工作区连接Log Aanlytics
    儿童护眼灯什么光源好?亮度柔和的护眼台灯分享
    LeetCode简单题之重排字符形成目标字符串
    SQL基础理论篇(六):多表的连接方式
    3D印刷电路板在线渲染查看工具
    GoLang之详解Go中的Channel源码
    如何拖动末端使机器人运动仿真-使用Peter机器人工具箱
    Logback 配置文件这样优化,TPS提高 10 倍
    从零接入小程序支付
    Http请求类型GET, POST, PUT
  • 原文地址:https://blog.csdn.net/qq_40206371/article/details/127591596