相似性搜索 (空间统计)

摘要

根据要素属性确定哪些候选要素与单个或多个输入要素最相似或者最不相似。

了解有关“相似性搜索”工作原理的详细信息

插图

“相似性搜索”工具图示

使用情况

  • 您需要提供一个包含要匹配的输入要素值的图层和另一个包含候选要素值的图层,从中将获得匹配。 通常,这些值将位于同一要素图层中。 一种方法是创建两个单独的数据集。 另一种方法是创建具有两个不同的定义查询的图层,这可能会更容易。 例如,如果您拥有一个文件,其中包含上个月发生的全部犯罪事件,并且您要找出与最近劫车事件最相似的所有犯罪事件,则可以执行以下操作:

    • 将显示所有犯罪事件的图层复制到内容窗格以生成重复的图层。 然后重命名该图层。
    • 在重命名的图层上选择或设置表示最近劫车事件要素的定义查询。 将该图层用于要匹配的输入要素参数。
    • 为原始图层应用选择或设置定义查询以便排除最近劫车事件。 将该图层用于候选要素参数。

  • 如果存在多个要匹配的输入要素值,可根据感兴趣属性的平均值进行匹配。 例如,如果存在两个要匹配的输入要素值,并且其中一个感兴趣属性值为人口变量,那么工具会检查人口数与平均人口值最接近的候选要素值。 例如,如果人口值为 100 和 102,那么工具将会检查人口数接近 101 的候选要素。

    注:

    如果存在多个要匹配的输入要素值,则需要根据感兴趣属性参数选择类似值。 例如,如果其中一个输入的人口值为 100,另一个为 100,000,则工具将检查人口数接近两者平均值 50,050 的匹配。该平均值与两个要匹配的输入要素值的人口值均不接近。

  • 输出要素值将始终包含点,除非要匹配的输入要素候选要素值均为面或者折线。 创建面或折线输出要素值会降低大型数据集的性能。 请选中将输出折叠为点参数以强制使用点几何来提高性能。

  • 借助最相似或最不相似参数,可以使用最相似最不相似选项来搜索要素,以匹配要匹配的输入要素值。 查看两者可能会有所帮助。 例如,如果在结果数参数中输入 3,在最相似或最不相似参数中选择二者,则工具将返回三个最相似和三个最不相似的候选要素。

  • 输出要素参数中给出的任何匹配解决方案将是与目标要匹配的输入要素参数最相似或最不相似的解决方案;单个解决方案不会同时出现两种情况(匹配的解决方案不会在输出要素参数中重复)。 因此,如果在最相似或最不相似参数中选择二者,则可能出现的匹配结果的最大数量(结果数值)将是候选要素数量的一半。 如果针对结果数输入的值过大,则工具会将其调整为可能出现的最大值。

  • 要探究相似性的空间模式,可以划分所有候选要素值的相似性等级。 为此,请为结果数参数输入 0。 该工具将确定候选数据集中的有效要素数量,并按照从最相似到最不相似的等级顺序将所有这些要素写入输出要素参数。

  • 匹配方法参数选项为属性值等级属性值属性剖面

    • 属性值 - 最相似的候选要素会具有所有感兴趣属性值的最小平方差总和;在计算差异之前所有值都已标准化。
    • 等级属性值 - 最相似的候选要素会具有所有感兴趣属性值的最小等级平方差总和。 输出要素参数将在 SIMINDEX(等级平方差总和)字段中报告这些总和。
    • 属性剖面 - 将测量余弦相似性。 余弦相似性将在标准化属性值间检查相同关系,而并非尝试匹配量级。 例如,存在 A1、A2、A3 和 A4 四个感兴趣属性值。 A2 是 A1 的两倍,A3 与 A2 几乎相等,A4 是 A3 的三倍。 对于属性剖面而言,该工具将检查具有以下属性关系的候选要素:两倍大、几乎相等和三倍大。 由于该方法用于检查属性关系,因此您必须为该方法至少指定两个感兴趣属性值。 可以使用余弦相似性方法(属性剖面)来查找地点,比如洛杉矶,但是总体比例较小。 余弦相似性的指数范围在 1.0(完全相似)和 -1.0(完全不相似)之间。 余弦相似度指数写入输出要素参数的 SIMINDEX(余弦相似性)字段。

  • 感兴趣属性值必须为数值,而且必须同时存在(相同字段名和相同字段类型)于要匹配的输入要素候选要素数据集中。 对于感兴趣属性参数,该工具将列出在要匹配的输入要素数据集中找到的所有数值字段。 如果该工具未找到与候选要素对应的字段,则会出现一条警告,提示缺失的属性已从分析中删除。 如果删除所有感兴趣属性值,则不会进行任何匹配,并且会出现错误,指示该工具无法执行分析。

  • 将所有用于匹配的属性均写入输出要素参数。 追加到输出的字段参数允许您在输出表中包含其他字段。 由于感兴趣属性数值字段不是有效的标识符,因此可以为每个匹配解决方案追加名称或其他标识符字段。 如果需要在多个匹配解决方案中做出选择,则可以追加其他非数值属性。 例如,如果您需要的解决方案必须为多种土地利用类型之一,则追加分类土地利用属性将帮助您找到满足此要求的解决方案。 您还可以在输出表中包含其他数值属性,仅供参考之用。 例如,您可以为某一特定动物寻找合适的栖息地。 您可以在要匹配的输入要素参数中输入该物种能够成功存活的已知地点。 您可以选择与该物种成功存活相关的感兴趣属性值。 此外,您还可以在输出要素值中追加数值区域属性,这并不是因为您想要与目标区域值进行实际匹配,而是因为您最终寻找的是具有最大区域的解决方案。

  • 所有要匹配的输入要素和匹配的解决方案,以及感兴趣属性追加到输出的字段参数都将写入输出要素参数。 此外,下列字段也包含在输出要素中:

    字段名字段别名描述备注

    MATCH_ID

    MATCH_ID

    首先列出要匹配的输入要素图层中的所有目标要素,并将其 OID 或 FID 标识符写入 MATCH_ID 字段中。 解决方案匹配的该字段具有空值。

    如果输出要素值为 shapefile,则 NULL 值将由很大的负数(例如 -21474836)来表示。

    CAND_ID

    CAND_ID

    接下来将列出所有的匹配解决方案,该值表示这些解决方案的 OID 或 FID 标识符。 要匹配的输入要素图层中的目标要素在该字段的值为 NULL。

    如果输出要素值为 shapefile,则 NULL 值将由很大的负数(例如 -21474836)来表示。

    SIMRANK

    相似性等级

    如果为匹配方法参数选择了最相似二者,则所有匹配的解决方案均按照从最相似到最不相似的顺序进行等级划分。 最相似的解决方案匹配的等级值为 1。

    如果为匹配方法参数选择了最相似二者,则该字段将仅包含在输出要素值中。

    DSIMRANK

    相异性等级

    如果为匹配方法参数选择了最不相似二者,则所有匹配的解决方案均按照从最不相似到最相似的顺序进行等级划分。 最不相似的解决方案的等级值为 1。

    如果为匹配方法参数选择了最不相似二者,则该字段将仅包含在输出要素中。

    SIMINDEX

    差值平方和、等级平方差总和或余弦相似度

    该字段量化了每个匹配解决方案与目标要素的相似程度。

    • 如果为匹配方法参数指定了属性值,则字段别名为 Sum of Squared Value Differences
    • 如果为匹配方法参数指定了等级属性值,则字段别名为 Sum of Squared Rank Differences
    • 如果为匹配方法参数指定了属性剖面,则字段别名为 Cosine Similarity
    有关如何计算这些索引的详细信息,请参阅相似性搜索工作原理

    如果仅有一个要匹配的输入要素值,则目标要素为该要素本身。 如果指定了多个要匹配的输入要素值,则目标要素是通过所有感兴趣属性值的平均值创建的临时要素。

    LABELRANK

    渲染等级

    该字段仅用于显示。 此工具使用该字段为分析结果提供默认渲染。

  • 输出要素图层会自动添加到内容列表中,同时对 LABELRANK 字段应用默认渲染。 应用的渲染由 <ArcGIS Pro>\Resources\ArcToolBox\Templates\Layers 路径下的图层文件定义。 需要时,可使用应用图层的符号系统工具重新应用默认渲染。

    注:

    默认采样大小为 10,000 条记录。 当结果数值超过该默认值时,您将需要提高采样大小来渲染所有结果。 要提高采样大小,请打开符号系统窗格,然后单击高级符号系统选项选项卡 高级符号系统选项。 展开采样大小并更改最大采样大小值。

参数

标注说明数据类型
要匹配的输入要素

该图层或者图层上的选择含有您想要匹配的要素;您正在搜索与这些要素相似的其他要素。 当提供多个要素时,匹配基于属性平均值。

提示:

如果要匹配的输入要素候选要素值来自单个数据集图层,则可以执行以下操作:

  • 将该图层复制到内容窗格以生成重复的图层。
  • 重命名该重复的图层。
  • 在重命名的图层上,选择或设置用于您希望匹配的参考要素的定义查询。 将此新创建的图层用于要匹配的输入要素参数。
  • 在原始图层上选择或设置定义查询以便排除参考要素。 这将为用于候选要素参数的图层。

Feature Layer
候选要素

该图层或者图层上的选择包含候选匹配要素。 该工具将在这些候选要素中检查与要匹配的输入要素值最相似(或者最不相似)的要素。

提示:
如果要匹配的输入要素候选要素值来自单个数据集图层,则可以执行以下操作:
  • 将该图层复制到内容窗格以生成重复的图层。
  • 重命名该重复的图层。
  • 在重命名的图层上,选择或设置用于您希望匹配的参考要素的定义查询。 将此新创建的图层用于要匹配的输入要素参数。
  • 在原始图层上选择或设置定义查询以便排除参考要素。 这将为用于候选要素参数的图层。

Feature Layer
输出要素

输出要素类包含每个要匹配的输入要素值的记录,以及查找到的所有与解决方案相匹配的要素的记录。

Feature Class
将输出折叠为点

如果要匹配的输入要素候选要素参数值均为线或面,则指定是否将输出要素参数的几何折叠至点,或者是否要匹配输入要素的原始几何(线或面)。 仅当具有 Desktop Advanced 许可时,此参数才可用。 选中此参数将提高大型线和面数据集的工具性能。

  • 选中 - 线和面要素将表示为要素质心(点)。
  • 未选中 - 输出几何将与输入要素的线或面几何相匹配。 这是默认设置。

Boolean
最相似或最不相似

指定是否将标识与要匹配的输入要素值最相似或最不相似的要素。

  • 最相似将标识最相似的要素。 这是默认设置。
  • 最不相似将标识最不相似的要素。
  • 两侧将标识最相似和最不相似的要素。
String
匹配方法

用于指定是否根据值、等级或余弦关系进行匹配。

  • 属性值匹配将以所有感兴趣属性值的标准化属性值平方差的总和为基础。 这是默认设置。
  • 等级属性值匹配将以所有感兴趣属性值的等级平方差的总和为基础。
  • 属性剖面将以余弦相似性函数的方式来计算所有感兴趣属性的匹配。
String
结果数

要查找的匹配解决方案的数量。 输入 0 或一个大于候选要素值总数的数字,将返回所有候选要素的等级。 默认值为 10。

Long
感兴趣属性

表示匹配条件的数值属性。

Field
追加到输出的字段
(可选)

输出要素参数随附的字段。 这些字段不用于确定相似性;它们仅包含在输出要素参数中供参考之用。

Field

arcpy.stats.SimilaritySearch(Input_Features_To_Match, Candidate_Features, Output_Features, Collapse_Output_To_Points, Most_Or_Least_Similar, Match_Method, Number_Of_Results, Attributes_Of_Interest, {Fields_To_Append_To_Output})
名称说明数据类型
Input_Features_To_Match

该图层或者图层上的选择含有您想要匹配的要素;您正在搜索与这些要素相似的其他要素。 当提供多个要素时,匹配基于属性平均值。

提示:

如果要匹配的输入要素候选要素值来自单个数据集图层,则可以执行以下操作:

  • 将该图层复制到内容窗格以生成重复的图层。
  • 重命名该重复的图层。
  • 在重命名的图层上,选择或设置用于您希望匹配的参考要素的定义查询。 将此新创建的图层用于要匹配的输入要素参数。
  • 在原始图层上选择或设置定义查询以便排除参考要素。 这将为用于候选要素参数的图层。

Feature Layer
Candidate_Features

该图层或者图层上的选择包含候选匹配要素。 该工具将在这些候选要素中检查与 Input_Features_To_Match 值最相似(或者最不相似)的要素。

Feature Layer
Output_Features

输出要素类包含每个 Input_Features_To_Match 值的记录,以及查找到的所有与解决方案相匹配的要素的记录。

Feature Class
Collapse_Output_To_Points

如果 Input_Features_To_MatchCandidate_Features 参数值均为线或面,指定是否将 Output_Features 参数的几何折叠为点或者将匹配输入要素的原始几何(线或面)。 仅当具有 Desktop Advanced 许可时,此参数才可用。 选择 COLLAPSE 将提高大型线和面数据集的工具性能。

  • COLLAPSE线和面要素将表示为要素质心(点)。
  • NO_COLLAPSE输出几何将与输入要素的线或面几何相匹配。 这是默认设置。
Boolean
Most_Or_Least_Similar

指定是否将标识与 Input_Features_To_Match 值最相似或最不相似的要素。

  • MOST_SIMILAR将标识最相似的要素。 这是默认设置。
  • LEAST_SIMILAR将标识最不相似的要素。
  • BOTH将标识最相似和最不相似的要素。
String
Match_Method

用于指定是否根据值、等级或余弦关系进行匹配。

  • ATTRIBUTE_VALUES匹配将以所有感兴趣属性值的标准化属性值平方差的总和为基础。 这是默认设置。
  • RANKED_ATTRIBUTE_VALUES匹配将以所有感兴趣属性值的等级平方差的总和为基础。
  • ATTRIBUTE_PROFILES将以余弦相似性函数的方式来计算所有感兴趣属性的匹配。
String
Number_Of_Results

要查找的匹配解决方案的数量。 输入 0 或一个大于 Candidate_Features 值总数的数字,将返回所有候选要素的等级。 默认值为 10。

Long
Attributes_Of_Interest
[Attributes_Of_Interest,...]

表示匹配条件的数值属性。

Field
Fields_To_Append_To_Output
[Fields_To_Append_To_Output,...]
(可选)

Output_Features 参数随附的字段。 这些字段不用于确定相似性;它们仅包含在 Output_Features 参数中供参考之用。

Field

代码示例

SimilaritySearch 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何使用 SimilaritySearch 函数。

import arcpy
arcpy.env.workspace = r"C:\Analysis"
arcpy.stats.SimilaritySearch("Crime_selection", "AllCrime", "c:\\Analysis\\CrimeMatches", 
                    "NO_COLLAPSE", "MOST_SIMILAR", "ATTRIBUTE_VALUES", 4, 
                    "HEIGHT;WEIGHT;SEVERITY;DST2CHPSHP", "Name;WEAPON")
SimilaritySearch 示例 2(独立脚本)

以下独立 Python 脚本演示了如何使用 SimilaritySearch 函数。


# Similarity Search of crime data in a metropolitan area

# Import system modules
import arcpy
import os

# Set property to overwrite existing output
arcpy.env.overwriteOutput = True

try:
    # Set the current workspace (to avoid having to specify the full path to
    # the feature classes each time)
    arcpy.env.workspace = r"C:\Analysis"

    # Make a layer from the crime feature class
    arcpy.management.MakeFeatureLayer("AllCrime", "Crime_selection") 

    # Select the target crime to match
    # Process: Select By Attribute
    arcpy.management.SelectLayerByAttribute("Crime_selection", "NEW_SELECTION",
                                            '"OBJECTID" = 1230043')

    # Use Similarity Search to create groups based on different 
    # variables or analysis fields
    # Process: Group Similar Features  
    arcpy.stats.SimilaritySearch("Crime_selection", "AllCrime", "CJMatches", 
                                 "NO_COLLAPSE", "MOST_SIMILAR", "ATTRIBUTE_VALUES", 4,
                                 "HEIGHT;WEIGHT;SEVERITY;DST2CHPSHP", "Name;WEAPON")
    
except:
    # If an error occurred when running the tool, print out the error message.
    print(arcpy.GetMessages())