机器学习-kNN-寻找最好的超参数

it2022-05-09  37

一 、超参数和模型参数

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

- kNN算法没有模型参数- kNN算法中的k是典型的超参数

  寻找好的超参数

领域知识经验数值实验搜索

二、通过sklearn中的数据集进行测试

    

import numpy as np from sklearn import datasets # 装载sklearn中的手写数字数据集 digits = datasets.load_digits() x = digits.data y = digits.target from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier # 将数据分成训练数据集合测试数据集, # 测试数据集占全部数据的20%, # 设置随机种子为666 x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state = 666) # 设置k为3 knn_clf = KNeighborsClassifier(n_neighbors=3) # 训练数据模型 knn_clf.fit(x_train,y_train) # 通过测试数据计算预测结果准确率,并打印出来 print(knn_clf.score(x_test,y_test))

输出结果:0.9888888888888889

三、考虑距离?不考虑距离?

kNN存在一种平票的情况,就是距离最近的k个点中相应类的数量相等,这是需要考虑距离了。

或者可以使用加权距离来计算

import numpy as np from sklearn import datasets digits = datasets.load_digits() x = digits.data y = digits.target from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state = 666) best_method = '' best_score = 0.0 best_k = -1 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_train) score = knn_clf.score(x_test,y_test) if score > best_score: best_method = method best_score = score best_k = k print('best_method = %s'%best_method) print('best_k = %d'%best_k) print('best_score = %f'
转载请注明原文地址: https://win8.8miu.com/read-1489143.html

最新回复(0)