K近邻法--(KNN)算法的理解

一. 什么是K近邻法

       给定一个训练数据集,对于新的输入实例,找到与该实例最邻近的K个实例,这K个实例大多数属于的某个类,就是这个实例所属的类别。

       所以算法的前提是需要有一个已经被标记类别的训练数据集

二. KNN的三要素

   2.1 K值的选取

  (1)k值设置过少

      k值设置过小会降低分类精度;若选择比较小的k值,只有和输入实例比较接近的点才会对预测结果产生影响。若输入的实例附近恰好为噪声,分类就有可能出错,极有可能出现过拟合。

  (2)k值设置过大

        假如将k值设置为和样本的规模相同,那么实例永远被分到样本最多的类别。

    (3) 经验规则

        k值选取一个比较小的数值。通常选用交叉验证的方法选取最优k值。

   2.2距离的度量

       假设数据有n维,则距离的定义为:

            

        这里p>=1,当p=1时,称为曼哈顿距离;当p=2时,称为欧氏距离,一般使用欧氏距离。

   2.3 分类决策规则

      kNN的分类规则为少数服从多数的表决规则。即前k个距离最近的点中,样本类别归属最多的类别就是实例样本的类别。

 三. 应用sklearn对kNN算法的调用

import numpy as np
from sklearn import neighbors
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris =datasets.load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)
knn = neighbors.KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',  
           metric_params=None, n_jobs=1, n_neighbors=5, p=2,  
           weights='uniform')
knn.fit(X_train, y_train)
knn.score(X_test,y_test)            

     输出结果:0.966.....

   采用10折交叉验证

from sklearn.model_selection import cross_val_score
scores = cross_val_score(knn,iris.data, iris.target, cv=10)
scores.mean()

    输出结果:0.966....

   其中,KNeighborsClassifier方法中含有8个参数,以下两个最常用:

    n_neighbors:    k的取值,默认为5

    weights:确定近邻的权重,'uniform'权重一样,'distance'权重为距离的倒数。默认为'uniform'

四. 总结

  • kNN没有明显的学习过程,属于惰性学习方法
  • kNN适合于多分类问题,当维数比较大的时候,比SVM快
  • k值较小对局部数据敏感,抗噪能力差;k值过大,会因为数据集的不平衡而导致分类出错
  • 当数据量较大时,计算量较大,因为对于每个样本的分类都进行全局的计算
  • kNN适合于文本分类、模式识别、聚类分析、多分类领域

       



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值