KNN参数的筛选

目录

 

导包

交叉验证

演示交叉验证

选取最适邻居数

画图表示

多参数组合使用cross_val_score筛选最合适的参数组合

遍历方式取最大值

结果


导包

import numpy as np

from sklearn.neighbors import KNeighborsClassifier

from sklearn import datasets

# model_selection:模型选择
# cross_val_score  cross:交叉,validation:验证(测试)
# 交叉验证
from sklearn.model_selection import cross_val_score

交叉验证

每次选取一份数据做验证,其余数据作为训练,通常选取所有数据,将数据求得的分数做平均值。

加载数据

X,y = datasets.load_iris(True)
X.shape

演示交叉验证

# 演示了交叉验证,如何使用
knn = KNeighborsClassifier()
score = cross_val_score(knn,X,y,scoring='accuracy',cv = 10)#默认cv=3,accuracy准确率
score.mean()

选取最适邻居数

erros = []
for k in range(1,14):
    knn = KNeighborsClassifier(n_neighbors=k)
    score = cross_val_score(knn,X,y,scoring='accuracy',cv = 6).mean()
#     误差越小,说明k选择越合适,越好
    erros.append(1 - score)

画图表示

import matplotlib.pyplot as plt
%matplotlib inline
# k = 11时,误差最小,说明k = 11对鸢尾花来说,最合适的k值
plt.plot(np.arange(1,14),erros)

除此之外,knn中还有其他参数比如权重weights【uniform,distance】

多参数组合使用cross_val_score筛选最合适的参数组合

weights=['uniform','distance']
result = {}
for k in range(1,14):
    for w in weights:
        knn = KNeighborsClassifier(n_neighbors=k,weights=w)
        sm = cross_val_score(knn,X,y,scoring='accuracy',cv = 6).mean()
        result[w + str(k)] = sm
result

遍历方式取最大值

np.array(list(result.values())).argmax()#找到最大值索引

结果

list(result)[20]

由此可看,w最适为uniform,邻居数最好为11。验证其他参数也可以用同样方法。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值