开发者学堂课程【高校精品课-华东师范大学-人工智能基础:KNN 算法-数据集拆分】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/920/detail/15582
KNN 算法实现
内容介绍:
一、使用散点矩阵查看数据特征关系
二、建立 KNN 模型
一、使用散点矩阵查看数据特征关系
数据集已经准备好了,接下来使用散点矩阵查看数据特征关系。在数据分析中,同时观察一组变量的散点图是很有意义。这也被称为散点图矩阵。scatter plot matrix。
创建这样的图表工作量巨大,我们可以使用 scatter_matrix 函数,scatter_matrix 函数能从 data frame 创建散点图矩阵。
函数格式:
scatter_matrix(frame)alpha=0.5,c,figsize=None,ax=None,diagonal='hist
’
,marker='.',density_kwds=None,hist_kwds=None,range_padding=0.05,**kwds)
参数第一个 frame 是 pandas 的 data frame 对象,alpha 代表图像的透明度,一般取值零到一,figsize 是以英寸为单位的图像大小一般是以宽度、高度的形式来设置。
diagonal 只能在 hist 和 KDE 俩个当中选择一个。hist 表示直方图,KDE 表示核密度估计。这个参数是scatter_matrix 函数的关键参数
marker 是标记类型,例如圈点三角号的。对于刚才的数据结果,我们使用 scatter_matrix 显示训练集和测试集。
可以在上面程序的基础上添加如下语句
imPort pandas as pd
Iris_dataframe=pd.DataFrame(X_train.Columns=iris_dataset.feature_names)
#create a scatter matrix from the dataframe, color by y_train
Pd.plotting.scatter_matrix(iris_dataframe,c=y_train,figsize=(15,15),marker=
’
0
’
,hist_kwds=(
‘
bins
’
:20),s=60.alph=8)
首先,imPort pandas as pd使用pd的dataframe为X_train创建一个dataframe结构。Columns是刚才的feature_names。接下来使用 scatter matrix 创建一个散点矩阵图。
其中的 color 是 y_traintree。Figsize,marker都已经设置好了,alph是0.8,运行一下
散点矩阵图呈对称结构,除了对角线上的密度函数图之外,其他子图分别显示了不同特征列之间的关联关系,如petal length 和 petal width 之间近似成线性关系,说明这些特征关联性很强。相反,有些特征列之间的状态比较杂乱,基本无规律可循,说明特征间的关联性不强。例如,sepal length 和s epal width 之间就比较杂乱。因此我们在训练模型时要优先选择关联明显的特征对其进行学习。
二、建立 KNN 模型
接下来我们就开始建立KNN模型。在Python中实现KNN方法使用的是KNeighborsClassifier类。KNeighborsClassifier 类属于 scikit-learn 的 neighbors 包。
KNeighborsClassifier 使用很简单,核心操作包括三步:
(1)创建 KNeighborsClassifier 对象,并进行初始化。
基本格式:
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 整形可选值是五。他代表 KN 中的数量。weights 计算距离时使用的权重缺省值是uniform,表示平等权重,也可以取值 distance,表示按照距离的远近设置不同的权重。还可以自主设计加权方式。以函数形式来调用。参数 metric 是距离的计算缺省值是美式距离。当 P 等于二,m 等于美式距离时使用的是欧式距离。P 等于一,m 等于美式距离时使用的是曼哈顿距离。接下来是调用 fit 方法。
(2)调用fit方法,对数据集进行训练,
函数格式是fit(X,y),参数只有 X 和 Y。以 x 为训练集以 y 为测试集对模型进行训练。
(3)调用 predict 函数。对测试集进行预测
函数格式 Predict(x)即根据给定的数据预测其所属的类别标签
完成程序实现KNN对鸢尾花iris的数据集的分类
from sklearnl.neighbors import KNeighborsClassifier 包含进来。接下来把 train_test_split 包含进来。第一步,导入鸢尾花数据并查看数据特征。得到数据集结构150乘4,第二步,获取属性 iris.data。第三步,获取类别 iris.target。
接下来划分测试集和训练集,使用 train_test_split。测试的比例是20%,random_state 是零。接下来开始构建模型。KNN实现第一步分类器的初始化 KNN 等于 KNeighborsClassifier。所有的参数是默认。第二步,fit。对训练集进行训练。使用 iris_train_X 和 iris_train_y。即刚才拆分出来的训练集。接下来对测试集数据的标准化类型进行预测。Predict预测是刚才的测试集 test_X。
这里边暂时没有用到 test_y。接下来打印测试集的大小是30乘4。真实结果是2 1 0 2 0 2等30个。预测结果是2 1 0 2 0 2等。我们可以对比真实结果和预测结果,发现大部分是相同的,有个别不同。预测正确率 Knn.Score。Knn.Score显示预测的精确率,使用两个参数,一个是test_X一个是test_y。这里使用了测试集和测试集的标签,预测的准确率是0.96667。
从结果可以看出,拆分的测试集中。有30个样本,其中有一个判断错误,整体精确率约96.7%,精确度较高,主要原因在于数据集中的数据比较好,数据辨识度比较高,也可以将 KNN 用于图像的分类场合。通过对目标图像进行归类,能够解决类似图像识别、图像分类的问题。