from sklearn.neighbors import KNeighborsClassifier
KNeighborsClassifier 的超参数:
1. n_neighbors : 表示选择距离最近的K个点来投票的数量。
knn_clf = KNeighborsClassifier(n_neighbors=3)
2.weights :表示最近的K个点中,是否考虑距离的权重;
weights = uniform (默认)表示不考虑权重
weighs = distance 表示考虑距离的权重
knn_clf = KNeighborsClassifier(n_neighbors=3 , weights = 'distance')
3. p :表示选择的距离类型;只有当 weights = 'distance' 时,p才有意义;
p = 1 表示选择曼哈顿距离
p = 2 表示选择欧拉距离(默认)
p >=3 表示选择其他距离
knn_clf = KNeighborsClassifier(n_neighbors=3 , weights = 'distance' , p = 1)
4. KNN算法还有其他超参数,暂时不考虑
具体可以参考:http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html
1. 创建KNN实例,设置需要搜寻的超参数格式,用字典的形式表示
字典的键 表示参数的名称 ; 对应的值放在列表中,表示需要搜寻的参数值
2. 用GridSearchCV 来网格搜索
3. fit 结束后
调用 .best_estimator_ ,可以返回最佳的分类器
调用 .best_score_ , 可以返回最佳分类器对应的准确度
调用 .best_params_ ,可以返回最佳分类器对应的参数
4. GridsearchCV 中的准确度(score)采用的是交叉验证(Cross-validation)得来的分数;不是通过 test数据集验证;
n_jobs 参数,表示为计算机分配几个核来并行执行搜索 , n_jobs = -1 表示计算机有几个核就分配几个;
verbose 参数,表示在搜索的过程中 输出过程, 参数为整数,越大表示输出的内容月详细
%%time
grid_search = GridSearchCV(knn_clf,param_grid,n_jobs = -1,verbose=4)
grid_search.fit(X_train,y_train)
Fitting 3 folds for each of 60 candidates, totalling 180 fits
[Parallel(n_jobs=-1)]: Done 17 tasks | elapsed: 10.8s [Parallel(n_jobs=-1)]: Done 90 tasks | elapsed: 35.6s
Wall time: 1min 14s
[Parallel(n_jobs=-1)]: Done 180 out of 180 | elapsed: 1.2min finished