knn算法-超参数(六)
【摘要】 超参数 超参数的概念 超参数概念: 之前我们在使用knn算法时,一直存在一个问题,k的取值由我们自己随意定义,但这个值什么传什么值才是最优的呢,这样的问题在机器学习中就是超参数 问 题。 定义:超参数就是在运行机器学习算法之前需要指定值的参数 概念对比: 超参数和模型参数 ...
超参数
超参数的概念
超参数概念:
之前我们在使用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)
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
望闻问切ice2020/11/23 06:44:561楼编辑删除举报