在 R 中执行 k 均值后是否可以获得每个簇内的实际观测值?
例如,在我的分析之后,我有 2 个聚类,我想在每个聚类中找到精确的观察结果,这可能吗?
我应用 k 均值算法来分割图像。我使用内置的 k-means 函数。它工作正常,但我想知道在 k-means 方法中将其转换为二进制图像的阈值。例如,我们可以使用MATLAB中的内置函数来获取阈值:
threshold=graythresh(grayscaledImage);
a=im2bw(a,threshold);
%Applying k-means....
imdata=reshape(grayscaledImage,[],1);
imdata=double(imdata);
[imdx mn]=kmeans(imdata,2);
imIdx=reshape(imdx,size(grayscaledImage));
imshow(imIdx,[]);
Run Code Online (Sandbox Code Playgroud) 我是 Python 初学者。现在,我试图了解sklearn.cluster.KMeans中的参数n_init是什么
从文档中:
n_init:整数,默认值:10
k-means 算法使用不同质心种子运行的次数。最终结果将是n_init连续运行中惯性方面的最佳输出。
起初,我认为这意味着代码运行的次数,直到我发现这个有用的问题,然后我意识到这就是max_iter所做的。
参数n_init到底有什么作用?我真的不明白。
python cluster-analysis machine-learning k-means scikit-learn
I have a df:
id Type1 Type2 Type3
0 10000 0.0 0.00 0.00
1 10001 0.0 63.72 0.00
2 10002 473.6 174.00 31.60
3 10003 0.0 996.00 160.92
4 10004 0.0 524.91 0.00
Run Code Online (Sandbox Code Playgroud)
I apply k-means to this df and add the resulting cluster to the df:
kmeans = cluster.KMeans(n_clusters=5, random_state=0).fit(df.drop('id', axis=1))
df['cluster'] = kmeans.labels_
Run Code Online (Sandbox Code Playgroud)
Now I'm attempting to add columns to the df for the Euclidean distance between each point (i.e. row in the df) and each centroid:
def …Run Code Online (Sandbox Code Playgroud) 我试图找到 k 聚类的最佳值,但它显示错误
k_range = range(1,10)
sse = []
max_iter = 300
init = 'k-means++'
n_init = 10
for k in k_range:
km = KMeans(n_clusters=k, max_iter = max_iter, init = init, n_init = n_init)
km.fit(df[['Age','Income($)']])
sse.append(km.inertia_)
Run Code Online (Sandbox Code Playgroud) 我有 157 维的数据,有 688 个数据点。我想用数据进行聚类。
由于 K-Means 是最简单的算法,因此我决定从这种方法开始。
这是 Sklearn 函数调用:
KMeans(init='k-means++', n_clusters=4, n_init=10), name="k-means++", data=sales)
以下是一些输出指标:
init time inertia homo compl v-meas ARI AMI num_clusters
k-means++ 0.06s 38967 0.262 0.816 0.397 0.297 0.250 4
k-means++ 0.05s 29825 0.321 0.847 0.466 0.338 0.306 6
k-means++ 0.07s 23131 0.411 0.836 0.551 0.430 0.393 8
k-means++ 0.09s 20566 0.636 0.817 0.715 0.788 0.621 10
k-means++ 0.09s 18695 0.534 0.794 0.638 0.568 0.513 12
k-means++ 0.11s 16805 0.773 0.852 0.810 0.916 0.760 14 …Run Code Online (Sandbox Code Playgroud) 我在形状为[1000,]的一维数组中有一些数据,其中包含1000个元素。我对该数据应用了k均值聚类,聚类数为10。应用k均值后,我为每个聚类得到了形状为[1000]的聚类标签(id),形状为[10]的质心。标签将0到9之间的值分配给1000个元素中的每个元素。但是,我希望每个元素都显示其质心,而不是其簇ID。我该如何实现?
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=10)
kmeans.fit(data) #data is of shape [1000,]
#learn the labels and the means
labels = kmeans.predict(data) #labels of shape [1000,] with values 0<= i <= 9
centroids = kmeans.cluster_centers_ #means of shape [10,]
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我想要[1000,]数组中每个元素的质心,而不是其簇ID。
我有一个6x1000的二进制数据数据集(6个数据点,1000个布尔维度).
我对它进行聚类分析
[idx, ctrs] = kmeans(x, 3, 'distance', 'hamming');
Run Code Online (Sandbox Code Playgroud)
我得到了三个集群.我如何可视化我的结果?
我有6行数据,每行有1000个属性; 其中3个在某种程度上应该相似或类似.应用聚类将显示聚类.由于我知道集群的数量,我只需要找到类似的行.汉明距离告诉我们行之间的相似性,结果是正确的,有3个集群.
[编辑:对于任何合理的数据,kmeans将总是找到所询问的簇数]
我想把这些知识带到易于观察和理解,而不必写出大量的解释.
Matlab的例子不合适,因为它涉及数字2D数据,而我的问题涉及n维分类数据.
数据集在这里http://pastebin.com/cEWJfrAR
[编辑1:如何检查集群是否重要?]
欲了解更多信息,请访问以下链接:http: //chat.stackoverflow.com/rooms/32090/discussion-between-oleg-komarov-and-justcurious
如果问题不明确,请询问您遗失的任何事情.
k-means ×8
python ×4
scikit-learn ×4
matlab ×2
arrays ×1
binary ×1
pandas ×1
python-3.x ×1
r ×1