knn算法-超参数(六)
超参数
超参数的概念
超参数概念:
之前我们在使用knn算法时,一直存在一个问题,k的取值由我们自己随意定义,但这个值什么传什么值才是最优的呢,这样的问题在机器学习中就是超参数 问 题。
定义:超参数就是在运行机器学习算法之前需要指定值的参数
概念对比:
超参数和模型参数
超参数:在算法运行前需要指定的参数
模型参数:算法过程中学习的参数
knn算法中没有模型参数
knn中的k就是典型的超参数
寻找最优的超参数
领域知识:在不同的知识领域中,最优的超参数值不一样
经验数值:在处理问题时,存在一些较好的经验数值,可以借鉴。通常机器学习中会对超参数设置默认数值,这个值即为经验数值。sklearn中knn算法中的k值默认为5。
实验搜索:在处理具体问题中,经验数值不适用,则需要使用此项操作,来得到不同的超参数。
代码实现:
import numpy as np import matplotlib import matplotlib.pyplot as plt 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) knn_classifier = KNeighborsClassifier(n_neighbors=6) knn_classifier.fit(X_train,y_train) #得到评分数据 knn_classifier.score(X_test,y_test)
寻找最优的k值:
best_score = 0.0best_k = -1for k in range(1,11): knn_classifier = KNeighborsClassifier(n_neighbors=k) knn_classifier.fit(X_train,y_train) score = knn_classifier.score(X_test,y_test) print("k={}, score={}".format(k, score)) if score > best_score: best_k = k best_score = score print("best_k =",best_k) print("best_score =",best_score)
k-近邻算法判断结果的两种方式:
方式1:
距离绿色点最近的三个点中,两个点均为蓝色,则结果绿色点预测为蓝色。
但是此时存在问题,绿色点距离红色点比蓝色点近,所以应将距离也作为判定因素考虑进去,这就是另外一种k-近邻算法的计算方式
方式2:
考虑距离:
一般将距离的倒数作为判定依据:红色为1,蓝色为:1/3+1/4=7/12,则判断结果为红色
方式2的优点:解决平票问题
当绿色点的附近三个点均为不同颜色的点时,则为平票
此时考虑距离就可以很好的解决最终结果的选择问题。
考虑距离的代码实现:
best_score = 0.0 best_k = -1 for method in ["uniform","distance"]: for k in range(1,11): knn_classifier = KNeighborsClassifier(n_neighbors=k,weights=method) knn_classifier.fit(X_train,y_train) score = knn_classifier.score(X_test,y_test) if score > best_score: best_k = k best_score = score best_method = method print("best_method =",best_method) print("best_k =",best_k) print("best_score =",best_score)
- 点赞
- 收藏
- 关注作者
评论(0)