百度网站适配代码,wordpress网建公司模板,icp许可证,php网站开发费用分类准确度 一、摘要二、超参数的概念三、调参的方法四、实验搜索超参数五、扩展搜索范围六、考虑距离权重的kNN算法七、距离的计算方法及代码实现八、明可夫斯基距离的应用九、网格搜索超参数 一、摘要
本博文讲解了机器学习中的超参数问题#xff0c;以K近邻算法为例#… 分类准确度 一、摘要二、超参数的概念三、调参的方法四、实验搜索超参数五、扩展搜索范围六、考虑距离权重的kNN算法七、距离的计算方法及代码实现八、明可夫斯基距离的应用九、网格搜索超参数 一、摘要
本博文讲解了机器学习中的超参数问题以K近邻算法为例介绍了超参数的概念及其重要性。讲解了如何通过实验搜索确定最佳的超参数值如k值的选择并介绍了距离权重的考虑和明可夫斯基距离的计算方法。同时探讨了如何通过网格搜索策略来寻找最优的超参数组合。最后强调了机器学习工程师在进行调参时需要考虑领域知识和经验数值的重要性。
二、超参数的概念
超参数是在运行机器学习算法之前需要指定的参数。kNN算法中的k是一个典型的超参数。超参数与模型参数的区别在于超参数在算法运行前决定而模型参数在算法过程中学习。
三、调参的方法
调参的目标是找到最好的超参数。领域知识和经验数值是寻找超参数的重要途径。对于具体问题最好的超参数可能不同于经验数值需要通过实验搜索确定。
四、实验搜索超参数
通过循环测试不同k值找到最佳的k值。初始化最佳准确率和最佳k值循环遍历k的取值范围。对每个k值创建kNN分类器并计算准确率更新最佳准确率和最佳k值。
五、扩展搜索范围
如果找到的最佳k值在搜索范围的边界上建议扩展搜索范围以寻找更好的值。
六、考虑距离权重的kNN算法
kNN算法可以考虑距离的权重通常使用距离的倒数作为权重。距离越近权重越大。考虑距离权重可以更好地解决平票问题。权重weight的选择 kNN分类器中有一个weight参数默认值为uniform表示不考虑距离权重。将位次参数设置为distance时会考虑距离权重可使用明可夫斯基距离。通过实验搜索找到最佳的weight参数。
七、距离的计算方法及代码实现
距离的计算方法包括欧拉距离和曼哈顿距离。欧拉距离是每个维度上差值的平方和的平方根。 曼哈顿距离是每个维度上差值的绝对值的和。 明可夫斯基距离是每个维度上差值的绝对值的p次方和的p次方根。 三者的关系 p1时明可夫斯基距离为曼哈顿距离p2时为欧拉距离。 通过寻找kNN超参数利用手写数字数据集作为训练集和测试集 准备手写数字数据集并调用scikit-learn中的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
X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.2,random_state666)# 指定sklearn中kNN中的k值为3
from sklearn.neighbors import KNeighborsClassifier
knn_clf KNeighborsClassifier(n_neighbors3)
knn_clf.fit(X_train,y_train)
knn_clf.score(X_test,y_test)在Jupyter中执行过程及结果如下 寻找最佳的k的超参数值 from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.2,random_state666)best_score 0.0 # 设置默认准确度
best_k -1 # 设置默认值
for k in range(1,11):knn_clf KNeighborsClassifier(n_neighbors k)knn_clf.fit(X_train,y_train)score knn_clf.score(X_test,y_test) # 调用score函数得出knn算法准确度# 判断当前的score是否大于当前的best_score如果是则重新赋值if score best_score:best_k kbest_score score
print(best_k ,best_k)
print(best_score ,best_score)在Jupyter中执行过程及结果如下 考虑距离权重的kNN算法调用得到最佳超参数 # 当单纯使用KNN距离远近来作为分类的依据时会存在离得近的点总数少于离得稍微远的点的总数到时分类错误。可使用权重参数通过选择一个合理的method方法来解决。
# 当投票时出现平票时需要考虑使用距离的权重来解决
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.2,random_state666)best_method None # kNN的一个超参数
best_score 0.0 # 设置默认准确度
best_k -1 # 设置默认值为kNN默认的超参数
for method in [uniform,distance]:for k in range(1,11):knn_clf KNeighborsClassifier(n_neighbors k,weightsmethod) # weights 就是权重knn_clf.fit(X_train,y_train)score knn_clf.score(X_test,y_test) # 调用score函数得出knn算法准确度# 判断当前的score是否大于当前的best_score如果是则重新赋值if score best_score:best_k kbest_score scorebest_method methodprint(best_k ,best_k)
print(best_score ,best_score)
print(best_method ,best_method)在jupyter中执行过程及结果如下 考虑使用明可夫斯基距离来搜索kNN最佳超参数 %%timefrom sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.2,random_state666)best_p -1 # kNN的一个超参数
best_score 0.0 # 设置默认准确度
best_k -1 # 设置默认值为kNN默认的超参数
for k in range(1,11):for p in range(1,6):knn_clf KNeighborsClassifier(n_neighbors k,weightsdistance,pp) # 使用明可夫斯基距离时weights必须是distanceknn_clf.fit(X_train,y_train)score knn_clf.score(X_test,y_test) # 调用score函数得出knn算法准确度# 判断当前的score是否大于当前的best_score如果是则重新赋值if score best_score:best_k kbest_score scorebest_p pprint(best_k ,best_k)
print(best_score ,best_score)
print(best_p ,best_p)在jupyter中执行的过程和结果如下所示
八、明可夫斯基距离的应用
明可夫斯基距离可以表示多种距离计算方法。通过搜索不同的p值找到最适合当前问题的距离计算方法。
九、网格搜索超参数
网格搜索是一种系统搜索超参数的方法。通过遍历所有可能的超参数组合找到最佳组合。代码实现# 准备测试数据集
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
X_train,X_test,y_train,y_test train_test_split(X,y,test_size0.2,random_state666)from sklearn.neighbors import KNeighborsClassifierknn_clf KNeighborsClassifier(n_neighbors3)# 定义网格参数
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)]}
]
# 引入GridSearchCV 网格搜索
from sklearn.model_selection import GridSearchCV
grid_search GridSearchCV(knn_clf,param_grid)
grid_search GridSearchCV(knn_clf,param_grid,n_jobs-1,verbose2)
grid_search.fit(X_train,y_train)
# 查看相关参数
grid_search.best_estimator_
grid_search.best_score_
grid_search.best_params_执行结果如下 fit函数执行效果 best_estimator_结果 best_score_ 结果 best_params_ 超参数的结果