雲計算

机器学习算法—KNN算法原理及阿里云PAI平台算法模块参数说明

概述:

KNN算法一般也会经常被称为K邻近算法,其核心思想是根据训练集中的样本分类计算测试集中样本与训练集中所有样本的距离,根据所设定的K值选取前K个测试样本与训练样本最近的结果,结果中大多数训练样本所处在的类别即是本测试样本的类别。因训练样本的分类结果为已知因此KNN算法属于有监督学习算法。

算法原理:

1、以下图样本散点图展示训练集的整体分布情况
image.png
从散点图中可以发现训练集的数据分类数量为3个类别,分别为蓝色类别、红色类别和黄色类别,训练样本总数为15个。
2、导入第一个测试样本
image.png
3、需要根据已知的训练样本分类结果判断测试样本的类别,因此计算测试样本与所有训练样本的距离
image.png
因训练样本数量为15,所以计算完成的距离参数为15个。
4、K值是KNN算法中唯一需要设定的参数,假定K值为3则在15个距离参数中选择最近的3个
image.png
统计3个距离中大部分训练样本所处的分类即为本测试样本的分类,本次分类中距离最近的3个训练样本有2个属于红色类别,因此本测试样本被分类为红色
image.png
5、对下一个测试样本以相同方式进行距离计算和分类
image.png












注意事项:

1、K的取值尽量为奇数以确保距离计算结果必定会有一个K个距离中包括较多的类别,比如例子中取3,则3个中有2个训练样本为红色类别以此判断测试样本属于红色类别。如K取4产生下图中的情况
image.png
4个距离参数中,2个训练样本为红色类别,2个训练样本为蓝色类别,会对预测产生不利效果
2、K取值过小时,较容易受噪声影响而导致误分类
image.png
如图中黄色类别中有一个异常数据,如果K取值为1,则测试样本因与此异常数据距离最近,而被分类为黄色类别,从散点图中可以看到,如K为3以上,则应被分类为红色类别,因此K取值过小容易导致由过拟合而引起的误分类。
3、K取值过大时,较容易受距离较远训练样本影响而导致由欠拟合产生的误分类,极端情况下,本文的例子中如果K取值为15,则代表蓝、黄、红,哪个类别的点多测试样本就被分类为哪个样本,因此K不能等于N。





算法的使用场景:

1、适合用于类别间差异较大,同类别间数据差异较小的场景
2、对于类别间的界限不清晰的场景,效果好于基于线性分类的逻辑回归
3、单个测试样本计算都需要计算与训练集中所有训练样本的距离,在数据量较大时会占用非常多的计算力并增加计算时间
4、对于各个类别中数据数量差异较大的场景效果较差,特别在K取值又较大时,占数量优势的类别对于结果的影响非常明显


阿里云PAI平台算法模块及参数设置说明:

image.png
trainTableName:训练表的表名
trainFeatureColNames:训练表中的特征列名,即训练表是根据哪些特征来进行分类的
trainLabelColName:训练表中标签列的列名,即训练表中的分类结果
trainTablePartitions:训练表中指定哪些分区
predictTableName:预测表的表名
outputTableName:输出表的表名
predictFeatureColNames:预测表中特征列名 ,默认与trainFeatureColNames相同,如果数据预处理做得较好,训练集和测试集中的特征列名本来就是应该相同的
predictTablePartitions:预测表中指定哪些分区参与预测,默认为所有partitions
appendColNames:输出表中附加预测表的列名,默认与predictFeatureColNames相同
outputTablePartition:输出表分区,默认输出表不分区
K:是整个算法中唯一需要选择的参数,在模块中为可选项因为K的取值模块中默认为100,最适合的K值需要根据预测结果来进行确定
enableSparse:输入表数据是否为稀疏格式
itemDelimiter:当输入表数据为稀疏格式时,kv间的分割符,默认值为空格
kvDelimiter:当输入表数据为稀疏格式时,key和value的分割符,默认值冒号
coreNum:节点个数,与参数memSizePerCore配对使用,默认自动计算
memSizePerCore :单个节点内存大小,单位为MB 正整数,默认自动计算
lifecycle:指定输出表的生命周期
















Leave a Reply

Your email address will not be published. Required fields are marked *