kmedoids
k-medoids集群
语法
描述
执行k-medoids集群把…的观察结果分割n——- - - - - -p矩阵idx
= kmedoids (X
,k
)X
成k
集群,并返回一个n1的向量idx
包含每个观测值的聚类指数。行X
对应点,列对应变量。默认情况下,kmedoids
使用平方欧几里得距离度量和k——+ +算法用于选择初始簇介质位置。
例子
将数据分组为两个簇
随机生成数据。
rng (“默认”);%为了重现性X = [randn(100,2)*0.75+ones(100,2);randn(100 2) * 0.55的(100 2)];图;情节(X (: 1) X (:, 2),“。”);标题(“随机生成数据”);
将数据分组到两个簇中kmedoids
.使用cityblock
距离度量。
Opts = statset(“显示”,“通路”);[idx,C,sum,d,midx,info] = kmedoids(X,2, 1)“距离”,“cityblock”,“选项”、选择);
最佳总距离= 209.856
信息
是一个结构体,其中包含有关如何执行算法的信息。例如,bestReplicate
字段表示用于生成最终解决方案的复制。在本例中,之所以使用复制数1,是因为默认算法的默认复制数为1,即帕姆
在这种情况下。
信息
信息=带有字段的结构体:算法:'pam'开始:'plus'距离:'cityblock'迭代:2最佳复制:1
绘制集群和集群介质。
图;情节(X (idx = = 1,1) X (idx = = 1、2),“r”。,“MarkerSize”, 7)在情节(X (idx = = 2, 1), X (idx = = 2, 2),“b”。,“MarkerSize”7)情节(C (: 1), C (:, 2),“有限公司”,…“MarkerSize”7“线宽”传说,1.5)(“集群1”,《集群2》,“Medoids”,…“位置”,“西北”);标题(“集群分配和介质”);持有从
使用k-介质聚类分类数据
本例使用“Mushroom”数据集[3][4][5][6][7]来自UCI机器学习档案[7],见http://archive.ics.uci.edu/ml/datasets/Mushroom。该数据集包括对各种蘑菇的8124个观察结果的22个预测因子。预测器是分类数据类型。例如,帽形以特征分类“b”
用于钟形帽和“c”
为锥形。蘑菇的颜色也有特征分类“n”
对于棕色,和“p”
为粉红色。该数据集还包括每种蘑菇的可食用或有毒分类。
由于蘑菇数据集的特征是分类的,因此不可能定义几个数据点的平均值,因此广泛使用k-means聚类算法不能有效地应用于该数据集。k- mediids是一个相关的算法,它将数据划分为k不同的聚类,通过找到最小化数据中点与其最近的中间点之间的不相似之和的中间点。
集合的中位数是该集合中与其他成员的平均不相似度最小的成员。相似性可以定义为许多类型的数据,不允许计算平均值,允许k-介质可以用于更广泛的问题k则。
使用k-medoids,本例基于所提供的预测因子将蘑菇分为两组。然后,它探讨了这些簇和蘑菇分类之间的关系,这些蘑菇要么是可食用的,要么是有毒的。
本例假设您已经下载了“Mushroom”数据集[3][4][5][6][7]从UCI数据库(http://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/)中获取,并将其保存为名为agaricus-lepiota.txt的文本文件。数据中没有列标头,所以readtable
使用默认的变量名。
清晰的所有Data = readtable(“agaricus-lepiota.txt”,“ReadVariableNames”、假);
展示前5个蘑菇及其最初的几个特征。
数据(1:5,1:10)
ans = Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10 ____ ____ ____ ____ ____ ____ ____ ____ ____ _____ ' p ' ' x ' s ' ' n ' ' t ' p ' f ' c ' ' n ' k ' ' e ' x ' s ' y ' ' t ' ' ' ' f ' c ' ' b ' k ' ' e ' b ' s ' w ' ' t ' l ' f ' c ' ' b ' n ' p ' x ' y ' w ' ' t ' p ' f ' c ' ' n ' n ' ' e ' x ' s ' g ' ' f ' n ' f ' w ' ' b ' k '
提取第一列,标记可食用和有毒组的数据。然后删除该列。
标签= data(:,1);Labels = categorical(Labels {:,:});Data (:,1) = [];
存储预测器(特征)的名称,在http://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/agaricus-lepiota.names中有描述。
VarNames = {“cap_shape”“cap_surface”“cap_color”“淤青”“气味”…“gill_attachment”“gill_spacing”“gill_size”“gill_color”…“stalk_shape”“stalk_root”“stalk_surface_above_ring”…“stalk_surface_below_ring”“stalk_color_above_ring”…“stalk_color_below_ring”“veil_type”“veil_color”“ring_number”….“ring_type”“spore_print_color”“人口”“栖息地”};
设置变量名。
data.Properties.VariableNames = VarNames;
共有2480个缺失值,记为“?”
.
sum (char(数据{:,:})= =“?”)
Ans = 2480
根据对数据集及其描述的检查,缺失值只属于第11个变量(stalk_root
)。从表中删除列。
Data (:,11) = [];
kmedoids
只接受数字数据。您需要将您拥有的类别转换为数字类型。用于定义数据的不相似性的距离函数将基于分类数据的双重表示。
Cats = categorical(data{:,:});Data = double(cats);
kmedoids
可以使用pdist2支持的任何距离度量来集群。金宝app对于本例,您将使用汉明距离对数据进行聚类,因为这是分类数据的合适距离度量,如下所示。两个矢量之间的汉明距离是矢量分量不同的百分比。例如,考虑这两个向量。
V1 = [1 0 2 1]
;
V2 = [1 1 2 1]
;
它们在第一,三,四坐标上是相等的。由于4个坐标中有1个不同,这两个向量之间的汉明距离为。25。
你可以使用这个函数pdist2
测量第一和第二行数据之间的汉明距离,即蘑菇分类数据的数值表示。值0.2857表示蘑菇的21个特征中有6个不同。
: pdist2(数据(1),数据(2:)“汉明”)
Ans = 0.2857
在本例中,您将根据特征将蘑菇数据聚类到两个簇中,以查看聚类是否与可食性相对应。的kmedoids
保证函数收敛于聚类准则的局部极小值;然而,这可能不是问题的全局最小值。将问题聚类几次是个好主意“复制”
参数。当“复制”
被设置为一个值,n,大于1,则运行k-medoids算法n次,并返回最佳结果。
运行kmedoids
要根据汉明距离将数据分成2个簇,并返回3个重复的最佳结果,您可以运行以下命令。
rng (“默认”);%为了重现性[IDX, C, SUMD, D, MIDX, INFO] = kmedoids(data,2)“距离”,“汉明”,“复制”3);
让我们假设预测的第一组蘑菇是有毒的,第二组都是可食用的。为了确定聚类结果的性能,根据已知的标签,计算第一组中有多少蘑菇是有毒的,第二组中有多少蘑菇是可食用的。换句话说,计算假阳性、假阴性以及真阳性和真阴性的数量。
构造一个混淆矩阵(或匹配矩阵),其中对角线元素分别表示真阳性和真阴性的数量。非对角线元素分别表示假阴性和假阳性。为方便起见,请使用confusionmat
函数,它计算给定已知标签和预测标签的混淆矩阵。中获取预测的标签信息IDX
变量。IDX
每个数据点包含值1和2,分别代表有毒和可食用组。
predLabels =标签;为预测的标签初始化一个向量。predLabels(IDX==1) = categorical({“p”});%将组1指定为有毒。predLabels(IDX==2) = categorical({“e”});%指定第二组是可食用的。confMatrix = confusionmat(labels,predLabels)
confMatrix = 4176 32 816 3100
在4208个可食用蘑菇中,4176个被正确预测为第2组(可食用组),32个被错误预测为第1组(有毒组)。同样,在3916个毒蘑菇中,3100个被正确预测为第1组(有毒组),816个被错误预测为第2组(可食用组)。
给定这个混淆矩阵,计算准确度和精度,前者是真实结果(真阳性和真阴性)与整体数据的比例,后者是真阳性与所有阳性结果(真阳性和假阳性)的比例。
accuracy = (confMatrix(1,1)+confMatrix(2,2))/(sum(sum(confMatrix)))
精度= 0.8956
precision = confMatrix(1,1) / (confMatrix(1,1)+confMatrix(2,1))
精度= 0.8365
结果表明,将k-medoids算法应用于蘑菇的分类特征会产生与可食性相关的聚类。
输入参数
X
- - - - - -数据
数字矩阵
数据,指定为数字矩阵。一排排的X
对应观察值,列对应变量。
k
- - - - - -介质数
正整数
数据中的介质数,指定为正整数。
名称-值参数
指定可选的参数对为Name1 = Value1,…,以=家
,在那里名字
是参数名和吗价值
是对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来名字
在报价。
例子:“距离”,“欧几里得”、“复制”、3、“选项”,statset (UseParallel, 1)
指定欧几里得距离,三个复制介质在不同的起始值,并使用并行计算。
算法
- - - - - -寻找介质的算法
“帕姆”
|“小”
|“克拉拉”
|“大”
查找介质的算法,指定为由逗号分隔的对“算法”
和“帕姆”
,“小”
,“克拉拉”
,或“大”
.默认算法取决于的行数X
.
如果的行数
X
小于3000,“帕姆”
是默认算法。如果行数在3000到10000之间,
“小”
是默认算法。对于所有其他情况,
“大”
是默认算法。
您可以通过显式声明算法来覆盖默认选择。该表总结了可用的算法。
算法 | 描述 |
---|---|
“帕姆” |
围绕介质分区(PAM)是解决问题的经典算法k中描述的介质问题[1].在应用初始化函数选择初始媒介id位置之后,程序执行PAM算法的交换步骤,即搜索媒介id和非媒介id之间所有可能的交换,以查看媒介id到集群成员距离的总和是否下降。方法指定要使用哪个初始化函数 算法的过程如下。
该算法迭代构建和交换步骤,直到介质不更改或满足其他终止条件。 在某些情况下,该算法可以产生比其他算法更好的解决方案,但它可能运行金宝搏官方网站时间过长。 |
“小” |
使用类似于k-means算法的算法来查找 算法的过程如下。
该算法重复这些步骤,直到不再发生更新或满足其他终止条件。该算法具有可选的类似pam的在线更新阶段(由 |
“克拉拉” |
大型应用程序集群(CLARA)[1]在数据的随机子集上重复执行PAM算法。它旨在通过采样来克服PAM算法带来的缩放挑战。 算法的过程如下。
算法重复这些步骤,直到介质没有改变,或者满足其他终止条件。 为了获得最佳性能,建议执行多个复制。默认情况下,程序执行五次复制。每个复制样本 |
“大” |
这和 |
例子:“算法”、“帕姆的
OnlinePhase
- - - - - -执行类似pam的在线更新阶段的标志
“上”
(默认)|“关闭”
执行类似pam的在线更新阶段的标志,指定为由逗号分隔的对“OnlinePhase”
和“上”
或“关闭”
.
如果是的话在
,然后kmedoids
中的Lloyd迭代之后对介质执行类似pam的更新小
和大
算法。在这个在线更新阶段,算法在每个集群中选择离mediid最远和最近的一小部分数据点。对于每个选定的点,它重新分配整个数据集的聚类,并检查这是否产生比最已知的距离更小的距离总和。
换句话说,交换考虑仅限于靠近介质介质和远离介质介质的点。为了改进聚类,考虑了近点。考虑远点是为了避免局部极小值。打开这个特性往往会提高两种算法生成的解决方案的质量。金宝搏官方网站总运行时间也趋于增加,但是增加的时间通常小于PAM的一次迭代。
例子:OnlinePhase,“了”
距离
- - - - - -距离度量
“sqEuclidean”
(默认)|“欧几里得”
|特征向量|字符串标量|函数处理|……
距离度量,指定为下表中描述的距离度量的名称,或函数句柄。kmedoids
最小化介质到集群成员距离的总和。
价值 | 描述 |
---|---|
“sqEuclidean” |
平方欧几里得距离(默认) |
“欧几里得” |
欧氏距离 |
“seuclidean” |
标准化欧氏距离。每个观测值之间的坐标差通过除以标准偏差的相应元素来缩放, |
“cityblock” |
城市街区距离 |
闵可夫斯基的 |
闵可夫斯基距离。指数是2。 |
“chebychev” |
切比契夫距离(最大坐标差) |
“mahalanobis” |
马氏距离用样本协方差 |
的余弦 |
1减去两点夹角的余弦(作为向量处理) |
“相关” |
1减去点之间的样本相关性(作为值序列处理) |
“枪兵” |
1减去观测值之间的样本斯皮尔曼秩相关(作为值序列处理) |
“汉明” |
汉明距离,也就是不同坐标的百分比 |
“jaccard” |
1减去雅卡德系数,也就是不同的非零坐标的百分比 |
@ |
自定义距离函数句柄。距离函数有这样的形式 函数D2 = distfun(ZI,ZJ)距离计算%…
如果您的数据不是稀疏的,通常可以通过使用内置距离而不是函数句柄更快地计算距离。 |
有关每个距离度量的定义,请参见距离度量.
例子:“距离”,“汉明”
选项
- - - - - -选择控制迭代算法以最小化拟合准则
[]
(默认)|返回的结构数组statset
控制迭代算法以最小化拟合标准的选项,指定为由逗号分隔的对组成“选项”
返回一个结构数组statset
.金宝app结构数组的支持字段指定控制迭代算法的选项。该表总结了支持的字段。金宝app
场 | 描述 |
---|---|
显示 |
显示输出水平。的选择是“关闭” (默认),“通路” . |
麦克斯特 |
允许的最大迭代次数。默认值为One hundred. . |
UseParallel |
如果真正的 ,并行计算。如果Parallel Computing Toolbox™不可用,则在串行模式下进行计算。默认值为假 ,表示串行计算。 |
UseSubstreams |
设置为真正的 以可重复的方式并行计算。默认值为假 .为了计算重现性,还必须设置流 到允许子流的类型:“mlfg6331_64” 或“mrg32k3a” . |
流 |
一个RandStream 对象或此类对象的单元数组。有关统计和机器学习工具箱™中的这些选项和并行计算的详细信息,请参阅加快统计计算或输入帮助parallelstats 在命令行。 |
例子:“选项”,statset(“显示”,“关闭”)
复制
- - - - - -使用新的初始集群介质位置重复集群的次数
正整数
使用新的初始集群介质位置重复集群的次数,指定为正整数。默认值取决于选择的算法。为帕姆
和小
,默认为1。为克拉拉
,默认值为5。为大
,默认值为3。
例子:“复制”,4
NumSamples
- - - - - -执行时从数据中获取的样本数克拉拉
算法
40 + 2 * k
(默认)|正整数
从数据中获取的样本数克拉拉
算法,指定为正整数。默认的样本数计算为40 + 2 * k
.
例子:“NumSamples”,160年
PercentNeighbors
- - - - - -使用大型算法检查的数据集的百分比
0.001(默认)|0到1之间的标量值
要检查的数据集的百分比大
算法,指定为正数。
该程序检查percentneighbors *大小(X, 1)
介质的邻居数。如果聚类内距离和没有改进,则算法终止。
该参数的值在0和1之间,其中接近1的值倾向于给出更高质量的解,但算法需要更长的运行时间,接近0的值倾向于给出较低质量的解,但完成得更快。金宝搏官方网站
例子:“PercentNeighbors”,0.01
开始
- - - - - -选择初始簇介质位置的方法
“+”
(默认)|“样本”
|“集群”
|矩阵
选择初始簇介质位置的方法,指定为由逗号分隔的对“开始”
和“+”
,“样本”
,“集群”
,或者一个矩阵。该表总结了可用的方法。
方法 | 描述 |
---|---|
“+” (默认) |
选择k 观察从X 根据k——+ +算法用于集群中心初始化。 |
“样本” |
选择k 观察从X 在随机的。 |
“集群” |
对的随机子样本(10%)进行初步聚类阶段X .初始化阶段本身使用样本 ,即观察值是随机选择的。 |
矩阵 | 一个自定义k ——- - - - - -p起始位置矩阵。在这种情况下,你可以进去[] 为k 输入参数,和kmedoids 推断k 从矩阵的第一维开始。您还可以提供一个3-D数组,暗示为的值“复制” 从数组的第三维。 |
例子:“开始”、“样本”
数据类型:字符
|字符串
|单
|双
输出参数
idx
—介质索引
数值列向量
中间索引,作为数字列向量返回。idx
有多少行X
,每一行表示对应观测值的中间值赋值。
C
—集群介质位置
数字矩阵
群集介质位置,作为数字矩阵返回。C
是一个k——- - - - - -p矩阵,其中行j是集群的媒介吗j
sumd
-点到中间距离的簇内和
数值列向量
点到中间距离的簇内和,作为数值列向量返回。sumd
是一个k
-by1向量,其中元素j是簇内点到中间距离的和吗j.
D
-从每个点到每个介质的距离
数字矩阵
从每个点到每个介质的距离,作为数值矩阵返回。D
是一个n——- - - - - -k
矩阵,其中元素(j,米)是观察到的距离j对medoid米.
信息
-算法信息
结构体
算法信息,作为结构返回。信息
包含函数在执行时使用的选项,例如k-介质聚类算法(算法
),用于选择初始聚类介质位置的方法(开始
),距离度量(距离
),在最佳复制中进行的迭代次数(迭代
)和返回结果的复制数(bestReplicate
)。
更多关于
k-medoids集群
k- medidoids聚类是一种划分方法,通常用于需要对离群数据、任意距离度量或平均值或中位数没有明确定义的鲁棒性的领域。
它类似于k-均值,两种方法的目标都是将一组测量值或观察值划分为k子集或聚类,以便子集最小化测量值与测量值的聚类中心之间的距离之和。在k-means算法中,子集的中心是子集中测量值的平均值,通常称为质心。在k-medoids算法中,子集的中心是子集的一个成员,称为medoid。
的k-medoids算法返回的是数据集中的实际数据点。这允许您在数据集中不存在数据均值的情况下使用该算法。这是两者的主要区别k-medoids和k-表示质心返回的位置k-means可能不在数据集中。因此k- mediids对于无法定义或解释平均值的分类数据的聚类很有用。
这个函数kmedoids
提供几个迭代算法,使所有簇上从每个对象到其簇介质的距离总和最小化。其中一种算法被称为围绕媒质划分(PAM)[1]它分两步进行。
构建步骤:每个步骤k集群与一个潜在的媒介相关联。方法指定的技术执行此赋值
“开始”
名称-值对参数。交换步骤:在每个簇中,每个点作为一个潜在的中间点进行测试,通过检查使用该点作为中间点的簇内距离的总和是否变小。如果是,则将该点定义为新介质。然后将每个点分配给具有最近介质的集群。
该算法迭代构建和交换步骤,直到介质不更改或满足其他终止条件。
您可以使用几个可选的输入参数来控制最小化的细节kmedoids
,包括用于集群介质的初始值和用于最大迭代次数的参数。默认情况下,kmedoids
使用k——+ +算法用于簇介质初始化和平方欧几里德度量来确定距离。
参考文献
bbb10考夫曼,L.和卢梭,P. J.(2009)。在数据中发现组:聚类分析导论。新泽西州霍博肯:约翰威利父子公司。
[2] Park, H-S, and Jun, C-H。(2009)。一种简单快速的k -媒质聚类算法。专家系统与应用。36,3336-3341。
[3] Schlimmer, j.s(1987)。通过代表性调整获得概念(技术报告87-19)。博士论文,加州大学欧文分校信息与计算机科学系。
[4] Iba, W。,Wogulis,J., and Langley,P. (1988). Trading off Simplicity and Coverage in Incremental Concept Learning. In Proceedings of the 5th International Conference on Machine Learning, 73-79. Ann Arbor, Michigan: Morgan Kaufmann.
[10] Duch W, a.r.和Grabczewski, K.(1996)使用反向传播网络从训练数据中提取逻辑规则。第一届软计算在线研讨会论文集,19-30,pp. 25-30。
[b] Duch, W., Adamczak, R., Grabczewski, K., Ishikawa, M., and Ueda, H.(1997)。利用约束反向传播网络提取清晰的逻辑规则——两种新方法的比较。欧洲人工神经网络研讨会论文集(ESANN' 1997),比利时布鲁日16-18。
[10] Bache, K.和Lichman, M.(2013)。UCI机器学习存储库[http://archive.ics.uci.edu/ml]。加州尔湾:加州大学信息与计算机科学学院。
扩展功能
自动平行支撑金宝app
通过使用并行计算工具箱™自动运行并行计算来加速代码。
要并行运行,请指定“选项”
在此函数的调用中调用名称-值参数,并设置“UseParallel”
字段的选项结构真正的
使用statset
.
例如:“选项”,statset (UseParallel,真的)
有关并行计算的详细信息,请参见运行MATLAB函数与自动并行支持金宝app(并行计算工具箱).
版本历史
另请参阅
Abrir比如
Tiene una versión modificada de este ejemploo。是否对所有的修改进行了修改?
MATLAB编程
在MATLAB中,该函数对应于一个最基本的函数:
在MATLAB中,用MATLAB编写了仿真程序。Los navegadores web no admit commandos de MATLAB。
你亦可选择下列网址:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。