clustering.py 文件源码

python
阅读 26 收藏 0 点赞 0 评论 0

项目:PyFusionGUI 作者: SyntaxVoid 项目源码 文件源码
def EM_GMM_GMM_clustering(instance_array_amps, n_clusters=9, sin_cos = 0, number_of_starts = 10, show_covariances = 0, clim=None, covariance_type='diag', n_iter = 50):
    '''
    Cluster using a Gaussian for the real and imag part of the ratio of the complex value between adjacent channels
    Supposed to be for imaging diagnostics

    SRH: 18May2014
    '''
    print 'starting EM-GMM-GMM algorithm from sckit-learn, clusters=%d, retries : %d'%(n_clusters,number_of_starts)
    #tmp = np.zeros((instance_array_amps.shape[0], instance_array_amps.shape[1]-1),dtype=complex)
    #for i in range(1,instance_array_amps.shape[1]):
    #    tmp[:,i-1] = instance_array_amps[:,i]/instance_array_amps[:,i-1]
    #print 'ratio :', np.sum(np.abs(np.imag(instance_array_amps)))/np.sum(np.abs(np.real(instance_array_amps)))
    data_complex = instance_array_amps/np.sum(instance_array_amps,axis = 1)[:,np.newaxis]
    #data_complex = instance_array_amps/(instance_array_amps[:,2])[:,np.newaxis]
    #print 'hello..', instance_array_amps.shape
    input_data = np.hstack((np.real(data_complex), np.real(data_complex)))
    #k_means_cluster_assignments, k_means_cluster_details = k_means_clustering(input_data, n_clusters=n_clusters, sin_cos = 1, number_of_starts = 3,)
    #print k_means_cluster_assignments
    #input_data = np.hstack((np.abs(data_complex),(np.abs(data_complex))))
    n_dim = data_complex.shape[1]
    #print n_clusters
    gmm = mixture.GMM(n_components = n_clusters, covariance_type = covariance_type, n_init = number_of_starts, n_iter = n_iter,)
    gmm.fit(input_data)
    cluster_assignments = gmm.predict(input_data)
    bic_value = gmm.bic(input_data)
    LL = np.sum(gmm.score(input_data))

    #Extract the means, variances and covariances
    gmm_covars = np.array(gmm._get_covars())
    gmm_vars = np.array([np.diagonal(i) for i in gmm._get_covars()])
    gmm_vars_re, gmm_vars_im = np.hsplit(gmm_vars,2)
    gmm_covars_re = np.array([i[0:n_dim,0:n_dim] for i in gmm._get_covars()])
    gmm_covars_im = np.array([i[n_dim:,n_dim:] for i in gmm._get_covars()])
    gmm_means = gmm.means_
    gmm_means_re, gmm_means_im = np.hsplit(gmm_means, 2)
    #Bundle up the answer
    cluster_details = {'EM_GMM_means':gmm_means, 'EM_GMM_variances':gmm_vars, 'EM_GMM_covariances':gmm_covars, 'EM_GMM_means_re':gmm_means_re, 'EM_GMM_variances_re':gmm_vars_re, 'EM_GMM_covariances_re':gmm_covars_re,'EM_GMM_means_im':gmm_means_im, 'EM_GMM_variances_im':gmm_vars_im, 'EM_GMM_covariances_im':gmm_covars_im,'BIC':bic_value,'LL':LL}
    print 'EM_GMM_GMM Converged: ', gmm.converged_

    return cluster_assignments, cluster_details
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号