Finding Aggregate Ranks of same items ranked by different people
Given a list of ranked items of a particular domain, how do we aggregate various rankings to find a most popular rank. For example if we have a list of ML algorithms say:
1 SVM
2 LDA
3 KNN
and another list which says
1 KNN
2 LDA
and so on we have multiple such lists. How do we find an overall rank for the different ML algorithms?
In this article I am using Maximum-Weight Bipartite-Matching with max-cardinality to find a few ranked items. This is formulated as a Graph problem. Basically
- every item ( LDA, SVM, KNN etc) is assigned a node and
- every rank ( 1, 2, 3 ...) is assigned a node
- we create an edge between item and rank, also assign a a weight to this edge -- how many times this item was ranked with a particular rank value.
Using this Graph, we can treat the above problem as Maximal Matching problem in a Weighted Bipartite Graph.
sudo dnf install -y numpy python2-networkx
python algos.py
Here are the results:
Rank  1: Linear Regression
Rank  2: k-Means
Rank  3: SVM
Rank  4: Apriori
Rank  5: kNN
Rank  6: SVD
Rank  7: Decision Tree
Rank  8: Naive Bayes
Rank  9: ANN
Rank 10: Bayesian Networks
Rank 11: Logistic Regression
Rank 12: Boosting
Rank 13: Gaussian Processes
Rank 14: HDPs
Rank 15: Logit Boost
Rank 16: Model Tree
Rank 17: PLS
Rank 18: Random Forests
Rank 19: Ridge Regression