仅获得两个具有一百多个功能的集群

时间:2020-08-27 07:02:55

标签: python cluster-analysis correlation

我使用以下KMeans聚类函数来确定我的功能进入的聚类数量:

def clusterKMeansBase(corr0,maxNumClusters=10,n_init=10):
    """
    Initial clustering step using KMeans.
    :param corr_mat: (pd.DataFrame) correlation matrix
    :param max_num_clusters: maximum number of cluster to search for.
    :param repeat: number of clustering algorithm repetitions.
    :return: 3 tuple (ordered correlation matrix, clusters, silh scores)
    """
    
    # Distance matrix
    x,silh=((1-corr0.fillna(0))/2.)**.5,pd.Series()# observations matrix
    
    # Get optimal num clusters
    for init in range(10):
        for i in range(2,10+1):
            kmeans_=KMeans(n_clusters=i,n_jobs=1,n_init=1)
            kmeans_=kmeans_.fit(x)
            silh_=silhouette_samples(x,kmeans_.labels_)
            stat=(silh_.mean()/silh_.std(),silh.mean()/silh.std())
            if np.isnan(stat[1]) or stat[0]>stat[1]:
                silh,kmeans=silh_,kmeans_
    
    # Number of clusters equals to length(kmeans labels)          
    newIdx=np.argsort(kmeans.labels_)
    
    corr1=corr0.iloc[newIdx] # reorder rows
    corr1=corr1.iloc[:,newIdx] # reorder columns
    clstrs={i:corr0.columns[np.where(kmeans.labels_==i)[0]].tolist() \
                            for i in np.unique(kmeans.labels_) } # cluster members
    silh=pd.Series(silh,index=x.index)
    return corr1,clstrs,silh

我有大约200个功能,运行我的功能后,我仅得到2个群集。我正在使用财务比率数据,宏观经济数据等。

关于为什么会发生这种情况的任何想法?我认为应该做什么的所有指针都应该不仅仅是两个簇,并且要使用样本中使用的功能数量。干杯:)

0 个答案:

没有答案
相关问题