4.6網(wǎng)格搜索與k近鄰算法中更多的超參數(shù)
關(guān)于網(wǎng)格搜索,sklearn為我們提供了一個(gè)方法,叫Grid Search在使用它之前,我們首先要定義搜索的參數(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)]
}
對(duì)于我們要進(jìn)行搜索的參數(shù),它是一個(gè)數(shù)組,對(duì)應(yīng)數(shù)組中每一個(gè)元素相應(yīng)的是一個(gè)字典,字典對(duì)應(yīng)的其實(shí)就是我們要進(jìn)行的一族網(wǎng)格搜索。每一族網(wǎng)格搜索相應(yīng)的要列上這族網(wǎng)格搜索中要遍歷的么一個(gè)參數(shù)對(duì)應(yīng)的取值范圍。
下面我們利用網(wǎng)格搜索來找到最佳的超參數(shù)。
import numpy as np
from sklearn import datasets
# 加載手寫數(shù)字?jǐn)?shù)據(jù)集
digits = datasets.load_digits()
X = digits.data
y = digits.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666)
from sklearn.neighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier(n_neighbors=3)
knn_clf.fit(X_train, y_train)
knn_clf.score(X_test, y_test)
knn_clf = KNeighborsClassifier()
from sklearn.model_selection import GridSearchCV
grid_search = GridSearchCV(knn_clf, param_grid)
%%time
grid_search.fit(X_train, y_train)
#獲取最佳超參數(shù)
grid_search.best_estimator_
# 獲取搜索的準(zhǔn)確度
grid_search.best_score_
# 獲取參數(shù)
grid_search.best_params_
knn_clf = grid_search.best_estimator_
knn_clf.predict(X_test)
knn_clf.score(X_test, y_test)
運(yùn)行結(jié)果如下圖:

image

image

image
在這個(gè)方法中,評(píng)判標(biāo)準(zhǔn)和之前的不一樣,所以結(jié)果也不一樣。
grid search可以理解成有多個(gè)分類器,可以找到最好的。
不是用戶傳入的參數(shù),而是根據(jù)用戶傳入的參數(shù)計(jì)算出來的參數(shù)結(jié)果,這樣的參數(shù)一般命名時(shí)末尾有下劃線。
更多距離的定義
- 向量空間余弦相似度 Cosine Similarity
- 調(diào)整余弦相似度 Adjusted Cosine Similarity
- 皮爾森相關(guān)系數(shù) Pearson Correlation Coefficient
- Jaccard相似系數(shù) Jaccard Coefficient