购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 k近邻算法应用
——鸢尾花的分类

Iris鸢尾花数据集(iris_training.csv)是经常用于机器学习和数据分析的一个经典数据集。该数据集中的数据可分为3类(iris-setosa,iris-versicolour,iris-virginica),共150条记录,每类各50个数据,每条记录有4个属性:花萼长度(Sepal Length)、花萼宽度(Sepal Width)、花瓣长度(Petal Length)、花瓣宽度(Petal Width),可以通过这4个特征预测鸢尾花属于哪一类。标签0、1、2分别表示山鸢尾(Setosa)、变色鸢尾(Versicolor)、维吉尼亚鸢尾(Virginical)。

通过以下代码可查看鸢尾花前5条数据:

输出前4条数据如下:

我们可将鸢尾花数据集分为两部分:iris_training.csv和iris_test.csv,其中iris_training.csv为训练数据集,共120条样本数据;iris_test.csv为测试数据集,共30条数据。

任意选择其中两维数据,得到鸢尾花数据散点图如图2-7所示。

图2-7 鸢尾花数据散点图

程序运行结果如下:

此外,我们还可以直接调用系统提供的KNeighborsClassifier实现分类,sklearn库提供k近邻类KNeighborsClassifier原型如下:

主要参数说明如下:

●weights:权重函数。可能的取值为:uniform、distance、callable,其中,uniform表示每个邻域中的所有点的权值一样;distance表示权重为该样本点与其距离的倒数,距离越近,权值越大;callable为用户定义的函数,该函数为距离数组。默认值为uniform。

●algorithm:计算最近邻居的算法,可选参数为:ball_tree、kd_tree、brute、auto,其中,brute表示使用暴力搜索;auto表示根据传递给fit方法的值来选择最合适的算法。默认参数为auto。

●leaf_size:叶子结点的数量,当algorithm取值为ball_tree或kd_tree时有效。默认取值为30。

●p:闵可夫斯基空间距离的超参数取值。当p=1时,表示使用曼哈顿距离;当p=2时,表示使用欧氏距离。默认取值为2。

常用属性:

常用方法:

●fit(X,y):训练模型函数,使用X作为训练数据,y作为标签训练模型参数。

●kneighbors([X,n_neighbors,return_distance]):查找样本点的K个邻居。返回值为每个样本点的邻居索引及距离。

●predict(X):预测样本X的类别(标签)。

●predict_proba(X):返回测试数据X的概率值。

●score(X,y[,sample_weight]):给定测试数据X和标签y,返回预测的平均准确率。

程序运行结果如下:

k近邻算法除了可用于解决分类问题,还可用于回归分析。k近邻是最早被用于回归分析的算法,其原理与k近邻解决分类问题类似,它是通过一种距离度量寻找与待预测点相近的k个点,根据这k个点进行回归预测,待预测点的标签是由这k个点标签的平均值决定。sklearn库同样也提供了用于回归分析的KNeighborsRegressor类。

提示

在使用kNN算法时,需要不断对近邻样本进行搜索,最直接的方法就是暴力搜索,这需要计算输入样本与每个训练样本之间的距离,当训练数据集很大时,计算工作量也是非常大的,采用KD树算法可提高kNN算法的搜索效率,在最好的情况下,KD树发现最近邻的时间复杂度为 O (log 2 n )。 uI7vJOQAMIK4enmahpyqCkTbL9WTJYwTPkyaPyBth498Da+EtsCDIeyIr/ylGkbM

点击中间区域
呼出菜单
上一章
目录
下一章
×