机器学习:使用scikit-learn库中的网格搜索调参
一、scikit-learn庫(kù)中的網(wǎng)格搜索調(diào)參
1)網(wǎng)格搜索的目的:
找到最佳分類(lèi)器及其參數(shù);
2)網(wǎng)格搜索的步驟:
得到原始數(shù)據(jù)
切分原始數(shù)據(jù)
創(chuàng)建/調(diào)用機(jī)器學(xué)習(xí)算法對(duì)象
調(diào)用并實(shí)例化scikit-learn中的網(wǎng)格搜索對(duì)象
對(duì)網(wǎng)格搜索的實(shí)例對(duì)象fit(得到最佳模型及參數(shù))
預(yù)測(cè)
以kNN算法為例,Jupyter中運(yùn)行;
import numpy as np
from sklearn import datasets
# 得到原始數(shù)據(jù)
digits = datasets.load_digits()
X = digits.data
y = digits.target
# 根據(jù)自己編寫(xiě)的函數(shù),對(duì)原始數(shù)據(jù)進(jìn)行切分
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)定義搜索的參數(shù)范圍
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)創(chuàng)建一個(gè)需要進(jìn)行網(wǎng)格搜索的機(jī)器學(xué)習(xí)算法對(duì)象
from sklearn.neighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier()
# 3)實(shí)例化scikit-learn中的網(wǎng)格搜索對(duì)象
from sklearn.model_selection import GridSearchCV
# 創(chuàng)GridSearchCV對(duì)應(yīng)的實(shí)例對(duì)象,一般傳入4個(gè)參數(shù):
grid_search = GridSearchCV(knn_clf, param_grid, n_jobs = -1, verbose = 2)
# 4)對(duì)網(wǎng)格搜索的實(shí)例對(duì)象fit
%%time
grid_search.fit(X_train, y_train)
# 5)查看結(jié)果
# 查看網(wǎng)格搜索得到的最佳的分類(lèi)器對(duì)應(yīng)的參數(shù)(為最佳分類(lèi)器的所有參數(shù))
grid_search.best_estimator_
# 查看準(zhǔn)確度
# 此處得到的準(zhǔn)確度(0.9853963838664812)并沒(méi)有之前(n_neighbors = 3時(shí))得到的準(zhǔn)確度高,因?yàn)樵u(píng)判標(biāo)準(zhǔn)改變了
grid_search.best_score_
# 查看之前定義的網(wǎng)格搜索參數(shù)中最優(yōu)的結(jié)果
grid_search.best_params_
# 返回:{'n_neighbors': 3, 'p': 3, 'weights': 'distance'}
# 獲取最佳分類(lèi)器模型
knn_clf = grid_search.best_estimator_
# 6)使用最佳分類(lèi)器進(jìn)行預(yù)測(cè)
knn_clf.score(X_test, y_test)
3)網(wǎng)格搜索對(duì)象的參數(shù)
grid_search = GridSearchCV(knn_clf, param_grid, n_jobs = -1, verbose = 2)
GridSearchCV的邏輯原理,根據(jù)定義的超參數(shù)范圍生成很多模型,選出準(zhǔn)確度最高的模型
knn_clf:需要進(jìn)行網(wǎng)格搜索的分類(lèi)器對(duì)象,或者說(shuō)是算法本身;
param_grid:定義的網(wǎng)格搜索的參數(shù)的范圍;
n_jobs:
1作用:確定計(jì)算cpu內(nèi)核的使用數(shù)量 2 用法:為一個(gè)整數(shù),整數(shù)是幾運(yùn)算過(guò)程中就使用cpu的幾個(gè)內(nèi)核 3 默認(rèn)n_jobs = 1,表示使用計(jì)算機(jī)的一個(gè)核進(jìn)行處理; 4 如果計(jì)算機(jī)的4核,可以讓n_job = 2/3/4,使用2/3/4個(gè)核同時(shí)處理,提高運(yùn)行效率 5 n_jobs = -1,表示計(jì)算機(jī)有幾個(gè)核就使用幾個(gè)核進(jìn)行運(yùn)算
verbose:
1 作用:確定網(wǎng)格搜索過(guò)程中的中間信息,反應(yīng)網(wǎng)格搜索的搜索狀態(tài); 2 用法:為一個(gè)整數(shù),整數(shù)越大,搜索過(guò)程中輸出的中間信息越詳細(xì) 3 verbose = 0,默認(rèn)為0,搜索過(guò)程中不輸出中間信息 4 一般verbose = 2,;(老師一般使用2)
二、機(jī)器學(xué)習(xí)的其它超參數(shù)
向量空間余弦相似度(Cosine Similarity)
調(diào)整余弦相似度(Adjusted Cosine Similarity)
皮爾森相關(guān)系數(shù)(pearson Correlation Coefficient)
Jacard相似系數(shù)(Jaccard Coefficient)
總結(jié)
以上是生活随笔為你收集整理的机器学习:使用scikit-learn库中的网格搜索调参的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何重启光猫和路由器如何重启服务器和路由
- 下一篇: 如何连接tplink无线路由器路由器如何