标注 | 说明 | 数据类型 |
输入要素 | 将用于构建空间异常值检测模型的点要素。 将根据每个点的局部异常值因子将其分类为异常值或正常值。 | Feature Layer |
输出要素 |
输出要素类,其中包含每个输入要素的局部异常值因子以及该点是否为空间异常值的指示符。 | Feature Class |
相邻要素的数目 (可选) | 将用于检测每个输入点的空间异常值的相邻要素数。 对于局部异常值检测,该值必须至少为 2,并且邻域内的所有要素都将用作相邻要素。 如果未指定任何值,则将在运行时估计一个值,并将其显示为地理处理消息。 对于全局异常值检测,将仅使用邻域中最远的相邻要素,默认为 1(最近的相邻要素)。 例如,值为 3 表示使用到每个点的第三个最近相邻要素的距离来检测全局异常值。 | Long |
视为异常值的位置的百分比 (可选) | 通过定义局部异常值因子的阈值,将标识为空间异常值的位置的百分比。 如果未指定任何值,则将在运行时估计一个值,并将其显示为地理处理消息。 最多 50% 的要素可以被识别为空间异常值。 | Double |
输出预测栅格 (可选) | 输出栅格,其中包含每个像元处的局部异常值因子,将基于输入要素的空间分布进行计算。 仅当具有 Desktop Advanced 许可时,此参数才可用。 | Raster Dataset |
异常值类型 (可选) | 为检测到的异常值指定类型。 全局异常值是指远离要素类中所有其他点的点。 局部异常值是指该点距离其相邻点的距离,比周围区域中预期的点密度的距离大。
| String |
检测灵敏度 (可选) | 指定用于检测全局异常值的灵敏度。 灵敏度越高,将被检测为异常值的点就越多。 灵敏度值将决定阈值,任何相邻距离大于该阈值的点都将被识别为全局异常值。 阈值使用箱形图规则确定的,其中高灵敏度的阈值为第三个四分位数以上的 1 个四分位距。 对于中灵敏度,阈值为第三个四分位数以上的 1.5 个四分位距。 对于低灵敏度,阈值为第三个四分位数以上的 2 个四分位距。
| String |
仅保留空间异常值 (可选) | 指定输出要素是否包含所有输入要素还是仅包含标识为空间异常值的要素。
| Boolean |
摘要
识别点要素中的全局或局部空间异常值。
全局异常值是指远离要素类中所有其他点的点。 通过检查每个点与其最近相邻要素(默认情况下为最近相邻要素)之间的距离以及检测距离较大的点,可以检测全局异常值。
局部异常值是指该点距离其相邻点的距离,比周围区域中预期的点密度的距离大。 通过计算每个要素的局部异常值因子 (LOF) 来检测局部异常值。 LOF 是一种测量,用于描述某个位置与其局部相邻要素相比的隔离程度。 LOF 值越高,表示隔离程度越高。 该工具还可用于生成栅格预测曲面,该曲面可用于估计是否将基于数据的空间分布将新要素分类为异常值。
插图
使用情况
该工具用于将输入要素参数中提供的点标识为空间异常值或空间正常值。 仅保留空间异常值参数可用于仅返回标识为异常值的点。
该工具将在相邻要素的数目参数中指定的每个要素周围使用局部邻域。 对于局部异常值检测,使用邻域内的所有点,默认值由工具在运行时估计。 对于全局异常值检测,仅使用邻域中最远的相邻要素,默认为 1(最近的相邻要素)。 例如,值为 3 表示使用到每个点的第三个最近相邻要素的距离来检测全局异常值。
对于局部异常值检测,视为异常值的位置的百分比参数用于为 LOF 建立阈值,以将每个点要素指定为异常值或正常值。
注:
对于视为异常值的位置的百分比参数,值的微小差异可能会导致指定为异常值的输出要素计数相同。 当要素的空间分布相似性导致多个要素的 LOF 值相同时,将会出现这种情况。
输出图层包括两个图表。 第一个是条形图,可显示异常值与非异常值。 第二个是直方图。 对于局部异常值检测,直方图可显示所有点要素的 LOF 值分布,以及用于确定某个要素是异常值还是正常值的 LOF 阈值。 对于全局异常值检测,直方图可显示相邻距离的分布和相关阈值。
如果输入要素具有 z 坐标,则该工具将通过检测 3D 空间中的空间异常值来支持数据的 3D 特性。 添加到场景视图后,输出要素将以 3D 方式显示,以可视化 3D 空间异常值。 如果未在垂直坐标系中定义 z 坐标的单位(例如,米),则假设该单位与 x 和 y 的坐标相同。
输出预测栅格参数为可选输出,所示值可用于确定每个跨研究区域连续表面的像元是否为异常值。 对于局部异常值检测,栅格包含为像元计算的 LOF 值。 对于全局异常值检测,栅格包含到最近相邻要素的距离。 输出可用于确定未来的检测值是否为异常值,而无需再重新计算新点的值。 只能为 2D 输入要素创建此输出。
注:
即使点与栅格的像元中心重合,这些点的相邻要素距离和 LOF 值也将与每个点下的栅格像元的值不匹配。 这是因为要素并未使用自身作为邻域,但是栅格像元确实将该要素用作相邻要素,因此每次计算都将使用不同的邻域并产生不同的值。
有关局部异常值因子和优化参数的详细信息,请参阅以下参考资料:
- Breunig, M. M., Kriegel, H. P., Ng, R. T., Sander, J. (2000). "LOF: identifying density-based local outliers." Proceedings of the 2000 ACM SIGMOD international conference on Management of data. (pp. 93-104).
- Xu, Z., Kakde, D., Chaudhuri, A. (2019). "Automatic Hyperparameter Tuning Method for Local Outlier Factor, with Applications to Anomaly Detection." 2019 IEEE International Conference on Big Data. (pp. 4201-4207).
参数
arcpy.stats.SpatialOutlierDetection(in_features, output_features, {n_neighbors}, {percent_outlier}, {output_raster}, {outlier_type}, {sensitivity}, {keep_type})
名称 | 说明 | 数据类型 |
in_features | 将用于构建空间异常值检测模型的点要素。 将根据每个点的局部异常值因子将其分类为异常值或正常值。 | Feature Layer |
output_features |
输出要素类,其中包含每个输入要素的局部异常值因子以及该点是否为空间异常值的指示符。 | Feature Class |
n_neighbors (可选) | 将用于检测每个输入点的空间异常值的相邻要素数。 对于局部异常值检测,该值必须至少为 2,并且邻域内的所有要素都将用作相邻要素。 如果未指定任何值,则将在运行时估计一个值,并将其显示为地理处理消息。 对于全局异常值检测,将仅使用邻域中最远的相邻要素,默认为 1(最近的相邻要素)。 例如,值为 3 表示使用到每个点的第三个最近相邻要素的距离来检测全局异常值。 | Long |
percent_outlier (可选) | 通过定义局部异常值因子的阈值,将标识为空间异常值的位置的百分比。 如果未指定任何值,则将在运行时估计一个值,并将其显示为地理处理消息。 最多 50% 的要素可以被识别为空间异常值。 | Double |
output_raster (可选) | 输出栅格,其中包含每个像元处的局部异常值因子,将基于输入要素的空间分布进行计算。 仅当具有 Desktop Advanced 许可时,此参数才可用。 | Raster Dataset |
outlier_type (可选) | 为检测到的异常值指定类型。 全局异常值是指远离要素类中所有其他点的点。 局部异常值是指该点距离其相邻点的距离,比周围区域中预期的点密度的距离大。
| String |
sensitivity (可选) | 指定用于检测全局异常值的灵敏度。 灵敏度越高,将被检测为异常值的点就越多。 灵敏度值将决定阈值,任何相邻距离大于该阈值的点都将被识别为全局异常值。 阈值使用箱形图规则确定的,其中高灵敏度的阈值为第三个四分位数以上的 1 个四分位距。 对于中灵敏度,阈值为第三个四分位数以上的 1.5 个四分位距。 对于低灵敏度,阈值为第三个四分位数以上的 2 个四分位距。
| String |
keep_type (可选) | 指定输出要素是否包含所有输入要素还是仅包含标识为空间异常值的要素。
| Boolean |
代码示例
以下 Python 窗口脚本演示了如何使用 SpatialOutlierDetection 函数。
arcpy.stats.SpatialOutlierDetection("Transaction_Locations",
"Transactions_SpatialOutliers", 20, 5,
"Transactions_OutliersPredictionSurface")
以下独立 Python 脚本演示了如何使用 SpatialOutlierDetection 函数。
# Import system modules.
import arcpy
try:
# Set the workspace and input features.
arcpy.env.workspace = 'C:\\SpatialOutlierDetection\\MyData.gdb'
inputFeatures = "PM25_AirQualityStations"
# Set the name of the output features
outputFeatures = "AirQualityStations_SpatialOutliers"
# Set the number of neighbors
numberNeighbors = 8
# Set the percentage of locations considered outliers
pcntLocationsAsOutliers = 10
# Set the output prediction raster
outputPredictionRaster = airQualityStations_OutPredictionRaster
# Run the Spatial Outlier Detection tool
arcpy.stats.SpatialOutlierDetection(inputFeatures, outputFeatures,
numberNeighbors, pcntLocationsAsOutliers, outputPredictionRaster)
except arcpy.ExecuteError:
# If an error occurred when running the tool, print the error message.
print(arcpy.GetMessages())