我刚刚进入数据挖掘,机器学习和集群领域。我遇到了特殊问题,并且不知道使用它来解决它的技术。
我想在特定数据格式上执行观察(对象或其他)的聚类。每次观察中的所有变量都是数字。我的数据输入如下所示:
1 2 3 4 5 6
1 3 5 7
2 9 10 11 12 13 14
45 1 22 23 24
假设 n 表示行(观察或1D向量,..), m 表示列(每个向量中的变量索引)。 n 可能是非常大的数字,并且 0< m< 100 即可。另外要点是同一观察(行)不能具有相同的值(在第一行中,一个值只能出现一次)。
所以,我想以某种方式执行聚类,我会根据包含每行/观察的相同值的数量将观察结果放在一个聚类中。
如果有两行,如:
1
1 2 3 4 5
如果没有匹配,那么它们应该聚集在同一个集群中。此外,一个群集中每行的数量也不应超过100。
生病的问题..?如果没有,只是为了我没有提到时间维度的信息。但是现在让我们跳过它。
所以,你们的任何指示,
谢谢和最诚挚的问候, JDK
答案 0 :(得分:1)
很难推荐任何东西,因为你的问题完全模糊,我们没有关于数据的信息。数据挖掘(特别是探索技术,如聚类)全部关于理解数据。所以我们无法提供最终答案。
您需要考虑两件事: 1.如果数据表明存在物种或性状,则Jaccard相似性(以及其他基于集合的指标)值得一试。 2.如果缺少信息量较少,也许您应该挖掘关联规则,而不是群集
无论哪种方式,如果不了解您的数据,这些数字与随机数一样好。您可以轻松地对随机数进行聚类,并花费数周时间来获得最佳无效结果!
答案 1 :(得分:1)
你的问题可以被视为一个词汇模型,每篇文章(观察行)的条款不超过100个吗?
无论如何,我认为你必须提供更多关于"为什么"和"如何"您想要对这些数据进行聚类。例如,我们有:
1 2 3
2 3 4
2 3 4 5
1 2 3 4
3 4 6
6 7 8
9 10
9 11
10 12 13 14
您期望的群集是什么?这个集群中有多少个集群?只有两个集群?
在您提供更多信息之前,根据您当前的描述,我认为您不需要群集算法,而是需要连接组件的结构。第一轮处理数据集以获取连接组件的信息,您需要第二轮检查属于哪些连接组件的每一行。以上面的例子为例,第一轮:
1 2 3 : 1 <- 1, 1 <- 2, 1 <- 3 (all point linked to the smallest point to
represent they are belong to the same cluster of the smallest point)
2 3 4 : 2 <- 4 (2 and 3 have already linked to 1 which is <= 2, so they do
not need to change)
2 3 4 5 : 2 <- 5
1 2 3 4 : 1 <- 4 (in fact this change are not essential because we have
1 <- 2 <- 4, but change this can speed up the second round)
3 4 6 : 3 <- 6
6 7 8 : 6 <- 7, 6 <- 8
9 10 : 9 <- 9, 9 <- 10
9 11 : 9 <- 11
10 11 12 13 14 : 10 <- 12, 10 <- 13, 10 <- 14
现在我们有一个森林结构来表示点的连通分量。第二轮你可以很容易地在每一行中找到一个点(最小的一个是最好的)并在森林中追踪它的根。具有相同根的行在您的文字中是相同的,即群集。例如:
1 2 3 : 1 <- 1, cluster root 1
2 3 4 5 : 1 <- 1 <- 2, cluster root 1
6 7 8 : 1 <- 1 <- 3 <- 6, cluster root 1
9 10 : 9 <- 9, cluster root 9
10 11 12 13 14 : 9 <- 9 <- 10, cluster root 9
此过程需要 O(k)空间,其中<em> k 是点数, O(nm + nh)时间,其中 r 是林结构的高度,其中 r &lt;&lt; 米。 我不确定这是否是您想要的结果。