ClusterClassify[data]
通过把数据划分为相似元素组成的分群,产生 ClassifierFunction[…].
ClusterClassify[data,n]
生成具有 n 个分群的 ClassifierFunction[…].
ClusterClassify
ClusterClassify[data]
通过把数据划分为相似元素组成的分群,产生 ClassifierFunction[…].
ClusterClassify[data,n]
生成具有 n 个分群的 ClassifierFunction[…].
更多信息和选项
- ClusterClassify 适用于多个数据类型,包括数值、文字、图像、日期和时间,以及这些数据类型的组合.
- 可以通过以下方式指定群的数量:
-
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 每个范例应该使用什么权值 - 缺省情况下,除非指定了 DistanceFunction,ClusterClassify 将自动对数据进行预处理.
- DistanceFunction 的设置可以是任意距离、相异度函数,或定义两个值之间的距离的函数 f.
- PerformanceGoal 的可能设置包含:
-
Automatic 速度、准确度和存储之间的自动权衡 "Memory" 最小化分类器的存储要求 "Quality" 最大化分类器准确度 "Speed" 最大化分类器速度 "TrainingSpeed" 最小化产生分类器的时间 - 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" 根均方标准差 "RSquared" R 平方 "Dunn" Dunn 指数 "CalinskiHarabasz" Calinski–Harabasz 指数 "DaviesBouldin" Davies–Bouldin 指数 "Silhouette" 轮廓分数 Automatic 内部指数 - RandomSeeding 的可能设置包括:
-
Automatic 每次调用函数时都会自动重新设置种子 Inherited 使用外部种子随机数 seed 使用明确的整数或字符串作为种子 - ClusterClassify[…,FeatureExtractor"Minimal"] 表明内部预处理应该尽可能简单.
[image]范例
打开所有单元 关闭所有单元基本范例 (3)
在某些数值数据上训练 ClassifierFunction:
c = ClusterClassify[{-10, -9, -8, -7, 5, 6, 7, 8, 12}]c[0]c[0, "Probabilities"]c[{-10, 0, 30}]Plot[Values[c[x, "Probabilities"]], {x, -5, 5}]通过要求类数为5,在某些颜色上训练 ClassifierFunction:
SeedRandom[1234];
colors = RandomColor[70]c = ClusterClassify[colors, 5]在某些未添加标签的数据上训练 ClassifierFunction:
c["Red"]GatherBy[colors, c]在某些字符串训练 ClassifierFunction:
string = {"c", "a", "bb", "dddd", "uuu7uuu", "uuuuu4u", "u5uuuuu"};c = ClusterClassify[string]components = c[string]GatherBy[string, c]范围 (11)
data = {-10, -9, -8, -7, 5, 6, 7, 8};c = ClusterClassify[data]c[data]data = {{1.85, 1.85, 1.75, 1.6}, {0.2, 0.75, 0.1, 0.55}, {1.3, 1.9, 1.25, 1.7}, {0.25, 0.9, 0.3, 0.75}, {0.35, 0.05, 0.7, 0.35}, {0.8, 0.5, 0.7, 0.8}, {1.35, 1.45, 1.6, 1.4}, {0.75, 0.15, 0.7, 0.7}, {1.2, 1.6, 1.55, 1.5}, {1.55, 1.7, 1.95, 1.45}};c = ClusterClassify[data]c[data]SeedRandom[123];
tfdata = RandomChoice[{True, False}, {20, 3}]c = ClusterClassify[tfdata]c[{False, False, False}]c[{0, 1, 0}]c[{{False, False, False}, {0, 1, 0}}, "Probabilities"]images = {[image], [image], [image], [image], [image], [image]};c = ClusterClassify[images, 4]Pick[images, c[images], #]& /@ Range[4]newimages = {[image], [image], [image], [image]};c[newimages]images3D = Join[Image3D /@ RandomReal[3, {3, 5, 5, 10, 2}], Image3D /@ RandomReal[1, {3, 5, 5, 3, 2}]]c = ClusterClassify[images3D]Pick[images3D, c[images3D], #]& /@ Range[2]SeedRandom[1234];
colors = RandomColor[20]c = ClusterClassify[colors, 3]c[colors]strings = DictionaryLookup["c" ~~ ___];c = ClusterClassify[strings, 10]SeedRandom[1234];
newstrings = RandomSample[DictionaryLookup["a" ~~ ___], 30];GatherBy[newstrings, c]SeedRandom[123];
data = Transpose[{RandomColor[30], RandomSample[DictionaryLookup["a" ~~ ___], 30]}]c = ClusterClassify[data, UpTo@3, Method -> "Spectral"]GatherBy[data, c]SeedRandom[1234];
data = TimeObject /@ RandomReal[AbsoluteTime[]//Round, 40]c = ClusterClassify[data, 5]Pick[data, c[data], #]& /@ Range[5]SeedRandom[1234];
data = Join[RandomReal[{-1, 1}, 20], RandomReal[{3, 4}, 20]];c = ClusterClassify[data]Information[c]Information[c, "MethodDescription"]SeedRandom[1234];
data = Join[RandomReal[{-1, 1}, {80, 2}], RandomReal[{2, 4}, {80, 2}]];
ListPlot[data]c = ClusterClassify[data]SeedRandom[1234];
datatest = RandomReal[{-1, 4}, {2000, 2}];
decision = c[datatest];ListPlot[Pick[datatest, decision, #]& /@ {1, 2}]使用 IndeterminateThreshold 对相同检验数据分类:
decision2 = c[datatest, IndeterminateThreshold -> 0.9];可视化包含 Indeterminate 分群的所得分群:
ListPlot[Pick[datatest, decision2, #]& /@ {1, 2, Indeterminate}]选项 (10)
CriterionFunction (1)
circle[r_, theta_] := {r Sin[theta], r Cos[theta]};
points = RandomVariate[MixtureDistribution[{1, 1}, {UniformDistribution[{{3 / 2, 2}, {0, 2 Pi}}], UniformDistribution[{{0, 1 / 2}, {0, 2 Pi}}]}], 1000];
data = circle@@@points;
ListPlot[data, PlotRange -> All]使用 Automatic CriterionFunction 构建分类器函数:
c = ClusterClassify[data]使用 Calinski–Harabasz 指数作为 CriterionFunction 构建分类器:
d = ClusterClassify[data, CriterionFunction -> "CalinskiHarabasz"]ListPlot[GroupBy[data, ToString @* c]]ListPlot[GroupBy[data, ToString @* d]]FeatureExtractor (1)
根据图像列表创建 ClassifierFunction,并对新实例进行分类:
flowers = {[image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image], [image]};c = ClusterClassify[flowers, 3]c[{[image], [image], [image], [image]}]创建一个自定义 FeatureExtractor 来提取特征:
fe = FeatureExtraction[flowers, (DominantColors[#, 1]&)]d = ClusterClassify[flowers, 3, FeatureExtractor -> fe]GatherBy[flowers, d]FeatureNames (1)
c = ClusterClassify[{{2.3, "male"}, {4.8, "male"}, {9, "female"}, {5.2, "female"}, {1, "male"}, {10, "male"}, {5, "female"}}, FeatureNames -> {"age", "gender"}]c[<|"age" -> 3, "gender" -> "male"|>]c[{3, "male"}]FeatureTypes (1)
c = ClusterClassify[{{2.3, "male"}, {4.8, "male"}, {9, "female"}, {5.2, "female"}, {1, "male"}, {10, "male"}, {5, "female"}}, FeatureTypes -> {"Numerical", "Nominal"}]d = ClusterClassify[{{2.3, "male"}, {4.8, "male"}, {9, "female"}, {5.2, "female"}, {1, "male"}, {10, "male"}, {5, "female"}}, FeatureTypes -> {"Nominal", "Nominal"}]{c[{3, " male"}], d[{3, "male"}]}Method (2)
SeedRandom[1234];
Dis = MixtureDistribution[{2, 2}, {UniformDistribution[{{-3, 3}, {-1, 0}}],
UniformDistribution[{{-3, 3}, { 2, 3}}]}];
data = RandomVariate[Dis, 1000];
ListPlot[data, PlotRange -> All]c = ClusterClassify[data]用 Information 来获取方法的说明信息:
Information[c, "MethodDescription"]ListPlot[Pick[data, c[data], #]& /@ {1, 2}]c = ClusterClassify[data, 2, Method -> "KMeans"]ListPlot[Pick[data, c[data], #]& /@ {1, 2}]Dis = MixtureDistribution[{1, 1, 1, 1}, {
MultinormalDistribution[{-1, -5}, {{2, 0}, {0, 2}}],
MultinormalDistribution[{-7, 1}, {{2, 0}, {0, 2}}],
MultinormalDistribution[{2, 7}, {{1, 0}, {0, .2}}], MultinormalDistribution[{5, -20}, {{2, 0}, {0, 2}}]}];
data = RandomVariate[Dis, 70000];
ListPlot[data, PlotRange -> All]使用 ClusterClassify 通过指定使用的方法查找分群,并且查看 AbsoluteTiming:
{t, c} = ClusterClassify[data, 4, Method -> "KMedoids"]//AbsoluteTimingListPlot[Pick[data, c[data], #]& /@ Range[4]]使用 ClusterClassify 查找分群,而不用指定使用的方法,并且查看 AbsoluteTiming:
c = ClusterClassify[data, 4]//AbsoluteTimingMissingValueSynthesis (1)
Dis = MixtureDistribution[{1, 1, 1, 1}, {
MultinormalDistribution[{-1, -5}, {{2, 0}, {0, 2}}],
MultinormalDistribution[{-7, 1}, {{2, 0}, {0, 2}}],
MultinormalDistribution[{2, 7}, {{1, 0}, {0, .2}}], MultinormalDistribution[{5, -20}, {{2, 0}, {0, 2}}]}];
data = RandomVariate[Dis, 70000];
ListPlot[data, PlotRange -> All]用 ClusterClassify 求聚类:
c = ClusterClassify[data, 4, Method -> "KMedoids"]c[{-3, Missing[]}, "TopProbabilities"]设置缺失值合成,如果有已知的值,则用估计的最可能的值替换每个缺失变量(这是默认行为):
c[{-3, Missing[]}, "TopProbabilities", MissingValueSynthesis -> "ModeFinding"]c[{-3, Missing[]}, "TopProbabilities", MissingValueSynthesis -> "RandomSampling"]Counts[Table[c[{-3, Missing[]}, MissingValueSynthesis -> "RandomSampling"], 100]]PerformanceGoal (1)
data = Join[RandomReal[{-1 / 5, 0}, {2000, 3}], RandomReal[{0, 1 / 5}, {2000, 3}]];
ListPointPlot3D[data, PlotRange -> All]{t, d} = ClusterClassify[data, PerformanceGoal -> "TrainingSpeed"]//AbsoluteTiming对某些随机产生的数据分群,并且查看 AbsoluteTiming:
datatest = RandomReal[{-1 / 2, 1 / 2}, {50000, 3}];d[datatest];//AbsoluteTiming{t, c} = ClusterClassify[data, PerformanceGoal -> "Speed"]//AbsoluteTiming对某些随机产生的数据分群,并且查看 AbsoluteTiming 与上面比较:
c[datatest];//AbsoluteTiming可视化检验数据的两个分群,并且注意设置 "TrainingSpeed" 如何给出更好的结果:
ListPointPlot3D[Pick[datatest, d[datatest], #]& /@ Range[2]]ListPointPlot3D[Pick[datatest, c[datatest], #]& /@ Range[2]]RandomSeeding (1)
colors = RandomColor[20]classifiers = Table[ClusterClassify[colors, 3], 5];#[RGBColor[0.18410183842296557, 0.8929803114282151, 0.139771903636146]]& /@ classifiers通过使用 RandomSeeding 选项的不同值来对相同颜色上的几个分类器进行训练:
newclassifiers = Table[ClusterClassify[colors, 3, RandomSeeding -> RandomInteger[20]], 5];#[RGBColor[0.18410183842296557, 0.8929803114282151, 0.139771903636146]]& /@ newclassifiers权值 (1)
data = Join[ Range[0, 5, 0.05], Range[25, 30, 0.05], {90}];Histogram[data]c = ClusterClassify[data]c[{20, 90}]weights = Append[ConstantArray[1, Length[data] - 1], 300];
c = ClusterClassify[data, Weights -> weights]c[{20, 90}]应用 (3)
SeedRandom[1234];
dataset = RandomReal[{-.5, .5}, {500, 2}];
dataset = Select[dataset, #[[1]] > #[[2]]&];classifiers = Table[ClusterClassify[dataset, n, Method -> "KMedoids"], {n, 16}];通过使用大量正态分布随机点上的分类器,将三角形分成各个部分:
data = RandomReal[{-.5, .5}, {10 ^ 4, 2}];
data = Select[data, #[[1]] > #[[2]]&];plots = Table[ListPlot[Pick[data, (classifiers[[n]])[data], #]& /@ Range[n], AspectRatio -> 1, Frame -> True, Axes -> False, FrameTicks -> None], {n, 16}];GraphicsGrid[Partition[plots, 4], ImageSize -> Medium]SeedRandom[1234];
𝒟 = MixtureDistribution[{1, 1, 0.5}, {
MultinormalDistribution[{-1, -5}, {{2, 0}, {0, 2}}],
MultinormalDistribution[{-7, 1}, {{2, 0}, {0, 2}}],
MultinormalDistribution[{2, 7}, {{2, 0}, {0, 2}}]}];
data = RandomVariate[𝒟, 2000];
ListPlot[data, PlotRange -> All]cl = ClusterClassify[data]ListPlot[Pick[data, cl[data], #]& /@ {1, 2, 3}]c2 = ClusterClassify[data, 3]ListPlot[Pick[data, Flatten[c2[data]], #]& /@ {1, 2, 3}]image = [image];
imageData = Flatten[ImageData[ColorConvert[image, "LAB"]], 1];c = ClusterClassify[imageData, 4, Method -> "KMedoids"];decision = c[imageData];LABColor@@@(Mean /@ (Pick[imageData, decision, #]& /@ Range[4]))Image /@ ComponentMeasurements[{image, Partition[decision, 426]}, "Mask"][[All, 2]]技术笔记
-
▪
- 把数据划分为聚类
文本
Wolfram Research (2016),ClusterClassify,Wolfram 语言函数,https://reference.wolfram.com/language/ref/ClusterClassify.html (更新于 2020 年).
CMS
Wolfram 语言. 2016. "ClusterClassify." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2020. https://reference.wolfram.com/language/ref/ClusterClassify.html.
APA
Wolfram 语言. (2016). ClusterClassify. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/ClusterClassify.html 年
BibTeX
@misc{reference.wolfram_2026_clusterclassify, author="Wolfram Research", title="{ClusterClassify}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/ClusterClassify.html}", note=[Accessed: 07-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_clusterclassify, organization={Wolfram Research}, title={ClusterClassify}, year={2020}, url={https://reference.wolfram.com/language/ref/ClusterClassify.html}, note=[Accessed: 07-September-2026]}