一、scikit-learn庫中的網格搜索調參
1)網格搜索的目的:
- 找到最佳分類器及其參數;
2)網格搜索的步驟:
- 得到原始數據
- 切分原始數據
- 創建/調用機器學習算法對象
- 調用並實例化scikit-learn中的網格搜索對象
- 對網格搜索的實例對象fit(得到最佳模型及參數)
- 預測
- 以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的邏輯原理,根據定義的超參數范圍生成很多模型,選出准確度最高的模型
- knn_clf:需要進行網格搜索的分類器對象,或者說是算法本身;
- param_grid:定義的網格搜索的參數的范圍;
- n_jobs:
1作用:確定計算cpu內核的使用數量 2 用法:為一個整數,整數是幾運算過程中就使用cpu的幾個內核 3 默認n_jobs = 1,表示使用計算機的一個核進行處理; 4 如果計算機的4核,可以讓n_job = 2/3/4,使用2/3/4個核同時處理,提高運行效率 5 n_jobs = -1,表示計算機有幾個核就使用幾個核進行運算
- verbose:
1 作用:確定網格搜索過程中的中間信息,反應網格搜索的搜索狀態; 2 用法:為一個整數,整數越大,搜索過程中輸出的中間信息越詳細 3 verbose = 0,默認為0,搜索過程中不輸出中間信息 4 一般verbose = 2,;(老師一般使用2)
二、機器學習的其它超參數
- 向量空間余弦相似度(Cosine Similarity)
- 調整余弦相似度(Adjusted Cosine Similarity)
- 皮爾森相關系數(pearson Correlation Coefficient)
- Jacard相似系數(Jaccard Coefficient)