K近邻算法进行分类的原理是针对预测表的每行数据,从训练表中选择与其距离最近的K条记录,将这K条记录中类别数量最多的类,作为该行的类别。
组件配置
PAI-Designer(原PAI-Studio)支持通过可视化或PAI命令方式,配置K近邻算法组件的参数:
- 可视化方式
页签 参数 描述 字段设置 选择训练表特征列 用于训练的特征列。 选择训练表的标签列 训练的目标列。 选择预测表特征列 如果未配置该参数,则表示其与训练表特征列相同。 产出表附加ID列 用于标识该列的身份,从而获得某列对应的预测值。系统默认使用预测表特征列,作为附加ID列。 输入表数据是稀疏格式 使用KV格式表示稀疏数据。 kv间的分隔符 默认为英文逗号(,)。 key和value的分隔符 默认为英文冒号(:)。 参数设置 近邻个数 默认值为100。 执行调优 核心数 默认系统自动分配。 内存数 默认系统自动分配。 - PAI命令方式
PAI -name knn -DtrainTableName=pai_knn_test_input -DtrainFeatureColNames=f0,f1 -DtrainLabelColName=class -DpredictTableName=pai_knn_test_input -DpredictFeatureColNames=f0,f1 -DoutputTableName=pai_knn_test_output -Dk=2;
参数 是否必选 描述 默认值 trainTableName 是 训练表的表名。 无 trainFeatureColNames 是 训练表的特征列名。 无 trainLabelColName 是 训练表的标签列名。 无 trainTablePartitions 否 训练表中,参与训练的分区。 所有分区 predictTableName 是 预测表的表名。 无 outputTableName 是 输出表的表名。 无 predictFeatureColNames 否 预测表的特征列名。 与trainFeatureColNames相同 predictTablePartitions 否 预测表中,参与预测的分区。 所有分区 appendColNames 否 输出表中,附加预测表的列名。 与predictFeatureColNames相同 outputTablePartition 否 输出表的分区。 全表 k 否 最近邻的数量。取值范围为1~1000。 100 enableSparse 否 输入表数据是否为稀疏格式。取值范围为{true,false}。 false itemDelimiter 否 如果输入表数据为稀疏格式,则KV对之间的分隔符。 英文逗号(,) kvDelimiter 否 如果输入表数据为稀疏格式,则key和value之间的分隔符。 英文冒号(:) coreNum 否 节点数量。与memSizePerCore搭配使用,取值范围为1~20000。 系统自动计算 memSizePerCore 否 单个节点的内存,取值范围为1024 MB~64*1024 MB。 系统自动计算 lifecycle 否 输出表的生命周期。 无
示例
- 生成训练数据。
create table pai_knn_test_input as select * from ( select 1 as f0,2 as f1, 'good' as class from dual union all select 1 as f0,3 as f1, 'good' as class from dual union all select 1 as f0,4 as f1, 'bad' as class from dual union all select 0 as f0,3 as f1, 'good' as class from dual union all select 0 as f0,4 as f1, 'bad' as class from dual )tmp;
- 使用PAI命令,提交K近邻算法组件参数。
pai -name knn -DtrainTableName=pai_knn_test_input -DtrainFeatureColNames=f0,f1 -DtrainLabelColName=class -DpredictTableName=pai_knn_test_input -DpredictFeatureColNames=f0,f1 -DoutputTableName=pai_knn_test_output -Dk=2;
- 查看训练结果。
其中:
- f0和f1表示结果附件列。
- prediction_result表示分类结果。
- prediction_score表示分类结果对应的概率。
- prediction_detail表示最近的K个分类及其对应的概率。