Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 通过SOM进行聚类_Matlab_Cluster Analysis_Som - Fatal编程技术网

Matlab 通过SOM进行聚类

Matlab 通过SOM进行聚类,matlab,cluster-analysis,som,Matlab,Cluster Analysis,Som,我有71个属性和17个实例的数据。我想把他们分成六组或六类。我尝试了newsom(数据,[6]) 结果如下图所示。我不知道集群位于何处,如何通过编程找到它们 我阅读了所有关于SOM的论文,但始终不知道如何获取这些集群中的集群和数据?因此,在回答我的问题时,也请指出。您必须仔细研究有关newsom(目前已弃用)或selforgmap函数返回结构的文档。在IW字段中,您可以找到N*N簇坐标。例如: somnet = newsom( data, [ 6 6 ] ) my_clusters = s

我有71个属性和17个实例的数据。我想把他们分成六组或六类。我尝试了
newsom(数据,[6])

结果如下图所示。我不知道集群位于何处,如何通过编程找到它们



我阅读了所有关于SOM的论文,但始终不知道如何获取这些集群中的集群和数据?因此,在回答我的问题时,也请指出。

您必须仔细研究有关newsom(目前已弃用)或selforgmap函数返回结构的文档。在IW字段中,您可以找到N*N簇坐标。例如:

somnet = newsom( data, [ 6 6 ] )
my_clusters = somnet.IW;

myclusters
将有N*N行(在您的示例中为6*6),M列等于输入维度。仅此而已。

由于实例与贴图节点的比率很高,因此最终贴图中的节点没有“赢得”实例,因此可以使用这些“空”节点分离贴图。有关som上群集的更多信息,请查看以下内容:


请记住,SOM是一种无监督的聚类方法,即您不定义聚类的数量,数据会告诉您这一点。

这没有直接帮助,但选择自组织映射是否有原因?我总是发现它不雅观,耗时,而且在少数几个例子中,我看到它(与我一起工作的人)被应用于产生大多数无用的集群。也许你是对的,它不是集群的一种方式吗?如果没有,请建议其他方法。17个实例并不多。我建议使用分层聚类,例如使用单链接聚类和完全链接聚类。这将为您的数据提供一个句柄,您可以使用生成的树将数据分为六个类。也可以使用k-means,将k设置为6。对于所有的方法,你需要确保没有一个属性支配其他属性(除非这是你想要的);可能需要标准化。最后,对于某些类型的数据(如时间进程),基于皮尔逊相关系数的聚类可能是合适的。谢谢您的回复。我知道SOM是一种无监督的聚类方法。问题是,在分组完成后,我需要4个或6个集群。不幸的是,KMead算法不返回满意的结果。@ USER 1900,599,如果你需要少量的集群,你可以使用一个较小的地图(2x3),并考虑每个地图节点一个集群,但这不推荐使用SOM。您还可以在SOM上实现分层集群,如我在参考的论文中所述,在这里您可以定义所需的最终集群数量。谢谢。我尝试了分层聚类和k-means。问题是一些数据点通过不同的群集过程从一个群集转移到另一个群集。@user1900559,这是群集过程中的常见问题。不同的算法产生不同的结果。这里有聚类质量度量(谷歌it,你会发现很多信息)来评估你的结果并做出相应的选择。非常感谢。IW给出每个数据的节点权重。对于我的数据,my_集群中有36×71的数据。因此,这些数据仍然没有显示集群。在这种情况下,权重是集群坐标。所以,36行中的每一行都是代表簇中心的71维向量。