云社区 博客 博客详情

knn算法-超参数(六)

咔吧咔吧 发表于 2020-11-12 17:25:37 2020-11-12
1
1

【摘要】 超参数 超参数的概念 超参数概念: 之前我们在使用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)

 

登录后可下载附件,请登录或者注册

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:huaweicloud.bbs@huawei.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
评论文章 //点赞 收藏 1
点赞
分享文章到微博
分享文章到朋友圈

上一篇:线性回归简介(一)

下一篇:线性回归简介(一)

评论 (1)


望闻问切ice

1楼2020-11-23 14:44:56

登录后可评论,请 登录注册

评论