zoukankan      html  css  js  c++  java
  • 机器学习:使用scikit-learn库中的网格搜索调参

    一、scikit-learn库中的网格搜索调参

     

     1)网格搜索的目的:

    • 找到最佳分类器及其参数;

     

     2)网格搜索的步骤:

    1. 得到原始数据
    2. 切分原始数据
    3. 创建/调用机器学习算法对象
    4. 调用并实例化scikit-learn中的网格搜索对象
    5. 对网格搜索的实例对象fit(得到最佳模型及参数)
    6. 预测
    • 以kNN算法为例,Jupyter中运行;
      import numpy as np
      from sklearn import datasets
      
      # 得到原始数据
      digits = datasets.load_digits()
      X = digits.data
      y = digits.target
      
      # 根据自己编写的函数,对原始数据进行切分
      from ALG.train_test_split import train_test_split
      
      X_train, X_test, y_train, y_test = train_test_split(X, y, test_train = 0.2, seed = 666)
      
      # 1)定义搜索的参数范围
      param_grid = [
          {
              'weights':['uniform'],
              'n_neighbors':[i for i in range(1, 11)]
          },
          {
              'weights':['distance'],
              'n_neighbors':[i for i in range(1, 11)],
              'p':[i for i in range(1, 6)]
          }
      ]
      
      # 2)创建一个需要进行网格搜索的机器学习算法对象
      from sklearn.neighbors import KNeighborsClassifier
      
      knn_clf = KNeighborsClassifier()
      
      # 3)实例化scikit-learn中的网格搜索对象
      from sklearn.model_selection import GridSearchCV
      
      # 创GridSearchCV对应的实例对象,一般传入4个参数:
      grid_search = GridSearchCV(knn_clf, param_grid, n_jobs = -1, verbose = 2)
      
      
      # 4)对网格搜索的实例对象fit
      %%time
      grid_search.fit(X_train, y_train)
      
      
      # 5)查看结果
      # 查看网格搜索得到的最佳的分类器对应的参数(为最佳分类器的所有参数)
      grid_search.best_estimator_
      
      # 查看准确度
      # 此处得到的准确度(0.9853963838664812)并没有之前(n_neighbors = 3时)得到的准确度高,因为评判标准改变了
      grid_search.best_score_
      
      # 查看之前定义的网格搜索参数中最优的结果
      grid_search.best_params_
      # 返回:{'n_neighbors': 3, 'p': 3, 'weights': 'distance'}
      
      # 获取最佳分类器模型
      knn_clf = grid_search.best_estimator_
      
      
      # 6)使用最佳分类器进行预测
      knn_clf.score(X_test, y_test)

     3)网格搜索对象的参数

    • grid_search = GridSearchCV(knn_clf, param_grid, n_jobs = -1, verbose = 2)
    • GridSearchCV的逻辑原理,根据定义的超参数范围生成很多模型,选出准确度最高的模型
    1. knn_clf:需要进行网格搜索的分类器对象,或者说是算法本身;
    2. param_grid:定义的网格搜索的参数的范围;
    3.  n_jobs:
      1作用:确定计算cpu内核的使用数量
      2 用法:为一个整数,整数是几运算过程中就使用cpu的几个内核
      3 默认n_jobs = 1,表示使用计算机的一个核进行处理;
      4 如果计算机的4核,可以让n_job = 2/3/4,使用2/3/4个核同时处理,提高运行效率
      5 n_jobs = -1,表示计算机有几个核就使用几个核进行运算
    4.  verbose:
      1 作用:确定网格搜索过程中的中间信息,反应网格搜索的搜索状态;
      2 用法:为一个整数,整数越大,搜索过程中输出的中间信息越详细
      3 verbose = 0,默认为0,搜索过程中不输出中间信息
      4 一般verbose = 2,;(老师一般使用2)

    二、机器学习的其它超参数

    1. 向量空间余弦相似度(Cosine Similarity)
    2. 调整余弦相似度(Adjusted Cosine Similarity)
    3. 皮尔森相关系数(pearson Correlation Coefficient)
    4. Jacard相似系数(Jaccard Coefficient)
  • 相关阅读:
    阿里云提示Discuz memcache+ssrf GETSHELL漏洞如何解决
    mysql总是无故退出, InnoDB: mmap(68681728 bytes) failed; errno 12
    ElasticSearch6 报错FORBIDDEN/12/index read-only / allow delete (api)
    Yum安装时提示多库版本保护 Multilib version problems found
    redis:CLUSTER cluster is down 解决方法
    虚拟主机如何绑定网站根目录到子目录中
    iscroll遇到的两个坑
    前端之Sass/Scss实战笔记
    JS与jquery书写插件规范
    css命名推荐
  • 原文地址:https://www.cnblogs.com/volcao/p/9086908.html
Copyright © 2011-2022 走看看