4.6網(wǎng)格搜索與k近鄰算法中更多的超參數(shù)
關于網(wǎng)格搜索,sklearn為我們提供了一個方法,叫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)]
}
對于我們要進行搜索的參數(shù),它是一個數(shù)組,對應數(shù)組中每一個元素相應的是一個字典,字典對應的其實就是我們要進行的一族網(wǎng)格搜索。每一族網(wǎng)格搜索相應的要列上這族網(wǎng)格搜索中要遍歷的么一個參數(shù)對應的取值范圍。
下面我們利用網(wǎng)格搜索來找到最佳的超參數(shù)。
import numpy as np
from sklearn import datasets
# 加載手寫數(shù)字數(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_
# 獲取搜索的準確度
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)
運行結(jié)果如下圖:

image

image

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