knn算法-超参数(六)

举报
咔吧咔吧 发表于 2020/11/12 17:25:37 2020/11/12
【摘要】 超参数 超参数的概念 超参数概念: 之前我们在使用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
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。