标签: cluster-analysis

k均值聚类算法的实现

在我的程序中,我将k = 2用于k-mean算法,即我只想要2个簇.我已经以一种非常简单明了的方式实现了,我仍然无法理解为什么我的程序进入无限循环.任何人都可以指导我在哪里犯错误..?

为简单起见,我已经在程序代码本身中获取了输入.这是我的代码:

import java.io.*;
import java.lang.*;
class Kmean
{
public static void main(String args[])
{
int N=9;
int arr[]={2,4,10,12,3,20,30,11,25};    // initial data
int i,m1,m2,a,b,n=0;
boolean flag=true;
float sum1=0,sum2=0;
a=arr[0];b=arr[1];
m1=a; m2=b;
int cluster1[]=new int[9],cluster2[]=new int[9];
for(i=0;i<9;i++)
    System.out.print(arr[i]+ "\t");
System.out.println();

do
{
 n++;
 int k=0,j=0;
 for(i=0;i<9;i++)
 {
    if(Math.abs(arr[i]-m1)<=Math.abs(arr[i]-m2))
    {   cluster1[k]=arr[i];
        k++;
    }
    else
    {   cluster2[j]=arr[i];
        j++;
    }
 }
    System.out.println();
    for(i=0;i<9;i++)
        sum1=sum1+cluster1[i];
    for(i=0;i<9;i++)
        sum2=sum1+cluster2[i];
    a=m1;
    b=m2;
    m1=Math.round(sum1/k);
    m2=Math.round(sum2/j);
    if(m1==a && m2==b)
        flag=false;
    else
        flag=true;

    System.out.println("After iteration "+ n +" , …
Run Code Online (Sandbox Code Playgroud)

java algorithm cluster-analysis data-mining k-means

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

K-means聚类,主要理解问题

假设我们有一个64dim矩阵来聚类,假设矩阵数据集是dt = 64x150.

使用vl_feat的库中的kmeans函数,我将我的数据集聚集到20个中心:

[centers, assignments] = vl_kmeans(dt, 20);
Run Code Online (Sandbox Code Playgroud)

centers 是一个64x20矩阵.

assignments 是一个1x150矩阵,其中包含值.

根据手册:向量分配包含输入数据到集群的(硬)分配.

我仍然无法理解矩阵中的这些数字是什么assignments意思.我根本得不到它.有人介意帮我一点吗?一个例子或一些东西会很棒.这些价值观代表什么呢?

matlab opencv cluster-analysis k-means vlfeat

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

K 表示具有多个值的变量的聚类

我在下面有一个来自大型数据集的示例数据,其中每个参与者都有多个评分条件。

Participant<-c("p1","p1","p2","p2","p3","p3")
Condition<-c( "c1","c2","c1","c2","c1","c2")
Score<-c(4,5, 5,7,8,2)
T<-data.frame(Participant, Condition, Score)
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用 K 均值聚类将参与者分成不同的组,考虑到条件不是数字,有什么好的方法吗?

谢谢!

r cluster-analysis mean k-means

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

使用高斯混合模型对图像进行聚类

我想使用GMM(高斯混合模型来聚类二进制图像,并且还想在二进制图像本身上绘制聚类质心).

我使用它作为我的参考:http: //in.mathworks.com/help/stats/gaussian-mixture-models.html

这是我的初始代码

 I=im2double(imread('sil10001.pbm'));
  K = I(:);
  mu=mean(K);
  sigma=std(K);
  P=normpdf(K, mu, sigma);
   Z = norminv(P,mu,sigma);
  X = mvnrnd(mu,sigma,1110);
  X=reshape(X,111,10);


 scatter(X(:,1),X(:,2),10,'ko');

options = statset('Display','final');
gm = fitgmdist(X,2,'Options',options);



idx = cluster(gm,X);
cluster1 = (idx == 1);
cluster2 = (idx == 2);


 scatter(X(cluster1,1),X(cluster1,2),10,'r+');
 hold on

  scatter(X(cluster2,1),X(cluster2,2),10,'bo');
  hold off
  legend('Cluster 1','Cluster 2','Location','NW')


  P = posterior(gm,X);

 scatter(X(cluster1,1),X(cluster1,2),10,P(cluster1,1),'+')
 hold on
 scatter(X(cluster2,1),X(cluster2,2),10,P(cluster2,1),'o')
 hold off
 legend('Cluster 1','Cluster 2','Location','NW')
 clrmap = jet(80); colormap(clrmap(9:72,:))
 ylabel(colorbar,'Component 1 Posterior Probability')
Run Code Online (Sandbox Code Playgroud)

但问题是我无法在主二进制图像中绘制从GMM接收的聚类质心.我该怎么做? 在此输入图像描述

**现在假设我有一个序列中的10个这样的图像我想将它们的平均位置的信息存储在两个单元格数组中然后我该怎么做.这是我的代码我的新问题**

    images=load('gait2go.mat');%load the matrix file
    for i=1:10

   I{i}=images.result{i}; …
Run Code Online (Sandbox Code Playgroud)

matlab classification cluster-analysis machine-learning mixture-model

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

在 R 中使用高尔距离进行聚类

我有一个包含分类和数字变量的数据框。我想使用高尔距离对这些数据进行聚类,并像 kmeans 函数一样将聚类值作为向量获取。我怎样才能做到这一点?

r cluster-analysis categorical-data mixed-type

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

在某些图像区域中,K-意味着比高斯混合模型更准确

我知道这Gaussian mixture model是一个概括K-means,因此应该更准确.

但我无法在下面的聚类图像上看出为什么获得的结果K-means在某些区域更准确(如斑点噪声显示为浅蓝色点,在Gaussian Mixture Model结果中持续存在于结果中而不是K-means结果中).

以下是matlab两种方法的代码:

% kmeans
L1 = kmeans(X, 2, 'Replicates', 5);
kmeansClusters = reshape(L1, [numRows numCols]);
figure('name', 'Kmeans clustering')
imshow(label2rgb(kmeansClusters))

% gaussian mixture model
gmm = fitgmdist(X, 2);
L2 = cluster(gmm, X);
gmmClusters = reshape(L2, [numRows numCols]);
figure('name', 'GMM clustering')
imshow(label2rgb(gmmClusters))
Run Code Online (Sandbox Code Playgroud)

并在下面显示原始图像,以及聚类结果:

原始图片:

原始图像

K-方式:

K均值集群

高斯混合模型:

高斯混合模型

PS:我只使用强度信息进行聚类,聚类的数量是2(即水和土地).

matlab cluster-analysis image-processing gaussian k-means

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

KMeans - 溢出错误:无法将浮点无穷大转换为整数

下面是变量的前 5 行,我使用 KMeans 来找到最佳的簇数-

store_code  PinCode sale_price_after_promo
0   2655    453441.0    55.00
1   2655    999999.0    30.00
2   2655    400064.0    418.95
3   2615    400099.0    70.00
4   2655    474001.0    34.20
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误 -

OverflowError                             Traceback (most recent call last)
<ipython-input-62-3802a2b79f71> in <module>()
      2 for i in range(0,11):
      3     kmeans=KMeans(n_clusters=i, init='k-means++', random_state=42)
----> 4     kmeans.fit(X)
      5     wcss.append(kmeans.inertia_)
      6 plt.plot(range(1, 11), wcss)

OverflowError: cannot convert float infinity to integer
Run Code Online (Sandbox Code Playgroud)

即使我尝试使用各种变量组合但仍然出现相同的错误,如何摆脱这个错误?

python cluster-analysis k-means

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

如何获得GMM集群的代表点?

我已使用sklearn高斯混合模型算法(GMM)对数据(75000,3)进行了聚类。我有4个集群。我数据的每一点代表一个分子结构。现在,我想获得每个簇的最具代表性的分子结构,据我了解,它们是该簇的质心。到目前为止,我已经尝试使用gmm.means_属性定位在群集中心的点(结构),但是确切的点并不对应于任何结构(我使用numpy.where)。我将需要获取最接近质心的结构的坐标,但是在模块的文档中(http://scikit-learn.org/stable/modules/generation/sklearn),我还没有找到执行此功能的函数。 blend.GaussianMixture.html)。如何获得每个群集的代表性结构?

非常感谢您的帮助,任何建议将不胜感激。

((由于这是一个通用问题,我发现没有必要添加用于集群或任何数据的代码,请让我知道是否有必要))

cluster-analysis centroid scikit-learn gmm

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

来自 sklearn.metrics.silhouette_samples 的 MemoryError

尝试调用sklearn.metrics.silhouette_samples时出现内存错误。我的用例与本教程相同。我在 Python 3.5 中使用 scikit-learn 0.18.1。

对于相关的功能,silhouette_score,这篇文章建议使用sample_size参数,它可以在调用剪影_samples之前减少样本大小。我不确定下采样仍然会产生可靠的结果,所以我犹豫不决。

我的输入 X 是一个 [107545 行 x 12 列] 数据帧,虽然我只有 8gb 的 RAM,但我不会真正认为它很大

sklearn.metrics.silhouette_samples(X, labels, metric=’euclidean’)
---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-39-7285690e9ce8> in <module>()
----> 1 silhouette_samples(df_scaled, df['Cluster_Label'])

C:\Users\KE56166\AppData\Local\Enthought\Canopy\edm\envs\User\lib\site-packages\sklearn\metrics\cluster\unsupervised.py in silhouette_samples(X, labels, metric, **kwds)
    167     check_number_of_labels(len(le.classes_), X.shape[0])
    168 
--> 169     distances = pairwise_distances(X, metric=metric, **kwds)
    170     unique_labels = le.classes_
    171     n_samples_per_label = np.bincount(labels, minlength=len(unique_labels))
C:\Users\KE56166\AppData\Local\Enthought\Canopy\edm\envs\User\lib\site-packages\sklearn\metrics\pairwise.py in pairwise_distances(X, Y, metric, n_jobs, …
Run Code Online (Sandbox Code Playgroud)

python numpy cluster-analysis out-of-memory scikit-learn

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

在 R 中使用什么包进行 Kmeans 预测?

似乎“SwarmSVM”包曾经有一个 kmeans.predict 函数,但现在没有了。

我想将数据帧划分为训练+测试子集以训练模型然后对其进行测试。我目前只能使用 'kmeans' 函数来创建集群,但我无法弄清楚使用哪些函数/包来训练和测试模型。

r cluster-analysis k-means

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