k-Nearest-Neighbor Classifier with sklearn

本文介绍了如何使用Python的sklearn库实现k-NN算法,包括邻居分类器和半径邻居分类器,并通过Iris数据集进行示例。同时,文章提供了确定最佳k值的方法和一个实践练习。
摘要由CSDN通过智能技术生成

介绍

sklearn 文本与动物

K-Nearest-Neighbor 分类器 (kNN) 的基本概念可以在我们机器学习教程的k-Nearest-Neighbor Classifier一章中找到。在本章中,我们还展示了用 Python 编写的简单函数来演示基本原理。

尽管这些函数显示出令人印象深刻的结果,但我们建议不要使用这些函数,而是建议使用该sklearn模块的功能。我们sklearn在前面的章节中已经使用过。

将 sklearn 用于 kNN

邻居sklearn模块的一个包,它为最近邻分类器提供了无监督和监督学习的功能。

sklearn.neighbors 中的类可以处理 Numpy 数组和 scipy.sparse 矩阵作为输入。对于密集矩阵,支持大量可能的距离度量。对于稀疏矩阵,搜索支持任意 Minkowski 度量。

scikit-learn实现了两种不同的最近邻分类器:

邻居分类器

基于必须分类的样本的 k 个最近邻。数字“k”是用户指定的整数值。这是两种算法中最常用的分类器。

半径邻居分类器

基于每个必须分类的样本在固定半径 r 内的邻居数。'r' 是用户指定的浮点值。这种分类器不太常用。

邻居分类器

我们将人工创建一个包含三个类的数据集,以测试来自“sklearn.neighbors”的 k 最近邻分类器“KNeighborsClassifier”。我们在机器学习的数据集创建一章中对此进行了描述

from  sklearn.datasets  import  make_blobs 
import  matplotlib.pyplot  as  plt 
import  numpy  as  np

中心 =  [[ 2 , 3 ], [ 5 , 5 ], [ 1 , 8 ]] 
n_classes  =  LEN (中心)
的数据, 标签 =  make_blobs (N_SAMPLES次= 150 , 
                          中心= NP 阵列(中心),
                          random_state = 1 )

让我们想象一下我们创建的内容:

导入 matplotlib.pyplot 作为 plt

颜色 = '绿色' '红色' '蓝色' )
n_classes  =  3

图,  ax  =  plt 副区()
 n_class  范围(0 , n_classes ):
    斧分散(数据[标签== n_class , 0 ], 数据[标签== n_class , 1 ], 
               c =颜色[ n_class ], s = 10 , 标签= str (n_class ))



斧头图例( loc = '右上角' );

我们现在必须在测试和训练集中拆分数据。

from  sklearn.model_selection  import  train_test_split 
res  =  train_test_split ( data ,  labels ,  
                       train_size = 0.8 , 
                       test_size = 0.2 , 
                       random_state = 1 )

train_data ,  test_data ,  train_labels ,  test_labels  =  res 

我们现在准备好使用以下内容执行分类kNeighborsClassifier

# 创建并拟合最近邻分类器
from  sklearn.neighbors  import  KNeighborsClassifier 
knn  =  KNeighborsClassifier () 
knn . 适合(train_data , train_labels ) 

预测 =  knn 预测(test_data )
打印“来自分类器的预测:” 打印(预测)
打印“目标值:” 打印(test_labels )

输出:

来自分类器的预测:
[2 2 2 0 0 1 1 2 2 1 0 1 0 0 2 0 0 0 1 0 0 1 1 2 0 0 0 1 2 1]
目标值:
[2 2 2 0 0 1 1 2 2 1 0 1 0 0 2 0 0 0 1 0 0 1 1 2 0 0 0 1 2 1]

为了评估结果,我们将使用accuracy_score来自模块的sklearn.metrics. 为了了解accuracy_score工作原理,我们将使用一个带有伪预测和标签的简单示例:

 sklearn.metrics 导入 accuracy_score 
example_predictions  =  [ 0 , 2 , 1 , 3 , 2 , 0 , 1 ] 
example_labels       =  [ 0 , 1 , 2 , 3 , 2 , 1 , 1 ]
打印(accuracy_score (example_predictions , example_labels ))

输出:

0.5714285714285714

返回值对应于正确分类和预测总数的商。如果您只关心正确分类项目的数量,您可以将参数设置normalizeFalse。默认值为True

打印(accuracy_score (example_predictions , 
                     example_labels ,
                     normalize = False ))

输出:

4

现在我们准备评估我们之前的分类示例的结果:

打印(accuracy_score (预测, test_labels ))

输出:

1.0

您可能已经注意到,我们在前面的示例中通过不带任何参数调用它来实例化 k 最近邻分类器,即KNeighborsClassifier()。下面,我们用一些可能的关键字参数实例化它:

knn  =  KNeighborsClassifier ( algorithm = 'auto' ,  
                           Leaf_size = 30 ,  
                           metric = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值