DBSCAN(Density Based Spatial Clustering of Applications with Noise)是一种基于数据密度的无监督聚类算法。在聚类空间的特定区域内,使用指定的半径阈值和数量阈值,筛选核心点及其领域点。通过密度可达及密度相连理论,实现数据点聚类。
使用限制
- 仅支持在PAI-Studio上使用。
- DBSCAN组件的输入表中,第一列为样本ID的列名必须是mid,该列取值从0开始且连续。从第二列开始(向量各维度的值),列名必须是f1、f2。
DBSCAN
PAI-Studio支持通过可视化或PAI命令方式,配置DBSCAN组件的参数:
- 可视化方式
页签 参数 描述 参数设置 输入数据类型 支持邻接表和向量类型。 数据向量的维度 输入数据的向量维度。如果输入数据类型为向量,则该参数必选。 说明 如果输入表的格式为多列,则数据向量的维度必须与选择数据所在列的数量一致。邻域点的距离阈值 如果两点之间的距离小于该阈值,则互为邻域点。如果输入数据类型为向量,则该参数必选。 核心对象密度阈值 如果某点邻域内的点数量大于该阈值,则该点为核心对象。 输入表的格式 如果输入数据类型为向量,则该参数必选。系统支持以下格式: - 多列:使用多列表示向量。
- 两列:使用一列表示向量,各维度通过英文逗号(,)分隔。
字段信息 选择数据所在列 如果输入表的格式为多列,则该参数必选。 执行调优 Server机器数量 Server服务器的数量。 Worker机器数量 Worker服务器的数量。 Server每台机器的CPU数 每台Server服务器的CPU数量。 Worker每台机器的CPU数 每台Worker服务器的CPU数量。 Worker每台机器内存数 每台Worker服务器的内存,单位为MB。 Server每台机器内存数 每台Server服务器的内存,单位为MB。 - PAI命令方式
DBSCAN算法支持以邻接表或向量作为输入数据,且支持以多列或两列的格式表示向量。具体的PAI命令如下:
- 以邻接表作为输入
pai -name ps_dbscan -DinputTable=hxdb_neighbor_data_order -DinputType="1" -DoutputTable="hxtmp2" -DminPoints="4" -DserverNum="1" -DserverCpu="300" -DserverMemory="3000" -DworkerNum="2" -DworkerCpu="800" -DworkerMemory="2000"
- 以多列格式的向量作为输入
pai -name ps_dbscan -DinputTable=hxdb_multicols_data -DinputType="0" -DoutputTable="hxtmp" -DdataType="DenseMultiCols" -DpointDim="12" -Deps="4" -DminPoints="20" -DselectedColIds="all" -DserverNum="2" -DserverCpu="300" -DserverMemory="3000" -DworkerNum="10" -DworkerCpu="800" -DworkerMemory="2000"
- 以两列格式的向量作为输入
pai -name ps_dbscan -DinputTable="hxdb_sample_60w" -DinputType="0" -DoutputTable="hxtmp1" -DdataType="Dense2Cols" -DpointDim="2" -Deps="0.01" -DminPoints="10" -DselectedColIds="all" -DserverNum="2" -DserverCpu="300" -DserverMemory="3000" -DworkerNum="10" -DworkerCpu="800" -DworkerMemory="2000"
参数 是否必选 描述 默认值 inputTable 是 输入表的名称。 无 outputTable 是 输出表的名称。 无 inputType 否 输入数据的类型。支持以下类型: - 0:表示以向量形式输入。
- 1:表示以邻接表形式输入。
0 pointDim 否 输入数据的向量维度。如果inputType为0,则该参数必选。 说明 如果dataType为DenseMultiCols,则pointDim必须与selectedColIds的数量一致。10 eps 否 邻域点的距离阈值。如果两点之间的距离小于该阈值,则互为邻域点。如果inputType为0,则该参数必选。 1.0 minPoints 否 核心对象的密度阈值。如果某点邻域内的点数量大于该阈值,则该点为核心对象。 10 dataType 否 输入表的格式。如果inputType为0,则该参数必选。系统支持以下格式: - DenseMultiCols:使用多列表示向量。
- Dense2Cols:使用一列表示向量,各维度通过英文逗号(,)分隔。
Dense2Cols selectedColIds 否 数据所在的列。如果dataType为DenseMultiCols,则该参数必选。取值格式为all或0,1,3。 说明 ID列必须位于首位。all serverNum 是 Server服务器的数量。 5 workerNum 是 Worker服务器的数量。 30 serverCpu 是 每台Server服务器的CPU数量。 8 workerCpu 是 每台Worker服务器的CPU数量。 8 workerMemory 是 每台Worker服务器的内存,单位为MB。 10000 serverMemory 是 每台Server服务器的内存,单位为MB。 10000 - 以邻接表作为输入
输入数据说明
DBSCAN算法支持以邻接表或向量作为输入数据,且支持以多列或两列的格式表示向量。输入数据的示例如下:
- 邻接表
+-------------+------------+ | mid(bigint) | f1(string) | +-------------+------------+ | 0 | 2,3,0 | | 1 | 1,2,3,4 | | 2 | 2,1,5 | | 3 | 1,3 | | 4 | 1,4 | | 5 | 2,5,1,0 | +-------------+------------+
说明 某点的邻域点必须包含该点本身。例如,0号点的邻域点必须包含0点。 - 多列格式的向量(以二维向量为例)
第一列为样本ID。第二列和第三列分别为向量各维度的值。+--------------+------------+------------+ | mid(bigint) | f1(double) | f2(double) | +--------------+------------+------------+ | 0 | 0.0 | 0.3 | | 1 | 0.0 | 1.0 | | 2 | 0.0 | 0.1 | | 3 | 1.0 | 0.0 | | 4 | 0.0 | 0.2 | | 5 | 1.0 | 0.2 | +--------------+------------+------------+
- 两列格式的向量(以二维向量为例)
第一列为样本ID。第二列为向量各维度的值,通过英文逗号(,)分隔。+--------------+------------+ | mid(bigint) | f1(string) | +--------------+------------+ | 0 | 0.0,0.3 | | 1 | 0.0,1.0 | | 2 | 0.0,0.1 | | 3 | 1.0,0.0 | | 4 | 0.0,0.2 | | 5 | 1.0,0.2 | +--------------+------------+
说明 通过数据预处理下的增加序号列组件,可以为每条样本增加ID列。