{"action":"created","issue":{"url":"https://api.github.com/repos/biocore/emperor/issues/356","labels_url":"https://api.github.com/repos/biocore/emperor/issues/356/labels{/name}","comments_url":"https://api.github.com/repos/biocore/emperor/issues/356/comments","events_url":"https://api.github.com/repos/biocore/emperor/issues/356/events","html_url":"https://github.com/biocore/emperor/issues/356","id":60030761,"number":356,"title":"Adding alternative ordination and clustering methods","user":{"login":"mortonjt","id":4184797,"avatar_url":"https://avatars.githubusercontent.com/u/4184797?v=3","gravatar_id":"","url":"https://api.github.com/users/mortonjt","html_url":"https://github.com/mortonjt","followers_url":"https://api.github.com/users/mortonjt/followers","following_url":"https://api.github.com/users/mortonjt/following{/other_user}","gists_url":"https://api.github.com/users/mortonjt/gists{/gist_id}","starred_url":"https://api.github.com/users/mortonjt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mortonjt/subscriptions","organizations_url":"https://api.github.com/users/mortonjt/orgs","repos_url":"https://api.github.com/users/mortonjt/repos","events_url":"https://api.github.com/users/mortonjt/events{/privacy}","received_events_url":"https://api.github.com/users/mortonjt/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/biocore/emperor/labels/group%20discussion","name":"group discussion","color":"ff2a80"},{"url":"https://api.github.com/repos/biocore/emperor/labels/question","name":"question","color":"cc317c"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":16,"created_at":"2015-03-05T22:59:33Z","updated_at":"2015-04-02T19:23:05Z","closed_at":null,"body":"Looking at Visumap, the majority of those algorithms are found in scikit-learn or scikit-bio, namely\r\n\r\n__Ordination__\r\n* [SMACOF](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/manifold/mds.py)\r\n* [Correspondence Analysis](https://github.com/biocore/scikit-bio/blob/master/skbio/stats/ordination/_canonical_correspondence_analysis.py)\r\n\r\n__Classification__\r\n* [Linear Discriminate Analysis](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/lda.py)\r\n* [Nearest Neighbor](https://github.com/scikit-learn/scikit-learn/tree/master/sklearn/neighbors)\r\n\r\n__Clustering__\r\n* [K-Mean Clustering](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/cluster/k_means_.py)\r\n* [Mean-Shift Clustering](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/cluster/mean_shift_.py)\r\n* [Spectral Clustering](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/cluster/spectral.py)\r\n* [Agglomerative Clustering](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/cluster/hierarchical.py)\r\n\r\nHere are some methods found in Visumap that aren't in either of these packages, but would be really cool to have\r\n* [Curvilinear Component Analysis](http://www.sciencedirect.com/science/article/pii/S0020025512006408)\r\n* [Stochastic Neighbor Embedding](http://lvdmaaten.github.io/tsne/)\r\n* [Self-Organizing Map](http://en.wikipedia.org/wiki/Self-organizing_map)\r\n* [Self-Organzing Graph](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.37.6856&rep=rep1&type=pdf)\r\n\r\nAlso may want to consider the following non-linear ordination methods found in scikit-learn\r\n* [kernal PCA](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/decomposition/kernel_pca.py)\r\n* [isomap](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/manifold/isomap.py)\r\n* [probabilitistic PCA](https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/decomposition/factor_analysis.py)\r\n\r\nHere are a few more ideas that I think would be really cool to implement\r\n* [Tetrahedron plots](http://mathematica.stackexchange.com/questions/57432/extending-a-ternary-plot-to-a-tetrahedron-using-listplot) \r\n* [Convex hull](http://www.cs.mtu.edu/~shene/PUBLICATIONS/2004/Hull2VD.pdf)\r\n* [Minimum spanning ellipsoids](http://dl.acm.org/citation.cfm?id=808672)\r\n\r\nBut before we go about turning this into a TODO list, I think we should first consider the following\r\n\r\n1. Where would be preprocessing procedures live?  Should they be placed in QIIME2?\r\n2. If the above answer is yes, then we will need to redesign the current eigenvector file format to potentially hold 2 sets of eigenvectors rather than just 1"},"comment":{"url":"https://api.github.com/repos/biocore/emperor/issues/comments/89015714","html_url":"https://github.com/biocore/emperor/issues/356#issuecomment-89015714","issue_url":"https://api.github.com/repos/biocore/emperor/issues/356","id":89015714,"user":{"login":"ElDeveloper","id":375307,"avatar_url":"https://avatars.githubusercontent.com/u/375307?v=3","gravatar_id":"","url":"https://api.github.com/users/ElDeveloper","html_url":"https://github.com/ElDeveloper","followers_url":"https://api.github.com/users/ElDeveloper/followers","following_url":"https://api.github.com/users/ElDeveloper/following{/other_user}","gists_url":"https://api.github.com/users/ElDeveloper/gists{/gist_id}","starred_url":"https://api.github.com/users/ElDeveloper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ElDeveloper/subscriptions","organizations_url":"https://api.github.com/users/ElDeveloper/orgs","repos_url":"https://api.github.com/users/ElDeveloper/repos","events_url":"https://api.github.com/users/ElDeveloper/events{/privacy}","received_events_url":"https://api.github.com/users/ElDeveloper/received_events","type":"User","site_admin":false},"created_at":"2015-04-02T19:23:05Z","updated_at":"2015-04-02T19:23:05Z","body":"Do you mean something like the Emperor object in core.py? Admittedly\nthat class needs to expand a bit more to cover the full interface\nprovided through the CLI.\n\nOn (Apr-02-15|11:54), mortonjt wrote:\n> Here's another thought,\n> \n> Would it be a good idea to have a publicly accessible preprocessing API in emperor?\n> I'm thinking it would have the following benefits\n> \n> * Could potentially alleviate complete dependence on skbio/QIIME.  We could had preprocessing functions that can accept any set of eigenvector/eigenvalues to plot, which can make it easier for users to use other dimensionality reduction methods (e.g. methods from scikit-learn)\n> * Will prevent bloating in skbio.  I think if we start porting over all of our helper functions into skbio (e.g. biplot calculation), this will bloat the skbio API, making it harder to maintain.\n> \n> \n> ---\n> Reply to this email directly or view it on GitHub:\n> https://github.com/biocore/emperor/issues/356#issuecomment-89008233\n"}}