网格搜索与K临近算法中的超参数

机器学习中调参通常调的就是超参数,如何找到一个最好的超参数,除了通过经验,也可以通过网格搜索的方式进行选择
首先我们来看下如何寻找KNN中最好的k
(这里的k即相近节点数)

best_score=0.0
best_k=-1
for k in range(1,11):
	knn_clf=KNeighborsClassifier(n_neighbors=k)
	knn_clf.fit(x_train,y_trian)
	score=knn_clf.score(x_test,y_test)
	if score>best_score:
		best_score=score
		best_k=k
print("best_score=",score)
print("best_k=",k)

我们在KNN算法中考虑距离,有时距离近的点所占投票的权重大更为合适,"distance"考虑权重,"uniform"不考虑权重

best_score=0.0
best_k=-1
best_method=""
for method in ["uniform","distance"]:
	for k in range(1,11):
		knn_clf=KNeighborsClassifier(n_neighbors=k,weights=method)
		knn_clf.fit(x_train,y_trian)
		score=knn_clf.score(x_test,y_test)
		if score>best_score:
			best_score=score
			best_k=k
			best_method=method
print("best_method=",method)
print("best_score=",score)
print("best_k=",k)

在两点之间的距离上,我们默认使用的是欧拉距离,同时数学中还有曼哈顿距离,结合两者进而提出了 明可夫斯基距离,并获得了一个新的超参数p
在这里插入图片描述
明可夫斯基距离采用"distance“方式

best_score=0.0
best_k=-1
best_p=-1
for p in range(1,6):
	for k in range(1,11):
		knn_clf=KNeighborsClassifier(n_neighbors=k,weights="distance",p=p)
		knn_clf.fit(x_train,y_trian)
		score=knn_clf.score(x_test,y_test)
		if score>best_score:
			best_score=score
			best_k=k
			best_p=p
print("best_p=",p)
print("best_score=",score)
print("best_k=",k)

由于参数和参数之间可能会存在着依赖关系,我们可以采用网格搜索的方式来寻找最优

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

from sklearn.neighbors import KNeighborsClassifier
knn_clf=KNeighborsClassifier()
from model_selection import GridSearchCV
grid_search=GridSearchCV(knn_clf,param_grid)
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.score(x_test,y_test)

在GridSearchCV中还有一些参数
n_jobs 表示计算机使用几个核来处理运算,-1表示全部使用
verbose 在搜索过程中进行输出

以上是自己观看慕课视频课的笔记,如有错误欢迎批评指正,如有侵权删。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值