4.6 网格搜索与k近邻算法中更多的超参数

4.6网格搜索与k近邻算法中更多的超参数

关于网格搜索,sklearn为我们提供了一个方法,叫Grid Search在使用它之前,我们首先要定义搜索的参数。

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)]
}

对于我们要进行搜索的参数,它是一个数组,对应数组中每一个元素相应的是一个字典,字典对应的其实就是我们要进行的一族网格搜索。每一族网格搜索相应的要列上这族网格搜索中要遍历的么一个参数对应的取值范围。
下面我们利用网格搜索来找到最佳的超参数。

import numpy as np
from sklearn import datasets

# 加载手写数字数据集
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)

#获取最佳超参数
grid_search.best_estimator_

# 获取搜索的准确度
grid_search.best_score_

# 获取参数
grid_search.best_params_

knn_clf = grid_search.best_estimator_

knn_clf.predict(X_test)

knn_clf.score(X_test, y_test)

运行结果如下图:


image

image

image

在这个方法中,评判标准和之前的不一样,所以结果也不一样。
grid search可以理解成有多个分类器,可以找到最好的。
不是用户传入的参数,而是根据用户传入的参数计算出来的参数结果,这样的参数一般命名时末尾有下划线。

更多距离的定义

  • 向量空间余弦相似度 Cosine Similarity
  • 调整余弦相似度 Adjusted Cosine Similarity
  • 皮尔森相关系数 Pearson Correlation Coefficient
  • Jaccard相似系数 Jaccard Coefficient

你可能感兴趣的:(4.6 网格搜索与k近邻算法中更多的超参数)