機器學習:使用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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM