Python sklearn.cluster() Examples
The following are 30
code examples of sklearn.cluster().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
sklearn
, or try the search function
.
Example #1
Source File: cluster.py From acai with Apache License 2.0 | 7 votes |
def error(cluster, target_cluster, k): """ Compute error between cluster and target cluster :param cluster: proposed cluster :param target_cluster: target cluster :return: error """ n = np.shape(target_cluster)[0] M = np.zeros((k, k)) for i in range(k): for j in range(k): M[i][j] = np.sum(np.logical_and(cluster == i, target_cluster == j)) m = Munkres() indexes = m.compute(-M) corresp = [] for i in range(k): corresp.append(indexes[i][1]) pred_corresp = [corresp[int(predicted)] for predicted in cluster] acc = np.sum(pred_corresp == target_cluster) / float(len(target_cluster)) return acc
Example #2
Source File: network_accuracy.py From TICC with BSD 2-Clause "Simplified" License | 6 votes |
def computeF1_macro(confusion_matrix,matching, num_clusters): """ computes the macro F1 score confusion matrix : requres permutation matching according to which matrix must be permuted """ ##Permute the matrix columns permuted_confusion_matrix = np.zeros([num_clusters,num_clusters]) for cluster in xrange(num_clusters): matched_cluster = matching[cluster] permuted_confusion_matrix[:,cluster] = confusion_matrix[:,matched_cluster] ##Compute the F1 score for every cluster F1_score = 0 for cluster in xrange(num_clusters): TP = permuted_confusion_matrix[cluster,cluster] FP = np.sum(permuted_confusion_matrix[:,cluster]) - TP FN = np.sum(permuted_confusion_matrix[cluster,:]) - TP precision = TP/(TP + FP) recall = TP/(TP + FN) f1 = stats.hmean([precision,recall]) F1_score += f1 F1_score /= num_clusters return F1_score
Example #3
Source File: main.py From scTDA with GNU General Public License v3.0 | 6 votes |
def cellular_subpopulations(self, threshold=0.05, min_cells=5, clus_thres=0.65): """ Identifies potential transient cellular subpopulations. The parameter 'threshold' sets an upper bound of the q-value of the genes that are considered in the analysis. The parameter 'min_cells' sets the minimum number of cells on which each of the genes considered in the analysis is expressed. Cellular subpopulations are determined by clustering the Jensen-Shannon distance matrix of the genes that pass all the constraints. The number of clusters is controlled in this case by the parameter 'clus_thres'. In both cases a list with the genes associated to each cluster is returned. It requires the presence of the file 'name.genes.tsv', produced by the method RotedGraph.save(). """ con = [] dis = [] nam = [] f = open(self.name + '.genes.tsv', 'r') for n, line in enumerate(f): if n > 0: sp = line[:-1].split('\t') if float(sp[7]) < threshold and float(sp[1]) > min_cells: nam.append(sp[0]) f.close() mat2 = self.JSD_matrix(nam) return [map(lambda xx: nam[xx], m) for m in find_clusters(hierarchical_clustering(mat2, labels=nam, cluster_distance=True, thres=clus_thres)).values()]
Example #4
Source File: main.py From scTDA with GNU General Public License v3.0 | 6 votes |
def save(self, name, resolution, gain, equalize=True, cluster='agglomerative', statistics='db', max_K=5): """ Generates a topological representation using the Mapper algorithm with resolution and gain specified by the parameters 'resolution' and 'gain'. When equalize is set to True, patches are chosen such that they contain the same number of points. The parameter 'cluster' specifies the clustering method ('agglomerative' or 'kmeans'). The parameter 'statistics' specifies the criterion for choosing the optimal number of clusters ('db' for Davies-Bouildin index, or 'gap' for the gap statistic). The parameter 'max_K' specifies the maximum number of clusters to be considered within each patch. The topological representation is stored in the files 'name.gexf' and 'name.json'. It returns a dictionary with the patches. """ G, all_clusters, patches = sakmapper.mapper_graph(self.df, lens_data=self.lens_data_mds, resolution=resolution, gain=gain, equalize=equalize, clust=cluster, stat=statistics, max_K=max_K) dic = {} for n, rs in enumerate(all_clusters): dic[str(n)] = map(lambda x: int(x), rs) with open(name + '.json', 'wb') as handle3: json.dump(dic, handle3) networkx.write_gexf(G, name + '.gexf') return patches
Example #5
Source File: dbscan.py From link-prediction_with_deep-learning with MIT License | 6 votes |
def process_options(args): options = argparser().parse_args(args) if options.max_rank is not None and options.max_rank < 1: raise ValueError('max-rank must be >= 1') if options.eps <= 0.0: raise ValueError('eps must be > 0') wv = wvlib.load(options.vectors[0], max_rank=options.max_rank) if options.normalize: logging.info('normalize vectors to unit length') wv.normalize() words, vectors = wv.words(), wv.vectors() if options.whiten: logging.info('normalize features to unit variance') vectors = scipy.cluster.vq.whiten(vectors) return words, vectors, options
Example #6
Source File: auxiliaries.py From Deep-Metric-Learning-Baselines with Apache License 2.0 | 6 votes |
def run_kmeans(features, n_cluster): """ Run kmeans on a set of features to find <n_cluster> cluster. Args: features: np.ndarrary [n_samples x embed_dim], embedding training/testing samples for which kmeans should be performed. n_cluster: int, number of cluster. Returns: cluster_assignments: np.ndarray [n_samples x 1], per sample provide the respective cluster label it belongs to. """ n_samples, dim = features.shape kmeans = faiss.Kmeans(dim, n_cluster) kmeans.n_iter, kmeans.min_points_per_centroid, kmeans.max_points_per_centroid = 20,5,1000000000 kmeans.train(features) _, cluster_assignments = kmeans.index.search(features,1) return cluster_assignments
Example #7
Source File: main2.py From msaf with MIT License | 6 votes |
def do_segmentation(C, M, config, in_bound_idxs=None): embedding = embed_beats(C, M, config) Cnorm = np.cumsum(embedding ** 2, axis=1) ** 0.5 if config["hier"]: est_idxs = [] est_labels = [] for k in range(1, config["num_layers"] + 1): est_idx, est_label = cluster(embedding, Cnorm, k) est_idxs.append(est_idx) est_labels.append(np.asarray(est_label, dtype=np.int)) else: est_idxs, est_labels = cluster(embedding, Cnorm, config["scluster_k"], in_bound_idxs) est_labels = np.asarray(est_labels, dtype=np.int) return est_idxs, est_labels, Cnorm
Example #8
Source File: main2.py From msaf with MIT License | 6 votes |
def cluster(evecs, Cnorm, k, in_bound_idxs=None): X = evecs[:, :k] / (Cnorm[:, k - 1:k] + 1e-5) KM = sklearn.cluster.KMeans(n_clusters=k, n_init=50, max_iter=500) seg_ids = KM.fit_predict(X) ############################################################### # Locate segment boundaries from the label sequence if in_bound_idxs is None: bound_beats = 1 + np.flatnonzero(seg_ids[:-1] != seg_ids[1:]) # Count beats 0 as a boundary bound_idxs = librosa.util.fix_frames(bound_beats, x_min=0) else: bound_idxs = in_bound_idxs # Compute the segment label for each boundary bound_segs = list(seg_ids[bound_idxs]) # Tack on the end-time bound_idxs = list(np.append(bound_idxs, len(Cnorm) - 1)) return bound_idxs, bound_segs
Example #9
Source File: cluster.py From acai with Apache License 2.0 | 6 votes |
def cluster(train_latents, train_labels, test_latents, test_labels): num_classes = np.shape(train_labels)[-1] labels_hot = np.argmax(test_labels, axis=-1) train_latents = np.reshape(train_latents, newshape=[train_latents.shape[0], -1]) test_latents = np.reshape(test_latents, newshape=[test_latents.shape[0], -1]) kmeans = KMeans(init='random', n_clusters=num_classes, random_state=0, max_iter=1000, n_init=FLAGS.n_init, n_jobs=FLAGS.n_jobs) kmeans.fit(train_latents) print(kmeans.cluster_centers_) print('Train/Test k-means objective = %.4f / %.4f' % (-kmeans.score(train_latents), -kmeans.score(test_latents))) print('Train/Test accuracy %.4f / %.3f' % (error(np.argmax(train_labels, axis=-1), kmeans.predict(train_latents), k=num_classes), error(np.argmax(test_labels, axis=-1), kmeans.predict(test_latents), k=num_classes))) return error(labels_hot, kmeans.predict(test_latents), k=num_classes)
Example #10
Source File: k_means.py From dask-ml with BSD 3-Clause "New" or "Revised" License | 6 votes |
def predict(self, X): """Predict the closest cluster each sample in X belongs to. In the vector quantization literature, `cluster_centers_` is called the code book and each value returned by `predict` is the index of the closest code in the code book. Parameters ---------- X : array-like, shape = [n_samples, n_features] New data to predict. Returns ------- labels : array, shape [n_samples,] Index of the cluster each sample belongs to. """ check_is_fitted(self, "cluster_centers_") X = self._check_array(X) labels = pairwise_distances_argmin_min(X, self.cluster_centers_)[0].astype( np.int32 ) return labels
Example #11
Source File: baselines.py From AirBnbPricePrediction with MIT License | 6 votes |
def kmeans(X_train, y_train, X_val, y_val): n_clusters = 10 kmeans = KMeans(n_clusters=n_clusters, random_state=0, verbose=0, n_jobs=int(0.8*n_cores)).fit(X_train) c_train = kmeans.predict(X_train) c_pred = kmeans.predict(X_val) centroids = kmeans.cluster_centers_ for i in range(n_clusters): print('--------analyzing cluster %d--------' %i) train_mask = c_train==i std_train = np.std(y_train[train_mask]) mean_train = np.mean(y_train[train_mask]) print("# examples & price mean & std for training set within cluster %d is:(%d, %.2f, %.2f)" %(i, train_mask.sum(), np.float(mean_train), np.float(std_train))) pred_mask = c_pred==i std_pred = np.std(y_val[pred_mask]) mean_pred = np.mean(y_val[pred_mask]) print("# examples & price mean & std for validation set within cluster %d is:(%d, %.2f, %.2f)" %(i, pred_mask.sum(), np.float(mean_pred), np.float(std_pred))) if pred_mask.sum() == 0: print('Zero membered test set! Skipping the test and training validation.') continue LinearModel(X_train[train_mask], y_train[train_mask], X_val[pred_mask], y_val[pred_mask]) print('--------Finished analyzing cluster %d--------' %i) return c_pred, centroids
Example #12
Source File: TICC.py From TICC with BSD 2-Clause "Simplified" License | 6 votes |
def computeF1_macro(confusion_matrix,matching, num_clusters): """ computes the macro F1 score confusion matrix : requres permutation matching according to which matrix must be permuted """ ##Permute the matrix columns permuted_confusion_matrix = np.zeros([num_clusters,num_clusters]) for cluster in xrange(num_clusters): matched_cluster = matching[cluster] permuted_confusion_matrix[:,cluster] = confusion_matrix[:,matched_cluster] ##Compute the F1 score for every cluster F1_score = 0 for cluster in xrange(num_clusters): TP = permuted_confusion_matrix[cluster,cluster] FP = np.sum(permuted_confusion_matrix[:,cluster]) - TP FN = np.sum(permuted_confusion_matrix[cluster,:]) - TP precision = TP/(TP + FP) recall = TP/(TP + FN) f1 = stats.hmean([precision,recall]) F1_score += f1 F1_score /= num_clusters return F1_score
Example #13
Source File: test_monkeypatch.py From daal4py with Apache License 2.0 | 6 votes |
def test_monkey_patching(self): _tokens = daal4py.sklearn.sklearn_patch_names() self.assertTrue(isinstance(_tokens, list) and len(_tokens) > 0) for t in _tokens: daal4py.sklearn.unpatch_sklearn(t) for t in _tokens: daal4py.sklearn.patch_sklearn(t) import sklearn for a in [(sklearn.decomposition, 'PCA'), (sklearn.linear_model, 'Ridge'), (sklearn.linear_model, 'LinearRegression'), (sklearn.cluster, 'KMeans'), (sklearn.svm, 'SVC'),]: class_module = getattr(a[0], a[1]).__module__ self.assertTrue(class_module.startswith('daal4py'))
Example #14
Source File: cluster.py From lexpredict-contraxsuite with GNU Affero General Public License v3.0 | 6 votes |
def __call__(self, features: np.array, term_index: list, use_tfidf: bool = True, **options): """ Just call activated class instance to cluster data. :param features: np.array - term frequency matrix :param term_index: list - list of term frequency matrix indexes :param use_tfidf: bool - whether to use TF IDF Transformer :param options: **dict - unpacked cluster algorithm options :return: ClusterEngine instance with attributes listed in __init__ """ self.features = features self.term_index = term_index self.num_records = features.shape[0] self.use_tfidf = use_tfidf self.user_options = options self.n_clusters = options.get('n_clusters') self.cluster_model = self.get_model() return self.cluster()
Example #15
Source File: Remixatron.py From Remixatron with Apache License 2.0 | 5 votes |
def __segment_count_from_labels(labels): ''' Computes the number of unique segments from a set of ordered labels. Segements are contiguous beats that belong to the same cluster. ''' segment_count = 0 previous_label = -1 for label in labels: if label != previous_label: previous_label = label segment_count += 1 return segment_count
Example #16
Source File: TICC.py From TICC with BSD 2-Clause "Simplified" License | 5 votes |
def computeNetworkAccuracy(matching,train_cluster_inverse, num_clusters): """ Takes in the matching for the clusters takes the computed clusters computes the average F1 score over the network """ threshold = 1e-2 f1 = 0 for cluster in xrange(num_clusters): true_cluster_cov = np.loadtxt("Inverse Covariance cluster ="+ str(cluster) +".csv", delimiter = ",") matched_cluster = matching[cluster] matched_cluster_cov = train_cluster_inverse[matched_cluster] (nrow,ncol) = true_cluster_cov.shape out_true = np.zeros([nrow,ncol]) for i in xrange(nrow): for j in xrange(ncol): if np.abs(true_cluster_cov[i,j]) > threshold: out_true[i,j] = 1 out_matched = np.zeros([nrow,ncol]) for i in xrange(nrow): for j in xrange(ncol): if np.abs(matched_cluster_cov[i,j]) > threshold: out_matched[i,j] = 1 np.savetxt("Network_true_cluster=" +str(cluster) + ".csv",true_cluster_cov, delimiter = ",") np.savetxt("Network_matched_cluster=" + str(matched_cluster)+".csv",matched_cluster_cov, delimiter = ",") ##compute the confusion matrix confusion_matrix = np.zeros([2,2]) for i in xrange(nrow): for j in xrange(ncol): confusion_matrix[out_true[i,j],out_matched[i,j]] += 1 f1 += computeF1_macro(confusion_matrix, [0,1],2) return f1/num_clusters ############
Example #17
Source File: Remixatron.py From Remixatron with Apache License 2.0 | 5 votes |
def __init__(self, filename, start_beat=1, clusters=0, progress_callback=None, do_async=False, use_v1=False): """ The constructor for the class. Also starts the processing thread. Args: filename: the path to the audio file to process start_beat: the first beat to play in the file. Should almost always be 1, but you can override it to skip into a specific part of the song. clusters: the number of similarity clusters to compute. The DEFAULT value of 0 means that the code will try to automatically find an optimal cluster. If you specify your own value, it MUST be non-negative. Lower values will create more promiscuous jumps. Larger values will create higher quality matches, but run the risk of jumps->0 -- which will just loop the audio sequentially ~forever. progress_callback: a callback function that will get periodic satatus updates as the audio file is processed. MUST be a function that takes 2 args: percent_complete: FLOAT between 0.0 and 1.0 message: STRING with the progress message use_v1: set to True if you want to use the original auto clustering algorithm. Otherwise, it will use the newer silhouette-based scheme. """ self.__progress_callback = progress_callback self.__filename = filename self.__start_beat = start_beat self.clusters = clusters self._extra_diag = "" self._use_v1 = use_v1 if do_async == True: self.play_ready = threading.Event() self.__thread = threading.Thread(target=self.__process_audio) self.__thread.start() else: self.play_ready = None self.__process_audio()
Example #18
Source File: Remixatron.py From Remixatron with Apache License 2.0 | 5 votes |
def __segment_stats_from_labels(self, labels): ''' Computes the segment/cluster ratio and min segment size value given an array of labels. ''' segment_count = 0.0 segment_length = 0 clusters = max(labels) + 1 previous_label = -1 segment_lengths = [] for label in labels: if label != previous_label: previous_label = label segment_count += 1.0 if segment_length > 0: segment_lengths.append(segment_length) segment_length = 1 else: segment_length +=1 # self.__report_progress( .52, "clusters: %d, ratio: %f, min_seg: %d" % (clusters, segment_count/len(labels), segment_length) ) return float(segment_count) / float(clusters), min(segment_lengths)
Example #19
Source File: Remixatron.py From Remixatron with Apache License 2.0 | 5 votes |
def __segment_count_from_labels(labels): ''' Computes the number of unique segments from a set of ordered labels. Segements are contiguous beats that belong to the same cluster. ''' segment_count = 0 previous_label = -1 for label in labels: if label != previous_label: previous_label = label segment_count += 1 return segment_count
Example #20
Source File: analyze-output.py From websocket-fuzzer with GNU General Public License v3.0 | 5 votes |
def cluster_similar_responses(output_path): max_count = get_max_socket_message_count(output_path) listing = glob.glob(output_path + '*-%s.log' % max_count) messages = [file(filename).read() for filename in listing] messages = [extract_description_from_message(m) for m in messages] messages = np.asarray(messages) print() print('Clustering %s responses...(this might take a while)' % len(messages)) print() lev_similarity = -1 * np.array([[distance.levenshtein(m1, m2) for m1 in messages] for m2 in messages]) affprop = sklearn.cluster.AffinityPropagation(affinity='precomputed', damping=0.5) affprop.fit(lev_similarity) print('Generated clusters:') print() for cluster_id in np.unique(affprop.labels_): exemplar = messages[affprop.cluster_centers_indices_[cluster_id]] cluster = np.unique(messages[np.nonzero(affprop.labels_ == cluster_id)]) cluster_str = ', '.join(cluster) print('-' * 80) print(' - *%s:* %s' % (exemplar, cluster_str)) print('-' * 80) print()
Example #21
Source File: audioSegmentation.py From pyAudioAnalysis with Apache License 2.0 | 5 votes |
def speaker_diarization_evaluation(folder_name, lda_dimensions): """ This function prints the cluster purity and speaker purity for each WAV file stored in a provided directory (.SEGMENT files are needed as ground-truth) ARGUMENTS: - folder_name: the full path of the folder where the WAV and segment (ground-truth) files are stored - lda_dimensions: a list of LDA dimensions (0 for no LDA) """ types = ('*.wav', ) wav_files = [] for files in types: wav_files.extend(glob.glob(os.path.join(folder_name, files))) wav_files = sorted(wav_files) # get number of unique speakers per file (from ground-truth) num_speakers = [] for wav_file in wav_files: gt_file = wav_file.replace('.wav', '.segments') if os.path.isfile(gt_file): _, _, seg_labs = read_segmentation_gt(gt_file) num_speakers.append(len(list(set(seg_labs)))) else: num_speakers.append(-1) for dim in lda_dimensions: print("LDA = {0:d}".format(dim)) for i, wav_file in enumerate(wav_files): speaker_diarization(wav_file, num_speakers[i], 2.0, 0.2, 0.05, dim, plot_res=False)
Example #22
Source File: models.py From clusternet with MIT License | 5 votes |
def forward(self, x, adj, num_iter=1): embeds = self.GCN(x, adj) mu_init, _, _ = cluster(embeds, self.K, 1, num_iter, cluster_temp = self.cluster_temp, init = self.init) mu, r, dist = cluster(embeds, self.K, 1, 1, cluster_temp = self.cluster_temp, init = mu_init.detach().clone()) return mu, r, embeds, dist
Example #23
Source File: runDBSCAN.py From simsearch with MIT License | 5 votes |
def runClustering(ssearch, eps, min_samples): """ Run DBSCAN with the determined eps and MinPts values. """ print('Clustering all documents with DBSCAN, eps=%0.2f min_samples=%d' % (eps, min_samples)) # Initialize DBSCAN with parameters. # I forgot to use cosine at first! db = DBSCAN(eps=eps, min_samples=min_samples, metric='cosine', algorithm='brute') # Time this step. t0 = time.time() # Cluster the LSI vectors. db.fit(ssearch.index.index) # Calculate the elapsed time (in seconds) elapsed = (time.time() - t0) print(" done in %.3fsec" % elapsed) # Get the set of unique IDs. cluster_ids = set(db.labels_) # Show the number of clusters (don't include noise label) print('Number of clusters (excluding "noise"): %d' % (len(cluster_ids) - 1)) # For each of the clusters... for cluster_id in cluster_ids: # Get the list of all doc IDs belonging to this cluster. cluster_doc_ids = [] for doc_id in range(0, len(db.labels_)): if db.labels_[doc_id] == cluster_id: cluster_doc_ids.append(doc_id) # Get the top words in this cluster top_words = ssearch.getTopWordsInCluster(cluster_doc_ids) print(' Cluster %d: (%d docs) %s' % (cluster_id, len(cluster_doc_ids), " ".join(top_words)))
Example #24
Source File: Remixatron.py From Remixatron with Apache License 2.0 | 5 votes |
def __init__(self, filename, start_beat=1, clusters=0, progress_callback=None, do_async=False, use_v1=False): """ The constructor for the class. Also starts the processing thread. Args: filename: the path to the audio file to process start_beat: the first beat to play in the file. Should almost always be 1, but you can override it to skip into a specific part of the song. clusters: the number of similarity clusters to compute. The DEFAULT value of 0 means that the code will try to automatically find an optimal cluster. If you specify your own value, it MUST be non-negative. Lower values will create more promiscuous jumps. Larger values will create higher quality matches, but run the risk of jumps->0 -- which will just loop the audio sequentially ~forever. progress_callback: a callback function that will get periodic satatus updates as the audio file is processed. MUST be a function that takes 2 args: percent_complete: FLOAT between 0.0 and 1.0 message: STRING with the progress message use_v1: set to True if you want to use the original auto clustering algorithm. Otherwise, it will use the newer silhouette-based scheme. """ self.__progress_callback = progress_callback self.__filename = filename self.__start_beat = start_beat self.clusters = clusters self._extra_diag = "" self._use_v1 = use_v1 if do_async == True: self.play_ready = threading.Event() self.__thread = threading.Thread(target=self.__process_audio) self.__thread.start() else: self.play_ready = None self.__process_audio()
Example #25
Source File: network_accuracy.py From TICC with BSD 2-Clause "Simplified" License | 5 votes |
def computeF1Score_delete(num_cluster,matching_algo,actual_clusters,threshold_algo,save_matrix = False): """ computes the F1 scores and returns a list of values """ F1_score = np.zeros(num_cluster) for cluster in xrange(num_cluster): matched_cluster = matching_algo[cluster] true_matrix = actual_clusters[cluster] estimated_matrix = threshold_algo[matched_cluster] if save_matrix: np.savetxt("estimated_matrix_cluster=" + str(cluster)+".csv",estimated_matrix,delimiter = ",", fmt = "%1.4f") TP = 0 TN = 0 FP = 0 FN = 0 for i in xrange(num_stacked*n): for j in xrange(num_stacked*n): if estimated_matrix[i,j] == 1 and true_matrix[i,j] != 0: TP += 1.0 elif estimated_matrix[i,j] == 0 and true_matrix[i,j] == 0: TN += 1.0 elif estimated_matrix[i,j] == 1 and true_matrix[i,j] == 0: FP += 1.0 else: FN += 1.0 precision = (TP)/(TP + FP) recall = TP/(TP + FN) f1 = (2*precision*recall)/(precision + recall) F1_score[cluster] = f1 return F1_score
Example #26
Source File: models.py From clusternet with MIT License | 5 votes |
def cluster(data, k, temp, num_iter, init = None, cluster_temp=5): ''' pytorch (differentiable) implementation of soft k-means clustering. ''' #normalize x so it lies on the unit sphere data = torch.diag(1./torch.norm(data, p=2, dim=1)) @ data #use kmeans++ initialization if nothing is provided if init is None: data_np = data.detach().numpy() norm = (data_np**2).sum(axis=1) init = sklearn.cluster.k_means_._k_init(data_np, k, norm, sklearn.utils.check_random_state(None)) init = torch.tensor(init, requires_grad=True) if num_iter == 0: return init mu = init n = data.shape[0] d = data.shape[1] # data = torch.diag(1./torch.norm(data, dim=1, p=2))@data for t in range(num_iter): #get distances between all data points and cluster centers # dist = torch.cosine_similarity(data[:, None].expand(n, k, d).reshape((-1, d)), mu[None].expand(n, k, d).reshape((-1, d))).reshape((n, k)) dist = data @ mu.t() #cluster responsibilities via softmax r = torch.softmax(cluster_temp*dist, 1) #total responsibility of each cluster cluster_r = r.sum(dim=0) #mean of points in each cluster weighted by responsibility cluster_mean = (r.t().unsqueeze(1) @ data.expand(k, *data.shape)).squeeze(1) #update cluster means new_mu = torch.diag(1/cluster_r) @ cluster_mean mu = new_mu dist = data @ mu.t() r = torch.softmax(cluster_temp*dist, 1) return mu, r, dist
Example #27
Source File: scalability_test.py From TICC with BSD 2-Clause "Simplified" License | 5 votes |
def computeF1_macro(confusion_matrix,matching, num_clusters): """ computes the macro F1 score confusion matrix : requres permutation matching according to which matrix must be permuted """ ##Permute the matrix columns permuted_confusion_matrix = np.zeros([num_clusters,num_clusters]) for cluster in xrange(num_clusters): matched_cluster = matching[cluster] permuted_confusion_matrix[:,cluster] = confusion_matrix[:,matched_cluster] ##Compute the F1 score for every cluster F1_score = 0 for cluster in xrange(num_clusters): TP = permuted_confusion_matrix[cluster,cluster] FP = np.sum(permuted_confusion_matrix[:,cluster]) - TP FN = np.sum(permuted_confusion_matrix[cluster,:]) - TP precision = TP/(TP + FP) recall = TP/(TP + FN) f1 = stats.hmean([precision,recall]) F1_score += f1 F1_score /= num_clusters return F1_score ############ ##The basic folder to be created
Example #28
Source File: scalability_test.py From TICC with BSD 2-Clause "Simplified" License | 5 votes |
def compute_confusion_matrix(num_clusters,clustered_points_algo, sorted_indices_algo): """ computes a confusion matrix and returns it """ seg_len = 50 true_confusion_matrix = np.zeros([num_clusters,num_clusters]) for point in xrange(len(clustered_points_algo)): cluster = clustered_points_algo[point] #CASE E : ABCABC num = (int(sorted_indices_algo[point]/seg_len) %num_clusters) true_confusion_matrix[num,cluster] += 1 return true_confusion_matrix
Example #29
Source File: scalability_test.py From TICC with BSD 2-Clause "Simplified" License | 5 votes |
def computeF1Score_delete(num_cluster,matching_algo,actual_clusters,threshold_algo,save_matrix = False): """ computes the F1 scores and returns a list of values """ F1_score = np.zeros(num_cluster) for cluster in xrange(num_cluster): matched_cluster = matching_algo[cluster] true_matrix = actual_clusters[cluster] estimated_matrix = threshold_algo[matched_cluster] TP = 0 TN = 0 FP = 0 FN = 0 for i in xrange(num_stacked*n): for j in xrange(num_stacked*n): if estimated_matrix[i,j] == 1 and true_matrix[i,j] != 0: TP += 1.0 elif estimated_matrix[i,j] == 0 and true_matrix[i,j] == 0: TN += 1.0 elif estimated_matrix[i,j] == 1 and true_matrix[i,j] == 0: FP += 1.0 else: FN += 1.0 precision = (TP)/(TP + FP) print "cluster #", cluster print "TP,TN,FP,FN---------->", (TP,TN,FP,FN) recall = TP/(TP + FN) f1 = (2*precision*recall)/(precision + recall) F1_score[cluster] = f1 return F1_score
Example #30
Source File: scalability_test.py From TICC with BSD 2-Clause "Simplified" License | 5 votes |
def updateClusters(LLE_node_vals,switch_penalty = 1): """ Takes in LLE_node_vals matrix and computes the path that minimizes the total cost over the path Note the LLE's are negative of the true LLE's actually!!!!! Note: switch penalty > 0 """ (T,num_clusters) = LLE_node_vals.shape future_cost_vals = np.zeros(LLE_node_vals.shape) ##compute future costs for i in xrange(T-2,-1,-1): j = i+1 indicator = np.zeros(num_clusters) future_costs = future_cost_vals[j,:] lle_vals = LLE_node_vals[j,:] for cluster in xrange(num_clusters): total_vals = future_costs + lle_vals + switch_penalty total_vals[cluster] -= switch_penalty future_cost_vals[i,cluster] = np.min(total_vals) ##compute the best path path = np.zeros(T) ##the first location curr_location = np.argmin(future_cost_vals[0,:] + LLE_node_vals[0,:]) path[0] = curr_location DP_start2 = time.time() ##compute the path for i in xrange(T-1): j = i+1 future_costs = future_cost_vals[j,:] lle_vals = LLE_node_vals[j,:] total_vals = future_costs + lle_vals + switch_penalty total_vals[int(path[i])] -= switch_penalty path[i+1] = np.argmin(total_vals) ##return the computed path return path