标签: cluster-analysis

使用Python中的scikit-learn kmeans对文本文档进行聚类

我需要实现scikit-learn的kMeans来集群文本文档.该示例代码工作正常,因为它只是需要一些20newsgroups数据作为输入.我想使用相同的代码来集群文档列表,如下所示:

documents = ["Human machine interface for lab abc computer applications",
             "A survey of user opinion of computer system response time",
             "The EPS user interface management system",
             "System and human system engineering testing of EPS",
             "Relation of user perceived response time to error measurement",
             "The generation of random binary unordered trees",
             "The intersection graph of paths in trees",
             "Graph minors IV Widths of trees and well quasi ordering",
             "Graph minors A survey"]
Run Code Online (Sandbox Code Playgroud)

kMeans示例代码中我需要做哪些更改才能使用此列表作为输入?(简单地说'dataset = …

python cluster-analysis k-means python-2.7 scikit-learn

23
推荐指数
1
解决办法
3万
查看次数

n组指向相同大小的k个簇

可能重复:
具有相等簇大小的K均值算法变化

编辑:像casperOne指出,这个问题是重复的.无论如何,这是一个更普遍的问题,涵盖这一个:https://stats.stackexchange.com/questions/8744/clustering-procedure-where-each-cluster-has-an-equal-number-of-points

我的要求

在一个项目中,我需要将n个点(x,y)分组为相同大小的k个簇(n/k).其中x和y是双浮点数,n的范围可以是100到10000,k的范围是2到100.在算法运行之前k也是已知的.

我的实验

我开始使用http://en.wikipedia.org/wiki/K-means_clustering算法来解决这个问题,该算法非常快速地生成大致相同大小的k个簇.

但我的问题是,K-means产生大小相同的簇,我需要簇的大小完全相同(或者更精确:我需要它们的大小介于地板之间(n/k)和ceil(n/k)).

在你向我指出之前,是的,我在这里尝试了第一个答案K-means算法变化具有相同的簇大小,这听起来是个好主意.

主要思想是通过K-means对集群产生的数组进行后处理.从最大的集群到最小的集群.我们通过将额外的点移动到其他最近的集群来减少具有超过n/k成员的集群的大小.单独留下已经减少的集群.

这是我实现的伪代码:

n is the number of point
k is the number of cluster
m = n / k (the ideal cluster size)
c is the array of cluster after K-means
c' = c sorted by size in descending order
for each cluster i in c' where i = 1 to k - 1
    n = size of cluster i - m (the number …
Run Code Online (Sandbox Code Playgroud)

algorithm cluster-analysis k-means

22
推荐指数
2
解决办法
1万
查看次数

如何在Python中的scipy中从链接/距离矩阵计算集群分配?

如果您在Python中使用scipy进行此分层聚类调用:

from scipy.cluster.hierarchy import linkage
# dist_matrix is long form distance matrix
linkage_matrix = linkage(squareform(dist_matrix), linkage_method)
Run Code Online (Sandbox Code Playgroud)

那么从单个点到集群分配的有效方法是什么?即一个长度的矢量,N其中N是点的数量,其中每个条目i是点的簇数i,给定在给定的聚类上由给定阈值thresh生成的聚类数?

澄清一下:群集号将是在向树应用阈值后所处的群集.在这种情况下,您将为其所在的集群的每个叶节点获得一个唯一的集群.从某种意义上说,每个点都属于一个"最具体的集群",它由您剪切树形图的阈值定义.

我知道这scipy.cluster.hierarchy.fclusterdata会给你这个集群赋值作为它的返回值,但我从自定义距离矩阵和距离度量开始,所以我不能使用fclusterdata.问题归结为:我如何计算什么fclusterdata是计算 - 集群分配?

python numpy cluster-analysis scipy

22
推荐指数
1
解决办法
9551
查看次数

合并 NLP 中的相关词

我想定义一个新词,其中包含来自两个(或更多)不同词的计数值。例如:

Words Frequency
0   mom 250
1   2020    151
2   the 124
3   19  82
4   mother  81
... ... ...
10  London  6
11  life    6
12  something   6
Run Code Online (Sandbox Code Playgroud)

我想将母亲定义为mom + mother

Words Frequency
0   mother  331
1   2020    151
2   the 124
3   19  82
... ... ...
9   London  6
10  life    6
11  something   6
Run Code Online (Sandbox Code Playgroud)

这是一种替代定义具有某种含义的单词组的方法(至少对于我的目的而言)。

任何建议将不胜感激。

python nlp cluster-analysis wordnet word2vec

22
推荐指数
1
解决办法
2860
查看次数

分布式层次聚类

是否有任何算法可以帮助进行分层聚类?谷歌的map-reduce只有一个k-clustering的例子.在分层聚类的情况下,我不确定如何在节点之间划分工作.我找到的其他资源是:http://issues.apache.org/jira/browse/MAHOUT-19 但是,使用哪种算法并不明显.

algorithm cluster-analysis hierarchical-clustering

21
推荐指数
1
解决办法
7106
查看次数

Java集群库

我在java中寻找一个轻量级的集群库.我不需要在该库中使用100个聚类算法,只需5到7个算法就可以了.

我相信,你会问:"你需要什么样的算法和目的":).我只需要在聚类的帮助下对数据进行分类.例如K表示.

PS:我知道weka,但我不想使用它,因为它不仅仅专门用于聚类.

java math cluster-analysis

21
推荐指数
2
解决办法
2万
查看次数

基于Web的大型图形绘制库

是否有任何好的javascript库用于在网页中绘制图形?我想要一个现代的HTML5库,最好使用canvas和/或webgl.我已经 发现 对夫妇 良好的 网络 ,同时 研究,但他们不扩展到我的(高达2000个顶点+ 20000个边缘),像桌面软件运行图的大小Gephi可以轻松地处理或他们闪光/ silverlight-根据.所以,到目前为止,我最好的发现是基于d3.js实现.如果他们在Seadragon风格的缩放中内置了一些基于弹簧/力的自动布局/聚类算法也会很好.

javascript canvas cluster-analysis webgl graph-visualization

21
推荐指数
3
解决办法
1万
查看次数

scikit-learn DBSCAN内存使用情况

更新:最后,我选择用于聚类我的大型数据集的解决方案是Anony-Mousse在下面提出的解决方案.也就是说,使用ELKI的DBSCAN实现我的聚类而不是scikit-learn.它可以从命令行运行,并通过适当的索引,在几个小时内完成此任务.使用GUI和小样本数据集来计算您想要使用的选项,然后前往城镇.值得研究.Anywho,请继续阅读我原始问题的描述和一些有趣的讨论.

我有一个包含大约250万个样本的数据集,每个样本都有35个特征(浮点值),我正在尝试聚类.我一直在尝试使用scikit-learn的DBSCAN实现,使用曼哈顿距离度量和从数据中提取的一些小随机样本估计的epsilon值.到现在为止还挺好.(这里是摘录,供参考)

db = DBSCAN(eps=40, min_samples=10, metric='cityblock').fit(mydata)
Run Code Online (Sandbox Code Playgroud)

我现在的问题是我很容易耗尽内存.(我目前正在使用16 GB RAM的机器)

我的问题是,DBSCAN是否在运行时动态计算成对距离矩阵,那是什么在吞噬我的记忆?(250万^ 2)*8字节显然是愚蠢的大,我会理解.我应该不使用这种fit()方法吗?更一般地说,有没有办法绕过这个问题,或者我一般在这里咆哮错误的树?

如果答案结果明显,请道歉.我已经困惑了几天.谢谢!

附录:如果有人能更明确地解释我fit(X)fit_predict(X)我之间的区别,我也会感激 - 我担心我不太明白.

附录#2:可以肯定的是,我只是在一台拥有~550 GB RAM的机器上尝试了这个并且它仍然爆炸,所以我觉得DBSCAN可能会尝试制作成对距离矩阵或者我明显不想要的东西去做.我想现在最大的问题是如何阻止这种行为,或找到更适合我需要的其他方法.谢谢你在这里与我合作.

附录#3(!):我忘了附上追溯,就在这里,

Traceback (most recent call last):
  File "tDBSCAN.py", line 34, in <module>
    db = DBSCAN(eps=float(sys.argv[2]), min_samples=10, metric='cityblock').fit(mydata)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/base.py", line 329, in fit_predict
    self.fit(X)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/cluster/dbscan_.py", line 186, in fit
    **self.get_params())
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/cluster/dbscan_.py", line 69, in dbscan
    D = pairwise_distances(X, metric=metric)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/metrics/pairwise.py", line 651, in pairwise_distances
    return func(X, Y, **kwds)
  File "/home/jtownsend/.local/lib/python2.6/site-packages/sklearn/metrics/pairwise.py", line …
Run Code Online (Sandbox Code Playgroud)

python cluster-analysis data-mining dbscan scikit-learn

20
推荐指数
3
解决办法
1万
查看次数

scikit-learn:使用DBSCAN聚类文本文档

我正在尝试使用scikit-learn来集群文本文档.总的来说,我找到了解决办法,但我遇到了具体问题.我发现的大多数例子都说明了使用scikit-learn和k-means作为聚类算法的聚类.在我的设置中采用k-means这些例子原则上是有效的.但是,k-means不适合,因为我不知道簇的数量.从我到目前为止所读到的内容 - 如果需要请在这里纠正我 - 在我的情况下,DBSCAN或MeanShift似乎更合适.scikit-learn网站提供了每个群集算法的示例.现在的问题是,对于DBSCAN和MeanShift,我得到了我无法理解的错误,更不用解决了.

我的最小代码如下:

docs = []
for item in [database]:
    docs.append(item)

vectorizer = TfidfVectorizer(min_df=1)
X = vectorizer.fit_transform(docs)

X = X.todense() # <-- This line was needed to resolve the isse

db = DBSCAN(eps=0.3, min_samples=10).fit(X)
...
Run Code Online (Sandbox Code Playgroud)

(我的文档已经处理完毕,即已删除了停用词并且已应用了Porter Stemmer.)

当我运行此代码时,我在实例化DBSCAN并调用时收到以下错误fit():

...
File "/usr/local/lib/python2.7/dist-packages/sklearn/cluster/dbscan_.py", line 248, in fit
clust = dbscan(X, **self.get_params())
File "/usr/local/lib/python2.7/dist-packages/sklearn/cluster/dbscan_.py", line 86, in dbscan
n = X.shape[0]
IndexError: tuple index out of range
Run Code Online (Sandbox Code Playgroud)

单击该行dbscan_.py引发错误,我注意到以下行

...
X = np.asarray(X)
n = X.shape[0]
... …
Run Code Online (Sandbox Code Playgroud)

cluster-analysis machine-learning data-mining dbscan scikit-learn

20
推荐指数
2
解决办法
9676
查看次数

DBSCAN用于聚类地理位置数据

我有一个纬度和经度对的数据框.

这是我的数据帧外观.

    order_lat  order_long
0   19.111841   72.910729
1   19.111342   72.908387
2   19.111342   72.908387
3   19.137815   72.914085
4   19.119677   72.905081
5   19.119677   72.905081
6   19.119677   72.905081
7   19.120217   72.907121
8   19.120217   72.907121
9   19.119677   72.905081
10  19.119677   72.905081
11  19.119677   72.905081
12  19.111860   72.911346
13  19.111860   72.911346
14  19.119677   72.905081
15  19.119677   72.905081
16  19.119677   72.905081
17  19.137815   72.914085
18  19.115380   72.909144
19  19.115380   72.909144
20  19.116168   72.909573
21  19.119677   72.905081
22  19.137815   72.914085
23  19.137815   72.914085
24  19.112955   72.910102
25 …
Run Code Online (Sandbox Code Playgroud)

python cluster-analysis dbscan

20
推荐指数
3
解决办法
3万
查看次数