1.K-近邻算法的原理

给定一个样本,k-最临近分类法搜索模式空间,找出最接近未知样本的k个训练样本;通过计算每个训练数据到待分类元组的距离,取和待分类元组距离最近的K个训练数据,K个数据中哪个类别的训练数据占多数,则待分类元组就属于哪个类别。

如图:这里有1绿色的点需要需要进行分类,当K=3时,红色三角形的个数为2,蓝色正方形的个数为1,所以被分为三角形;而当K=5时,红色三角形的个数为2,蓝色正方形的个数为3,所以被分为正方形。由此可见,K值的大小对分类的结果起到至关重要的作用。
在这里插入图片描述

2.KNN的要点

1.计算已知类别数据集中的每个点与当前点之间的距离:

  • 数据需要进行归一化处理
  • 可以采用欧式距离,也可以采用曼哈顿距离。
    在这里插入图片描述

2.从最近邻居列表中决定分类的结果

  • 选出k个最近的邻居中的多数票的类标号
  • 可以根据距离为每一个投票增加权重

3.K值的选取

  • K值太小容易受噪声数据影响发生过拟合
  • 可通过交叉验证的方法来选取最优的k值

4.KNN的不足

  • 当样本不平衡时,一类样本数量很大,一类样本数量很少时,可能导致判断某个样本时,虽然离类样本少的距离小,但大容量类的样本占据较大的数量从而导致分类出错。
  • 计算量较大,需要计算待分类点到全部样本点的距离。

2.sklearn中的API

K 值是通过 n_neighbors 的参数来调节的,默认为5。
在这里插入图片描述
主要参数介绍

class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights=’uniform’, 
											algorithm=’auto’, leaf_size=30, 
											p=2, metric=’minkowski’, 
											metric_params=None, 
											n_jobs=None, **kwargs)
"""
n_neighbors:K值的选择,默认为5
weight:节点权重的选择,默认是uniform,参数可以是uniform、distance,也可以是用户自己定义的函数。uniform是均等的权重,就说所有的邻近点的权重都是相等的。distance是不均等的权重,距离近的点比距离远的点的影响大。用户自定义的函数,接收距离的数组,返回一组维数相同的权重。
algorithm:快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定搜索算法ball_tree、kd_tree、brute方法进行搜索
leaf_size:构造树的大小,默认是30,这个是构造的kd树和ball树的大小。这个值的设置会影响树构建的速度和搜索速度,同样也影响着存储树所需的内存大小。需要根据问题的性质选择最优的大小。
metric: 字符串或可调用,默认为’minkowski’,用于距离度量,默认度量是minkowski,也就是p=2的欧氏距离(欧几里德度量)。 
"""

KNN案例

本文为sklearn自带数据集,红酒分类案例,在处理以距离为分类标准的方法时,一般都需要用数据归一化处理,因为这里的数据已经进行了归一化,我这就进行了省略。

#KNN分红酒
import numpy as np
from sklearn.datasets.base import load_wine
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

#导入数据集划分训练集和测试集
data_wine=load_wine()
print(data_wine["data"].shape)
x_train,x_test,y_train,y_test=train_test_split(data_wine["data"],data_wine["target"],test_size=0.3)
#建立KNN模型
KNN=KNeighborsClassifier(n_neighbors=5)
KNN.fit(x_train,y_train)
print("KNN的训练集的准确度",KNN.score(x_train,y_train))
y=KNN.predict(x_test)
print("测试集的准确度",accuracy_score(y,y_test))

在这里插入图片描述

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐