Python sklearn.utils.linear_assignment_.linear_assignment() Examples
The following are 30
code examples of sklearn.utils.linear_assignment_.linear_assignment().
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.utils.linear_assignment_
, or try the search function
.
Example #1
Source File: metrics.py From DEC-DA with MIT License | 8 votes |
def acc(y_true, y_pred): """ Calculate clustering accuracy. Require scikit-learn installed # Arguments y: true labels, numpy.array with shape `(n_samples,)` y_pred: predicted labels, numpy.array with shape `(n_samples,)` # Return accuracy, in [0,1] """ y_true = y_true.astype(np.int64) assert y_pred.size == y_true.size D = max(y_pred.max(), y_true.max()) + 1 w = np.zeros((D, D), dtype=np.int64) for i in range(y_pred.size): w[y_pred[i], y_true[i]] += 1 from sklearn.utils.linear_assignment_ import linear_assignment ind = linear_assignment(w.max() - w) return sum([w[i, j] for i, j in ind]) * 1.0 / y_pred.size
Example #2
Source File: _box_match.py From tf2-eager-yolo3 with MIT License | 6 votes |
def __init__(self, boxes1, boxes2, labels1=None, labels2=None): self._boxes1 = boxes1 self._boxes2 = boxes2 if len(boxes1) == 0 or len(boxes2) == 0: pass else: if labels1 is None or labels2 is None: self._iou_matrix = self._calc(boxes1, boxes2, np.ones((len(boxes1),)), np.ones((len(boxes2),))) else: self._iou_matrix = self._calc(boxes1, boxes2, labels1, labels2) self._match_pairs = linear_assignment(-1*self._iou_matrix)
Example #3
Source File: conll_coref_scores.py From magnitude with MIT License | 6 votes |
def ceafe(clusters, gold_clusters): u""" Computes the Constrained EntityAlignment F-Measure (CEAF) for evaluating coreference. Gold and predicted mentions are aligned into clusterings which maximise a metric - in this case, the F measure between gold and predicted clusters. <https://www.semanticscholar.org/paper/On-Coreference-Resolution-Performance-Metrics-Luo/de133c1f22d0dfe12539e25dda70f28672459b99> """ clusters = [cluster for cluster in clusters if len(cluster) != 1] scores = np.zeros((len(gold_clusters), len(clusters))) for i, gold_cluster in enumerate(gold_clusters): for j, cluster in enumerate(clusters): scores[i, j] = Scorer.phi4(gold_cluster, cluster) matching = linear_assignment(-scores) similarity = sum(scores[matching[:, 0], matching[:, 1]]) return similarity, len(clusters), similarity, len(gold_clusters)
Example #4
Source File: utils.py From deep-k-means with GNU General Public License v3.0 | 6 votes |
def cluster_acc(y_true, y_pred): """ Calculate clustering accuracy. Require scikit-learn installed. (Taken from https://github.com/XifengGuo/IDEC-toy/blob/master/DEC.py) # Arguments y: true labels, numpy.array with shape `(n_samples,)` y_pred: predicted labels, numpy.array with shape `(n_samples,)` # Return accuracy, in [0,1] """ y_true = y_true.astype(np.int64) assert y_pred.size == y_true.size D = max(y_pred.max(), y_true.max()) + 1 w = np.zeros((D, D), dtype=np.int64) for i in range(y_pred.size): w[y_pred[i], y_true[i]] += 1 ind = linear_assignment(w.max() - w) # Optimal label mapping based on the Hungarian algorithm return sum([w[i, j] for i, j in ind]) * 1.0 / y_pred.size
Example #5
Source File: metrics.py From DEC-keras with MIT License | 6 votes |
def acc(y_true, y_pred): """ Calculate clustering accuracy. Require scikit-learn installed # Arguments y: true labels, numpy.array with shape `(n_samples,)` y_pred: predicted labels, numpy.array with shape `(n_samples,)` # Return accuracy, in [0,1] """ y_true = y_true.astype(np.int64) assert y_pred.size == y_true.size D = max(y_pred.max(), y_true.max()) + 1 w = np.zeros((D, D), dtype=np.int64) for i in range(y_pred.size): w[y_pred[i], y_true[i]] += 1 from sklearn.utils.linear_assignment_ import linear_assignment ind = linear_assignment(w.max() - w) return sum([w[i, j] for i, j in ind]) * 1.0 / y_pred.size
Example #6
Source File: util.py From DTC with MIT License | 6 votes |
def cluster_acc(y_true, y_pred): """ Calculate clustering accuracy. Require scikit-learn installed # Arguments y: true labels, numpy.array with shape `(n_samples,)` y_pred: predicted labels, numpy.array with shape `(n_samples,)` # Return accuracy, in [0,1] """ y_true = y_true.astype(np.int64) assert y_pred.size == y_true.size D = max(y_pred.max(), y_true.max()) + 1 w = np.zeros((D, D), dtype=np.int64) for i in range(y_pred.size): w[y_pred[i], y_true[i]] += 1 ind = linear_assignment(w.max() - w) return sum([w[i, j] for i, j in ind]) * 1.0 / y_pred.size
Example #7
Source File: util.py From sinkhorn-policy-gradient.pytorch with BSD 3-Clause "New" or "Revised" License | 5 votes |
def parallel_matching(batch): perms = [] (m, n, n) = batch.shape for i in range(m): perm = torch.zeros(n, n) matching = linear_assignment(-batch[i]) perm[matching[:,0], matching[:,1]] = 1 perms.append(perm) return perms
Example #8
Source File: vade.py From UnsupervisedDeepLearning-Pytorch with MIT License | 5 votes |
def cluster_acc(Y_pred, Y): from sklearn.utils.linear_assignment_ import linear_assignment assert Y_pred.size == Y.size D = max(Y_pred.max(), Y.max())+1 w = np.zeros((D,D), dtype=np.int64) for i in range(Y_pred.size): w[Y_pred[i], Y[i]] += 1 ind = linear_assignment(w.max() - w) return sum([w[i,j] for i,j in ind])*1.0/Y_pred.size, w
Example #9
Source File: utils.py From SCALE with MIT License | 5 votes |
def reassign_cluster_with_ref(Y_pred, Y): """ Reassign cluster to reference labels Inputs: Y_pred: predict y classes Y: true y classes Return: f1_score: clustering f1 score y_pred: reassignment index predict y classes indices: classes assignment """ def reassign_cluster(y_pred, index): y_ = np.zeros_like(y_pred) for i, j in index: y_[np.where(y_pred==i)] = j return y_ from sklearn.utils.linear_assignment_ import linear_assignment # print(Y_pred.size, Y.size) assert Y_pred.size == Y.size D = max(Y_pred.max(), Y.max())+1 w = np.zeros((D,D), dtype=np.int64) for i in range(Y_pred.size): w[Y_pred[i], Y[i]] += 1 ind = linear_assignment(w.max() - w) return reassign_cluster(Y_pred, ind)
Example #10
Source File: utils.py From torch_DCEC with MIT License | 5 votes |
def acc(labels_true, labels_pred): labels_true = labels_true.astype(np.int64) assert labels_pred.size == labels_true.size D = max(labels_pred.max(), labels_true.max()) + 1 w = np.zeros((D, D), dtype=np.int64) for i in range(labels_pred.size): w[labels_pred[i], labels_true[i]] += 1 from sklearn.utils.linear_assignment_ import linear_assignment ind = linear_assignment(w.max() - w) return sum([w[i, j] for i, j in ind]) * 1.0 / labels_pred.size
Example #11
Source File: dec.py From dynamic-training-with-apache-mxnet-on-aws with Apache License 2.0 | 5 votes |
def cluster_acc(Y_pred, Y): from sklearn.utils.linear_assignment_ import linear_assignment assert Y_pred.size == Y.size D = max(Y_pred.max(), Y.max())+1 w = np.zeros((D,D), dtype=np.int64) for i in range(Y_pred.size): w[Y_pred[i], int(Y[i])] += 1 ind = linear_assignment(w.max() - w) return sum([w[i,j] for i,j in ind])*1.0/Y_pred.size, w
Example #12
Source File: bicluster.py From Splunking-Crime with GNU Affero General Public License v3.0 | 5 votes |
def consensus_score(a, b, similarity="jaccard"): """The similarity of two sets of biclusters. Similarity between individual biclusters is computed. Then the best matching between sets is found using the Hungarian algorithm. The final score is the sum of similarities divided by the size of the larger set. Read more in the :ref:`User Guide <biclustering>`. Parameters ---------- a : (rows, columns) Tuple of row and column indicators for a set of biclusters. b : (rows, columns) Another set of biclusters like ``a``. similarity : string or function, optional, default: "jaccard" May be the string "jaccard" to use the Jaccard coefficient, or any function that takes four arguments, each of which is a 1d indicator vector: (a_rows, a_columns, b_rows, b_columns). References ---------- * Hochreiter, Bodenhofer, et. al., 2010. `FABIA: factor analysis for bicluster acquisition <https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2881408/>`__. """ if similarity == "jaccard": similarity = _jaccard matrix = _pairwise_similarity(a, b, similarity) indices = linear_assignment(1. - matrix) n_a = len(a[0]) n_b = len(b[0]) return matrix[indices[:, 0], indices[:, 1]].sum() / max(n_a, n_b)
Example #13
Source File: util.py From DCCM with GNU General Public License v3.0 | 5 votes |
def clustering_acc(y_true, y_pred): y_true = y_true.astype(np.int64) assert y_pred.size == y_true.size D = max(y_pred.max(), y_true.max()) + 1 w = np.zeros((D, D), dtype=np.int64) for i in range(y_pred.size): w[y_pred[i], y_true[i]] += 1 ind = linear_assignment(w.max() - w) return sum([w[i, j] for i, j in ind]) * 1.0 / y_pred.size
Example #14
Source File: spatial.py From oddt with BSD 3-Clause "New" or "Revised" License | 5 votes |
def linear_sum_assignment(M): out = linear_assignment(M) return out[:, 0], out[:, 1]
Example #15
Source File: keras_dec.py From DEC-Keras with GNU General Public License v3.0 | 5 votes |
def cluster_acc(self, y_true, y_pred): assert y_pred.size == y_true.size D = max(y_pred.max(), y_true.max())+1 w = np.zeros((D, D), dtype=np.int64) for i in range(y_pred.size): w[y_pred[i], y_true[i]] += 1 ind = linear_assignment(w.max() - w) return sum([w[i, j] for i, j in ind])*1.0/y_pred.size, w
Example #16
Source File: eval_metrics.py From IIC with MIT License | 5 votes |
def _hungarian_match(flat_preds, flat_targets, preds_k, targets_k): assert (isinstance(flat_preds, torch.Tensor) and isinstance(flat_targets, torch.Tensor) and flat_preds.is_cuda and flat_targets.is_cuda) num_samples = flat_targets.shape[0] assert (preds_k == targets_k) # one to one num_k = preds_k num_correct = np.zeros((num_k, num_k)) for c1 in xrange(num_k): for c2 in xrange(num_k): # elementwise, so each sample contributes once votes = int(((flat_preds == c1) * (flat_targets == c2)).sum()) num_correct[c1, c2] = votes # num_correct is small match = linear_assignment(num_samples - num_correct) # return as list of tuples, out_c to gt_c res = [] for out_c, gt_c in match: res.append((out_c, gt_c)) return res
Example #17
Source File: linear_assignment.py From pymotutils with GNU General Public License v3.0 | 5 votes |
def min_cost_matching(cost_matrix, max_cost=None): """Solve a linear assignment problem. Parameters ---------- cost_matrix : ndarray An NxM matrix where element (i,j) contains the cost of matching the i-th element out of the first set of N elements to the j-th element out of the second set of M elements. max_cost: float Gating threshold. Associations with cost larger than this value are disregarded. Returns ------- (ndarray, ndarray, ndarray) Returns a tuple with the following three entries: * An array of shape Lx2 of matched elements (row index, column index). * An array of unmatched row indices. * An array of unmatched column indices. """ if max_cost is not None: cost_matrix[cost_matrix > max_cost] = max_cost + _EPS_COST matched_indices = la_solver(cost_matrix) if max_cost is not None: row_indices, col_indices = matched_indices[:, 0], matched_indices[:, 1] mask = cost_matrix[row_indices, col_indices] <= max_cost matched_indices = matched_indices[mask, :] # TODO(nwojke): I think there is a numpy function for the set difference # that is computed here (it might also be possible to speed this up if # sklearn preserves the order of indices, which it does?). unmatched_a = np.array( list(set(range((cost_matrix.shape[0]))) - set(matched_indices[:, 0]))) unmatched_b = np.array( list(set(range((cost_matrix.shape[1]))) - set(matched_indices[:, 1]))) return matched_indices, unmatched_a, unmatched_b
Example #18
Source File: dec.py From SNIPER-mxnet with Apache License 2.0 | 5 votes |
def cluster_acc(Y_pred, Y): from sklearn.utils.linear_assignment_ import linear_assignment assert Y_pred.size == Y.size D = max(Y_pred.max(), Y.max())+1 w = np.zeros((D,D), dtype=np.int64) for i in range(Y_pred.size): w[Y_pred[i], int(Y[i])] += 1 ind = linear_assignment(w.max() - w) return sum([w[i,j] for i,j in ind])*1.0/Y_pred.size, w
Example #19
Source File: bicluster.py From twitter-stock-recommendation with MIT License | 5 votes |
def consensus_score(a, b, similarity="jaccard"): """The similarity of two sets of biclusters. Similarity between individual biclusters is computed. Then the best matching between sets is found using the Hungarian algorithm. The final score is the sum of similarities divided by the size of the larger set. Read more in the :ref:`User Guide <biclustering>`. Parameters ---------- a : (rows, columns) Tuple of row and column indicators for a set of biclusters. b : (rows, columns) Another set of biclusters like ``a``. similarity : string or function, optional, default: "jaccard" May be the string "jaccard" to use the Jaccard coefficient, or any function that takes four arguments, each of which is a 1d indicator vector: (a_rows, a_columns, b_rows, b_columns). References ---------- * Hochreiter, Bodenhofer, et. al., 2010. `FABIA: factor analysis for bicluster acquisition <https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2881408/>`__. """ if similarity == "jaccard": similarity = _jaccard matrix = _pairwise_similarity(a, b, similarity) indices = linear_assignment(1. - matrix) n_a = len(a[0]) n_b = len(b[0]) return matrix[indices[:, 0], indices[:, 1]].sum() / max(n_a, n_b)
Example #20
Source File: metrics.py From coref with Apache License 2.0 | 5 votes |
def ceafe(clusters, gold_clusters): clusters = [c for c in clusters if len(c) != 1] scores = np.zeros((len(gold_clusters), len(clusters))) for i in range(len(gold_clusters)): for j in range(len(clusters)): scores[i, j] = phi4(gold_clusters[i], clusters[j]) matching = linear_assignment(-scores) similarity = sum(scores[matching[:, 0], matching[:, 1]]) return similarity, len(clusters), similarity, len(gold_clusters)
Example #21
Source File: utils.py From MagnetLoss-PyTorch with MIT License | 5 votes |
def unsupervised_clustering_accuracy(emb, labels): k = np.unique(labels).size kmeans = KMeans(n_clusters=k, max_iter=35, n_init=15, n_jobs=-1).fit(emb) emb_labels = kmeans.labels_ G = np.zeros((k,k)) for i in range(k): lbl = labels[emb_labels == i] uc = itemfreq(lbl) for uu, cc in uc: G[i,uu] = -cc A = linear_assignment_.linear_assignment(G) acc = 0.0 for (cluster, best) in A: acc -= G[cluster,best] return acc / float(len(labels))
Example #22
Source File: metrics.py From gap with MIT License | 5 votes |
def ceafe(clusters, gold_clusters): clusters = [c for c in clusters if len(c) != 1] scores = np.zeros((len(gold_clusters), len(clusters))) for i in range(len(gold_clusters)): for j in range(len(clusters)): scores[i, j] = phi4(gold_clusters[i], clusters[j]) matching = linear_assignment(-scores) similarity = sum(scores[matching[:, 0], matching[:, 1]]) return similarity, len(clusters), similarity, len(gold_clusters)
Example #23
Source File: data_association.py From experimenting-with-sort with GNU General Public License v3.0 | 5 votes |
def associate_detections_to_trackers(detections,trackers,iou_threshold = 0.3): """ Assigns detections to tracked object (both represented as bounding boxes) Returns 3 lists of matches, unmatched_detections and unmatched_trackers """ if(len(trackers)==0): return np.empty((0,2),dtype=int), np.arange(len(detections)), np.empty((0,5),dtype=int) iou_matrix = np.zeros((len(detections),len(trackers)),dtype=np.float32) for d,det in enumerate(detections): for t,trk in enumerate(trackers): iou_matrix[d,t] = iou(det,trk) '''The linear assignment module tries to minimise the total assignment cost. In our case we pass -iou_matrix as we want to maximise the total IOU between track predictions and the frame detection.''' matched_indices = linear_assignment(-iou_matrix) unmatched_detections = [] for d,det in enumerate(detections): if(d not in matched_indices[:,0]): unmatched_detections.append(d) unmatched_trackers = [] for t,trk in enumerate(trackers): if(t not in matched_indices[:,1]): unmatched_trackers.append(t) #filter out matched with low IOU matches = [] for m in matched_indices: if(iou_matrix[m[0],m[1]]<iou_threshold): unmatched_detections.append(m[0]) unmatched_trackers.append(m[1]) else: matches.append(m.reshape(1,2)) if(len(matches)==0): matches = np.empty((0,2),dtype=int) else: matches = np.concatenate(matches,axis=0) return matches, np.array(unmatched_detections), np.array(unmatched_trackers)
Example #24
Source File: tracking_utils.py From 3d-vehicle-tracking with BSD 3-Clause "New" or "Revised" License | 5 votes |
def associate_detections_to_trackers(detections, trackers, affinity_mat, affinity_threshold): """ Assigns detections to tracked object (both represented as bounding boxes) Returns 3 lists of matches, unmatched_detections and unmatched_trackers """ if (len(trackers) == 0): return np.empty((0, 2), dtype=int), np.arange( len(detections)), np.empty((0, 2), dtype=int) matched_indices = linear_assignment(-affinity_mat) unmatched_detections = [] for d, det in enumerate(detections): if d not in matched_indices[:, 0]: unmatched_detections.append(d) unmatched_trackers = [] for t, trk in enumerate(trackers): if t not in matched_indices[:, 1]: unmatched_trackers.append(t) # filter out matched with low IOU matches = [] for m in matched_indices: if affinity_mat[m[0], m[1]] < affinity_threshold: unmatched_detections.append(m[0]) unmatched_trackers.append(m[1]) else: matches.append(m.reshape(1, 2)) if len(matches) == 0: matches = np.empty((0, 2), dtype=int) else: matches = np.concatenate(matches, axis=0) return matches, np.array(unmatched_detections), np.array(unmatched_trackers)
Example #25
Source File: metric.py From fastNLP with Apache License 2.0 | 5 votes |
def ceafe(clusters, gold_clusters): clusters = [c for c in clusters if len(c) != 1] scores = np.zeros((len(gold_clusters), len(clusters))) for i in range(len(gold_clusters)): for j in range(len(clusters)): scores[i, j] = phi4(gold_clusters[i], clusters[j]) matching = linear_assignment(-scores) similarity = sum(scores[matching[:, 0], matching[:, 1]]) return similarity, len(clusters), similarity, len(gold_clusters)
Example #26
Source File: metrics.py From e2e-coref with Apache License 2.0 | 5 votes |
def ceafe(clusters, gold_clusters): clusters = [c for c in clusters if len(c) != 1] scores = np.zeros((len(gold_clusters), len(clusters))) for i in range(len(gold_clusters)): for j in range(len(clusters)): scores[i, j] = phi4(gold_clusters[i], clusters[j]) matching = linear_assignment(-scores) similarity = sum(scores[matching[:, 0], matching[:, 1]]) return similarity, len(clusters), similarity, len(gold_clusters)
Example #27
Source File: sort.py From Vehicle-Detection-and-Tracking-Usig-YOLO-and-Deep-Sort-with-Keras-and-Tensorflow with MIT License | 5 votes |
def associate_detections_to_trackers(detections,trackers,iou_threshold = 0.3): """ Assigns detections to tracked object (both represented as bounding boxes) Returns 3 lists of matches, unmatched_detections and unmatched_trackers """ if(len(trackers)==0): return np.empty((0,2),dtype=int), np.arange(len(detections)), np.empty((0,5),dtype=int) iou_matrix = np.zeros((len(detections),len(trackers)),dtype=np.float32) for d,det in enumerate(detections): for t,trk in enumerate(trackers): iou_matrix[d,t] = iou(det,trk) matched_indices = linear_assignment(-iou_matrix) unmatched_detections = [] for d,det in enumerate(detections): if(d not in matched_indices[:,0]): unmatched_detections.append(d) unmatched_trackers = [] for t,trk in enumerate(trackers): if(t not in matched_indices[:,1]): unmatched_trackers.append(t) #filter out matched with low IOU matches = [] for m in matched_indices: if(iou_matrix[m[0],m[1]]<iou_threshold): unmatched_detections.append(m[0]) unmatched_trackers.append(m[1]) else: matches.append(m.reshape(1,2)) if(len(matches)==0): matches = np.empty((0,2),dtype=int) else: matches = np.concatenate(matches,axis=0) return matches, np.array(unmatched_detections), np.array(unmatched_trackers)
Example #28
Source File: dec.py From training_results_v0.6 with Apache License 2.0 | 5 votes |
def cluster_acc(Y_pred, Y): from sklearn.utils.linear_assignment_ import linear_assignment assert Y_pred.size == Y.size D = max(Y_pred.max(), Y.max())+1 w = np.zeros((D,D), dtype=np.int64) for i in range(Y_pred.size): w[Y_pred[i], int(Y[i])] += 1 ind = linear_assignment(w.max() - w) return sum([w[i,j] for i,j in ind])*1.0/Y_pred.size, w
Example #29
Source File: sort_yolo.py From ROLO with Apache License 2.0 | 5 votes |
def associate_detections_to_trackers(detections,trackers,iou_threshold = 0.3): """ Assigns detections to tracked object (both represented as bounding boxes) Returns 3 lists of matches, unmatched_detections and unmatched_trackers """ if(len(trackers)==0): return np.empty((0,2),dtype=int), np.arange(len(detections)), np.empty((0,5),dtype=int) iou_matrix = np.zeros((len(detections),len(trackers)),dtype=np.float32) for d,det in enumerate(detections): for t,trk in enumerate(trackers): iou_matrix[d,t] = iou(det,trk) matched_indices = linear_assignment(-iou_matrix) unmatched_detections = [] for d,det in enumerate(detections): if(d not in matched_indices[:,0]): unmatched_detections.append(d) unmatched_trackers = [] for t,trk in enumerate(trackers): if(t not in matched_indices[:,1]): unmatched_trackers.append(t) #filter out matched with low IOU matches = [] for m in matched_indices: if(iou_matrix[m[0],m[1]]<iou_threshold): unmatched_detections.append(m[0]) unmatched_trackers.append(m[1]) else: matches.append(m.reshape(1,2)) if(len(matches)==0): matches = np.empty((0,2),dtype=int) else: matches = np.concatenate(matches,axis=0) return matches, np.array(unmatched_detections), np.array(unmatched_trackers)
Example #30
Source File: n2d.py From n2d with GNU General Public License v3.0 | 5 votes |
def best_cluster_fit(y_true, y_pred): y_true = y_true.astype(np.int64) D = max(y_pred.max(), y_true.max()) + 1 w = np.zeros((D, D), dtype=np.int64) for i in range(y_pred.size): w[y_pred[i], y_true[i]] += 1 ind = linear_assignment(w.max() - w) best_fit = [] for i in range(y_pred.size): for j in range(len(ind)): if ind[j][0] == y_pred[i]: best_fit.append(ind[j][1]) return best_fit, ind, w