目录
多参数组合使用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。验证其他参数也可以用同样方法。