今天我正在尝试学习一些关于K-means的东西.我已经理解了算法,我知道它是如何工作的.现在我正在寻找正确的k ...我发现肘部标准作为检测正确k的方法,但我不明白如何使用它与scikit学习?!在scikit中,我学会了以这种方式聚集事物
kmeans = KMeans(init='k-means++', n_clusters=n_clusters, n_init=10)
kmeans.fit(data)
Run Code Online (Sandbox Code Playgroud)
那么我应该多次为n_clusters = 1 ... n这样做并观察错误率以获得正确的k?认为这会很愚蠢,需要花费很多时间?!
python cluster-analysis machine-learning k-means scikit-learn
我在R中使用标准stats
包在636,688行和7列的数据集上运行k-means聚类:kmeans(dataset, centers = 100, nstart = 25, iter.max = 20)
.
我收到以下错误:Quick-TRANSfer stage steps exceeded maximum (= 31834400)
,虽然人们可以在查看代码http://svn.r-project.org/R/trunk/src/library/stats/R/kmeans.R -我不确定的是什么出错了.我认为我的问题与我的数据集的大小有关,但如果有人能够一劳永逸地澄清我可以采取哪些措施来缓解这个问题,我将不胜感激.
数据集是pandas数据帧.这是sklearn.cluster.KMeans
km = KMeans(n_clusters = n_Clusters)
km.fit(dataset)
prediction = km.predict(dataset)
Run Code Online (Sandbox Code Playgroud)
这就是我如何决定哪个实体属于哪个集群:
for i in range(len(prediction)):
cluster_fit_dict[dataset.index[i]] = prediction[i]
Run Code Online (Sandbox Code Playgroud)
这就是数据集的外观:
A 1 2 3 4 5 6
B 2 3 4 5 6 7
C 1 4 2 7 8 1
...
Run Code Online (Sandbox Code Playgroud)
其中A,B,C是指数
这是使用k-means的正确方法吗?
我试图看看两者的表现是否可以根据他们的目标函数进行比较?
有没有人有一篇论文解释了Ckmeans.1d.dp算法是如何工作的?
或者:在一维中进行k均值聚类的最佳方法是什么?
我正在阅读k-means聚类和k-medoid聚类之间的区别.
据推测,在k-medoid算法中使用成对距离度量有一个优点,而不是更熟悉的欧几里德距离型度量平方和来评估我们用k均值找到的方差.显然,这种不同的距离度量会以某种方式降低噪音和异常值.
我已经看到了这个说法,但我还没有看到任何关于这一主张背后的数学的理由.
是什么使k-medoid中常用的成对距离测量更好?更准确地说,缺乏平方项如何使k-medoids具有与取中位数概念相关的理想属性?
是否有k-Means聚类算法的在线版本?
在线我的意思是每个数据点都是串行处理的,一旦进入系统就会一次处理,从而节省了实时使用时的计算时间.
我写了一篇自我并取得了不错的成绩,但我真的更喜欢有一些"标准化"的东西来引用,因为它将在我的硕士论文中使用.
此外,有没有人有其他在线群集算法的建议?(lmgtfy失败;))
我有100万个5维点,我需要将其分组为k群集,其中k << 100万.在每个星团中,没有两个点应该相距太远(例如,它们可以是具有指定半径的边界球).这意味着可能必须有许多大小为1的集群.
但!我需要运行时间远低于n ^ 2.n log n左右应该没问题.我正在进行这种聚类的原因是为了避免计算所有n个点的距离矩阵(这需要n ^ 2次或几个小时),而我只想计算簇之间的距离.
我尝试了pycluster k-means算法,但很快意识到它太慢了.我也试过以下贪婪的方法:
每个维度将空间切成20块.(所以总共有20 ^ 5件).我会根据它们的质心将簇存储在这些网格盒中.
对于每个点,检索r(最大边界球半径)内的网格框.如果有足够的群集,请将其添加到该群集,否则创建新群集.
但是,这似乎给了我比我想要的更多的集群.我也实现了两次类似的方法,它们给出了非常不同的答案.
是否有任何标准的聚类方法比n ^ 2时间快?概率算法没问题.
algorithm cluster-analysis machine-learning data-mining k-means
我试图将差距统计和预测强度的R实现http://edchedch.wordpress.com/2011/03/19/counting-clusters/转换为python脚本,用于估计3个簇的虹膜数据中的簇数.我没有得到3个集群,而是在不同的运行中获得了不同的结果,其中3(实际的集群数)几乎没有估计.图表显示估计的数字是10而不是3.我错过了什么?任何人都可以帮我找到问题吗?
import random
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
def dispersion (data, k):
if k == 1:
cluster_mean = np.mean(data, axis=0)
distances_from_mean = np.sum((data - cluster_mean)**2,axis=1)
dispersion_val = np.log(sum(distances_from_mean))
else:
k_means_model_ = KMeans(n_clusters=k, max_iter=50, n_init=5).fit(data)
distances_from_mean = range(k)
for i in range(k):
distances_from_mean[i] = int()
for idx, label in enumerate(k_means_model_.labels_):
if i == label:
distances_from_mean[i] += sum((data[idx] - k_means_model_.cluster_centers_[i])**2)
dispersion_val = np.log(sum(distances_from_mean))
return dispersion_val
def reference_dispersion(data, num_clusters, num_reference_bootstraps):
dispersions = …
Run Code Online (Sandbox Code Playgroud) 我正在使用R中的K-Means算法,我想弄清楚4个算法Lloyd,Forgy,MacQueen和Hartigan-Wong的差异,它们可用于stats包中的"kmeans"功能.
但是我很明显能够对这个问题给出足够的答案.
我只找到了一些很少的信息:(访问http://en.wikibooks.org/wiki/Data_Mining_Algorithms_In_R/Clustering/K-Means)
根据这个描述,Lloyd,Forgy和Hartigan-Wong对我来说似乎是一样的.最小化平方和或最小化欧几里德距离是相同的.
如果我正确的话,如果一个对象被移动到另一个集群,MacQueen就会更新两个相关的集群.
尽管如此,我仍然没有看到这些算法在哪些方面有所不同.