【机器学习】交叉验证筛选参数K值和weight

交叉验证

在这里插入图片描述

导包
import numpy as np

from sklearn.neighbors import KNeighborsClassifier

from sklearn import datasets

#model_selection :模型选择
# cross_val_score: 交叉 ,validation:验证(测试)
#交叉验证
from sklearn.model_selection import cross_val_score
读取datasets中鸢尾花(yuan1wei3hua)数据
X,y= datasets.load_iris(True)
X.shape

(150, 4)

一般情况不会超过数据的开方数
#参考
150**0.5
#K 选择 1~13

12.24744871391589

knn = KNeighborsClassifier()

score = cross_val_score(knn,X,y,scoring='balanced_accuracy',cv=11)
score.mean()

0.968181818181818

应用cross_val_score筛选 n_neighbors k值

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

import matplotlib.pyplot as plt
%matplotlib inline

#k = 11时 误差最小 说明最合适的k值
plt.plot(np.arange(1,14),errors)

[<matplotlib.lines.Line2D at 0x17ece9ff0b8>]
在这里插入图片描述

应用cross_val_score筛选 weights

weights =['uniform','distance']

for w  in weights:
    knn  = KNeighborsClassifier(n_neighbors = 11,weights= w)
    print(w,cross_val_score(knn,X,y, scoring='accuracy',cv = 6).mean())

uniform 0.98070987654321
distance 0.9799382716049383

模型如何调参的,参数调节

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

a =result.values()
list(a)
 
np.array(list(a)).argmax()

20

list(result)[20]

‘uniform11’

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网络毒刘

授人玫瑰,手有余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值