K近邻算法-4.超参数

超参数

  • 超参数:在算法运行之前需要决定的参数
  • 模型参数:算法过程中学习到的参数

KNN算法作为最简单的机器学习算法,它没有模型参数,下面讨论它的超参数
加载数据集:

from sklearn import datasets, neighbors, model_selection

data = datasets.load_digits()
x = data.data
y = data.target

x_train,x_test,y_train,y_test = model_selection.train_test_split(x,y,test_size=0.2)

寻找最好的k:

best_score = 0.0
best_k = -2
for k in range(1,15):
    knn_clf = neighbors.KNeighborsClassifier(n_neighbors=k)
    knn_clf.fit(x_train,y_train)
    score = knn_clf.score(x_test,y_test)
    if score > best_score:
        best_k = k
        best_score = score

1465169-20190713131429259-1237916845.png

考虑距离权重(weight)?
1465169-20190713131445257-1314106671.png

best_method = ""
best_score = 0.0
best_k = -2

for method in ["uniform","distance"]:
    for k in range(1,15):
        knn_clf = neighbors.KNeighborsClassifier(n_neighbors=k,weights=method)
        knn_clf.fit(x_train,y_train)
        score = knn_clf.score(x_test,y_test)
        if score > best_score:
            best_k = k
            best_score = score
            best_method = method

1465169-20190713132549778-145550249.png

欧拉距离,曼哈顿距离,明可夫斯基距离

1465169-20190713131607920-433351780.png

图中绿色最短的为欧拉距离,红黄蓝为曼哈顿距离
将距离一般化:明可夫斯基距离
1465169-20190713131625785-822635297.png

得到了一个关于距离的超参数P,求最优的P

%%time
best_p = -1
best_score = 0.0
best_k = -2

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

1465169-20190713131756455-1494177970.png

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

knn_clf = neighbors.KNeighborsClassifier()
# n_jobs 代表需要用几个核,传入-1,代表用所有核(我的是双核)verbose 搜索中输出信息
grid_search = model_selection.GridSearchCV(knn_clf, param_grid,n_jobs=-1,verbose=2)

1465169-20190713131821440-1622441306.png

返回最佳的分类器,用这个分类器预测:

knn_clf = grid_search.best_estimator_

查看用最好的超参数训练的算法的准确率和参数值:

grid_search.best_score_
grid_search.best_params_

1465169-20190713131842496-967594151.png

转载于:https://www.cnblogs.com/shuai-long/p/11180282.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值