FindClusters[{e1,e2,…}]
把 ei 分成相似元素组成的聚类.
FindClusters[{e1v1,e2v2,…}]
返回对应于各个聚类中的 ei 的 vi.
FindClusters[data,n]
将 data 分割为 n 个聚类.
FindClusters
FindClusters[{e1,e2,…}]
把 ei 分成相似元素组成的聚类.
FindClusters[{e1v1,e2v2,…}]
返回对应于各个聚类中的 ei 的 vi.
FindClusters[data,n]
将 data 分割为 n 个聚类.
更多信息和选项
- FindClusters 将列表划分为相似元素的子列表(聚类).
- 聚类的数量和组成受输入数据、方法和使用的评估标准的影响.
- 元素可以属于多种数据类型,包括数字、文本和图像,以及日期和时间.
- 聚类通常用于以无监督的方式查找元素类别,例如客户类型、动物分类法、文档主题等. 对于监督分类,请参阅 Classify.
- 输入示例的标签 ei 可以用以下格式给出:
-
{e1,e2,…} 自身使用下标 ei {e1v1,e2v2,…} 元素 ei 和标签 vi 之间的规则列表 {e1,e2,…}{v1,v2,…} 所有元素和所有标签之间的规则 label1e1,label2e2,… 作为 Association 密钥的标签 - 可以通过以下方式指定聚类的数量:
-
Automatic 自动查找聚类数量 n 精确查找 n 个聚类 UpTo[n] 查找至多 n 个聚类 - 可给定以下选项:
-
CriterionFunction Automatic 选择方法的标准 DistanceFunction Automatic 所用距离函数 FeatureExtractor Identity 怎样从要学习的内容中提取特征 FeatureNames Automatic 赋给输入数据的特征名称 FeatureTypes Automatic 输入数据的假定特征类型 Method Automatic 使用方式类型 MissingValueSynthesis Automatic 如何合成缺失值 PerformanceGoal Automatic 优化目标 RandomSeeding 1234 应该在内部对伪随机数生成器进行什么样的初始化 Weights Automatic 给定每个范例权重 - 默认情况下,FindClusters 将自动预处理数据,除非指定了 DistanceFunction.
- DistanceFunction 的设定可以是任意距离或相异度函数,或定义两个值之间距离的函数 f.
- PerformanceGoal 的可用设定包括:
-
Automatic 速度、准确度和内存的自动权衡 "Quality" 最大化分类器的准确性 "Speed" 最大化分类器速度 - Method 的可用设定包括:
-
Automatic 自动选择方法 "Agglomerate" 聚类算法单独连接 "DBSCAN" 基于密度的有噪声应用的空间聚类 "GaussianMixture" 变分高斯混合算法 "JarvisPatrick" Jarvis–Patrick 聚类算法 "KMeans" k 均值聚类算法 "KMedoids" 中心点周围的分割 "MeanShift" 均值平移聚类算法 "NeighborhoodContraction" 将数据点移向高密度区域 "SpanningTree" 树状聚类算法的最小填充 "Spectral" 谱聚类算法 - "KMeans" 和 "KMedoids" 方法仅可用在指定聚类数目时使用.
- "DBSCAN"、"GaussianMixture"、"JarvisPatrick"、"MeanShift" 和 "NeighborhoodContraction" 等方法只有在聚类数量为 Automatic 时才能使用.
- 下图显示了对玩具数据集应用常用方法得到的结果:
- CriterionFunction 的可用设定包括:
-
"StandardDeviation" 均方根值 (RMS) 标准差 "RSquared" R-平方 "Dunn" 邓恩指数 "CalinskiHarabasz" Calinski–Harabasz 指数 "DaviesBouldin" Davies–Bouldin 指数 "Silhouette" Silhouette 分数 Automatic 内部指数 - RandomSeeding 的可能设置包括:
-
Automatic 每次函数调用时自动重新播种 Inherited 使用外部播种的随机数字 seed 用明确给定的整数或字符串作为种子
[image]范例
打开所有单元 关闭所有单元基本范例 (4)
FindClusters[{1, 2, 10, 12, 3, 1, 13, 25}]FindClusters[{1, 2, 10, 12, 3, 1, 13, 25}, 4]FindClusters[{1 -> a, 2 -> b, 10 -> c, 12 -> d, 3 -> e, 1 -> f, 13 -> g, 25 -> h}]FindClusters[<|a -> 1, b -> 2, c -> 10, d -> 12, e -> 3, f -> 1, g -> 13, h -> 25|>]范围 (6)
FindClusters[{{2.5, 3.1}, {5.9, 3.4}, {10, 15}, {2.2, 1.5}, {100, 7.5}}]data30 = N[{{25, 31}, {59, 34}, {100, 150}, {22, 15}, {1000, 75}} / 10, 30];FindClusters[data30]SeedRandom[1234];
tfdata = RandomChoice[{True, False}, {10, 3}]FindClusters[tfdata]l = {RGBColor[1., 0.5544801460824762, 0.12056345655596812], RGBColor[1., 0.2818404077149421, 0.1073945311994069], RGBColor[1., 0.12423838985259317, 0.19023691956664956], RGBColor[0.8, 0.4542154246540884, 0.31688034954543], RGBColor[0.8, 0.5483770742736782, 0.16977938137471082], RGBColor[0.8, 0.03163746197875539, 0.5781619271042624], RGBColor[0.8, 0.1612089376881538, 0.15737556414394493], RGBColor[0.5, 0.8592283961197744, 0.04768022523989446], RGBColor[0.1544029090531034, 0.5400111921283921, 0.1332688011328087], RGBColor[0.5550268260924609, 0.6650311925481958, 0.24096295360192643], RGBColor[0.8424867588418756, 0.9610747917029776, 0.38159472421539053], RGBColor[0.5, 0.6654316628707297, 0.9850955091132039], RGBColor[0.1726013976586489, 0.7948159289195966, 0.9375970360424373], RGBColor[0.07338116039584297, 0.6615692536088942, 0.9035903703739081], RGBColor[0.0396922307314016, 0.06815211658088716, 0.9401879243429714], RGBColor[0.26561262398696184, 0.1750699399994622, 0.47868645290098866]};FindClusters[l, 4]//Columnl = {[image], [image], [image], [image], [image], [image], [image], [image]};FindClusters[l, 3]//Columnt = {[image], [image], [image], [image], [image], [image], [image], [image]};FindClusters[t]选项 (15)
CriterionFunction (1)
circle[r_, theta_] := {r Sin[theta], r Cos[3theta]};
points = RandomVariate[MixtureDistribution[{1, 1}, {UniformDistribution[{{3 / 2, 2}, {0, 2Pi}}], UniformDistribution[{{0, 1 / 2}, {0, 2Pi}}]}], 1000];
data = circle@@@points;
ListPlot[data, PlotRange -> All]用 CriterionFunction 的不同设置生成聚类数据
clustering1 = FindClusters[data];clustering2 = FindClusters[data, CriterionFunction -> "CalinskiHarabasz"];ListPlot[clustering1]ListPlot[clustering2]DistanceFunction (4)
用 CanberraDistance 作为连续数据的距离测量方法:
FindClusters[{1, 2, 10, 12, 3, 1, 13, 25, 26, 27}, DistanceFunction -> CanberraDistance]在默认的情况下,由 SquaredEuclideanDistance 获得聚类:
FindClusters[{1, 2, 10, 12, 3, 1, 13, 25, 26, 27}]用 DiceDissimilarity 作为布尔数据的距离测量方法:
data = {{True, True, True}, {True, True, False}, {True, False, False},
{False, False, True}, {False, False, False}, {False, True, False}, {False, False, True}, {False, False, False}};FindClusters[data, DistanceFunction -> DiceDissimilarity]用 MatchingDissimilarity 作为布尔数据的距离测量方法:
FindClusters[data, DistanceFunction -> MatchingDissimilarity]用 HammingDistance 作为字符串数据的距离测量方法:
sdata = {"GGTTT", "GGGGT", "GTTTT", "VVBBS", "VVVBB", "VVVVB", "LLAFF", "LLLAA", "LLLLL"};FindClusters[sdata, DistanceFunction -> HammingDistance]data = Table[RandomReal[NormalDistribution[RandomReal[{-10, 10}], 1], 5], {100}];Map[Length, FindClusters[data, DistanceFunction -> (Norm[#1 - #2, 5] ^ 5&)]]FeatureExtractor (1)
flowers = {[image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image]};FindClusters[flowers, 3]创建自定义 FeatureExtractor 来提取特征:
fe = FeatureExtraction[flowers, (DominantColors[#, 1]&)]FindClusters[flowers, 3, FeatureExtractor -> fe]FeatureNames (1)
使用 FeatureNames 来命名特征,然后在进一步说明中引用其名称:
c = FindClusters[{{2.3, "male"}, {4.8, "male"}, {9, "female"}, {5.2, "female"}, {1, "male"}, {10, "male"}, {5, "female"}}, FeatureNames -> {"age", "gender"}, FeatureTypes -> <|"age" -> "Numerical", "gender" -> "Nominal"|>]FeatureTypes (1)
使用 FeatureTypes 强制对特征的解释:
FindClusters[{{2.3, "male"}, {4.8, "male"}, {9, "female"}, {5.2, "female"}, {1, "male"}, {10, "male"}, {5, "female"}}, FeatureTypes -> {"Numerical", "Nominal"}]FindClusters[{{2.3, "male"}, {4.8, "male"}, {9, "female"}, {5.2, "female"}, {1, "male"}, {10, "male"}, {5, "female"}}, FeatureTypes -> {"Nominal", "Nominal"}]Method (4)
FindClusters[{1, 10, 11, 13, 17, 20, 21, 22, 23}, Method -> "NeighborhoodContraction"]FindClusters[{1, 10, 11, 13, 17, 20, 21, 22, 23}]SeedRandom[1234];
Dis = MixtureDistribution[{1, 1, 1, 1}, {
MultinormalDistribution[{-1, -5}, {{.5, 0}, {0, .5}}],
MultinormalDistribution[{-7, 1}, {{.5, 0}, {0, .5}}],
MultinormalDistribution[{2, 7}, {{.5, 0}, {0, .5}}], MultinormalDistribution[{0, 0}, {{.5, 0}, {0, .5}}]}];
data = RandomVariate[Dis, 500];
ListPlot[data, PlotRange -> All]ListPlot[FindClusters[data, 4, Method -> "KMeans"]]用未指定聚类数目的 "GaussianMixture" 方法生成聚类数据:
ListPlot[FindClusters[data, Method -> "GaussianMixture"]]SeedRandom[2];
Dis = MixtureDistribution[{2, 2}, {UniformDistribution[{{-0, 1}, {0, 1.5}}],
UniformDistribution[{{0, 3}, {2, 2.2}}]}];
data = RandomVariate[Dis, 2000];
ListPlot[data, PlotRange -> All]ListPlot[FindClusters[data, 2, Method -> "KMeans"]]ListPlot[FindClusters[data, Method -> "DBSCAN"]]SeedRandom[1234];
colors = RandomColor[100];FindClusters[colors, 5, Method -> "KMedoids"]用未指定聚类数目的 "MeanShift" 方法生成聚类颜色:
FindClusters[colors, Method -> "MeanShift"]用未指定聚类数目的 "NeighborhoodContraction" 方法生成聚类颜色:
FindClusters[colors, Method -> "NeighborhoodContraction"]用 "NeighborhoodContraction" 方法和子选项生成聚类颜色:
FindClusters[colors, Method -> {"NeighborhoodContraction", "NeighborhoodRadius" -> 0.1}]PerformanceGoal (1)
vectors = RandomReal[{10, 11}, {5000, 5}];AbsoluteTiming[FindClusters[vectors];]将 PerformanceGoal 设置为 "Speed",执行同一操作:
AbsoluteTiming[FindClusters[vectors, PerformanceGoal -> "Speed"];]RandomSeeding (1)
vectors = RandomReal[{10, 11}, {500, 2}];clusterings = Table[FindClusters[vectors], 5];SameQ@@clusterings通过改变 RandomSeeding 选项进行几次聚类计算并比较结果:
randomclusterings = Table[FindClusters[vectors, RandomSeeding -> RandomInteger[10]], 5];SameQ@@randomclusterings应用 (5)
高维数据 (1)
data = {...};
Dimensions[data]clusters = FindClusters[data, Method -> "Agglomerate"];ClusteringMeasurements[clusters, "StandardDeviation"]ClusteringMeasurements[{data}, "StandardDeviation"]Near-Duplicate 检测 (1)
通过使用较小的 "NeighborhoodRadius" 进行聚类来检测近重复点:
SeedRandom[1000];
points = RandomReal[1, {100, 2}];plot = ListPlot[points, ...]threshold = Last@TakeSmallest[EuclideanDistance@@@Subsets[points, {2}], 10]用 "NeighborhoodContraction" 方法来计算聚类:
clusters = FindClusters[points, Method -> {"NeighborhoodContraction", "NeighborhoodRadius" -> threshold}]//Select[Length[#] > 1&]Show[plot, ListPlot[clusters, PlotTheme -> "Minimal", Frame -> True]]findCloseClusters[points_, t_] := FindClusters[points, Method -> {"NeighborhoodContraction", "NeighborhoodRadius" -> t}]//Select[Length[#] > 1&]Table[Show[plot, ListPlot[findCloseClusters[points, t], PlotTheme -> "Minimal"], PlotLabel -> t], {t, {.01, .02, .03, .05}}]//Partition[#, 2]&//GraphicsGridDNA 序列 (1)
sequences = BioSequence[{BioSequence["DNA", "TTAACCGGTTAT", {}], BioSequence["DNA", "AAGGCTTATGGT", {}],
BioSequence["DNA", "ATGCCGTACGCA", {}], BioSequence["DNA", "GTTACGGAACCT", {}],
BioSequence["DNA", "AAGGCTTACGGT", {}], BioSequence["DNA", "GTTACGGAA ... Sequence["DNA", "GTTACGGAAGCT", {}], BioSequence["DNA", "ATGCCGTACGCT", {}],
BioSequence["DNA", "CCGTAAGTGCAT", {}], BioSequence["DNA", "GTTACGGAAGCA", {}],
BioSequence["DNA", "ATGCCGTATGCA", {}], BioSequence["DNA", "ATGCCGTATGCT", {}]}, {}];FindClusters[Flatten@sequences["SequenceString"], DistanceFunction -> HammingDistance]可视化聚类 (2)
data = {{-1.1, 2.6}, {3.9, -0.8}, {4.2, -3.7}, {3.3, 3.5}, {3.9, 5.2}, {4.1, -4.8}, {3.8, 3.7}, {5.6, 0.1}, {3.1, -5.2}, {-0.9, 2.3}, {2.9, 4.1}, {-2.3, 3.9}, {-2.5, 3.}, {2.6, -5.5}, {5.2, 1.9}, {-0.7, 1.3}, {0.9, 2.8}, {-1.5, 3.3}, {3.8, 1.2}, {2.6, -5.1}, {-0.8, 3.2}, {4.7, 0.7}, {3., 3.}, {3.9, 3.6}, {4.5, 1.4}, {4.2, 1.3}, {-1.1, 2.6}, {4.8, 2.4}, {3.3, -3.5}, {3.2, -4.6}, {3.3, -4.9}, {3., 3.5}, {0.7, 2.1}, {3.2, -4.3}, {-2., 0.5}, {-1.2, 2.}, {-1.6, 1.8}, {-3.5, 3.7}, {4.8, 0.2}, {3.3, 2.4}, {-0.1, 2.1}, {-1.3, 2.5}, {4.4, 3.9}, {3.5, 0.2}, {0.1, 2.9}, {-1., 1.6}, {-1.4, 4.5}, {3.2, 2.5}, {-1.6, 2.4}, {2.6, -5.1}};ListPlot[FindClusters[data], PlotTheme -> "Minimal"]ListPointPlot3D[FindClusters[{...}]]属性和关系 (2)
FindClusters 返回聚类的列表,而 ClusteringComponents 给出聚类索引的数组:
ClusteringComponents[{10, 4, 5, 6, 11}, 2]FindClusters[{10, 4, 5, 6, 11}, 2]当 Nearest 给出的元素最接近指定值时,FindClusters 对数据编组:
FindClusters[{1, 2, 10, 12, 3, 1, 13, 25}]Nearest[{1, 2, 10, 12, 3, 1, 13, 25}, 8]Nearest[{1, 2, 10, 12, 3, 1, 13, 25}, 11]巧妙范例 (2)
data = RandomReal[{-1, 1}, {10 ^ 4, 2}];plots = Table[ListPlot[FindClusters[data, n, Method -> "KMeans"], AspectRatio -> 1, Frame -> True, Axes -> False, FrameTicks -> None], {n, 9}];GraphicsGrid[Partition[plots, 3]]Framed[Column[#]]& /@ FindClusters[DictionaryLookup["agg" ~~ __], 20]技术笔记
-
▪
- 把数据划分为聚类
相关链接
文本
Wolfram Research (2007),FindClusters,Wolfram 语言函数,https://reference.wolfram.com/language/ref/FindClusters.html (更新于 2020 年).
CMS
Wolfram 语言. 2007. "FindClusters." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/FindClusters.html.
APA
Wolfram 语言. (2007). FindClusters. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/FindClusters.html 年
BibTeX
@misc{reference.wolfram_2026_findclusters, author="Wolfram Research", title="{FindClusters}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/FindClusters.html}", note=[Accessed: 15-October-2026]}
BibLaTeX
@online{reference.wolfram_2026_findclusters, organization={Wolfram Research}, title={FindClusters}, year={2020}, url={https://reference.wolfram.com/language/ref/FindClusters.html}, note=[Accessed: 15-October-2026]}