{"action":"created","comment":{"url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments/95516898","pull_request_review_id":16072473,"id":95516898,"diff_hunk":"@@ -0,0 +1,170 @@\n+from functools import partial\r\n+\r\n+import numpy as np\r\n+\r\n+from sklearn.metrics.cluster import adjusted_mutual_info_score\r\n+from sklearn.metrics.cluster import adjusted_rand_score\r\n+from sklearn.metrics.cluster import completeness_score\r\n+from sklearn.metrics.cluster import fowlkes_mallows_score\r\n+from sklearn.metrics.cluster import homogeneity_score\r\n+from sklearn.metrics.cluster import mutual_info_score\r\n+from sklearn.metrics.cluster import normalized_mutual_info_score\r\n+from sklearn.metrics.cluster import v_measure_score\r\n+from sklearn.metrics.cluster import silhouette_score\r\n+from sklearn.metrics.cluster import calinski_harabaz_score\r\n+\r\n+from sklearn.utils.testing import assert_equal\r\n+from sklearn.utils.testing import assert_not_equal\r\n+from sklearn.utils.testing import assert_greater\r\n+from sklearn.utils.testing import assert_less\r\n+from sklearn.utils.testing import assert_almost_equal\r\n+\r\n+\r\n+# Dictionaries of metrics\r\n+# ------------------------\r\n+# The goal of having those dictionaries is to have an easy way to call a\r\n+# particular metric and associate a name to each function:\r\n+#   - SUPERVISED_METRICS: all supervised cluster metrics - (when given a\r\n+# ground truth value)\r\n+#   - UNSUPERVISED_METRICS: all unsupervised cluster metrics\r\n+#\r\n+# Those dictionaries will be used to test systematically some invariance\r\n+# properties, e.g. invariance toward several input layout.\r\n+#\r\n+\r\n+# Metrics used to test similarity between bicluster\r\n+SUPERVISED_METRICS = {\r\n+    \"adjusted_mutual_info_score\": adjusted_mutual_info_score,\r\n+    \"adjusted_rand_score\": adjusted_rand_score,\r\n+    \"completeness_score\": completeness_score,\r\n+    \"homogeneity_score\": homogeneity_score,\r\n+    \"mutual_info_score\": mutual_info_score,\r\n+    \"normalized_mutual_info_score\": normalized_mutual_info_score,\r\n+    \"v_measure_score\": v_measure_score,\r\n+    \"fowlkes_mallows_score\": fowlkes_mallows_score\r\n+}\r\n+\r\n+UNSUPERVISED_METRICS = {\r\n+    \"silhouette_score\": silhouette_score,\r\n+    \"silhouette_manhattan\": partial(silhouette_score, metric='manhattan'),\r\n+    \"calinski_harabaz_score\": calinski_harabaz_score\r\n+}\r\n+\r\n+# Lists of metrics with common properties\r\n+# ---------------------------------------\r\n+# Lists of metrics with common properties are used to test systematically some\r\n+# functionalities and invariance, e.g. SYMMETRIC_METRICS lists all metrics\r\n+# that are symmetric with respect to their input argument y_true and y_pred.\r\n+#\r\n+# --------------------------------------------------------------------\r\n+# Symmetric with respect to their input arguments y_true and y_pred.\r\n+# Symmetric metrics only apply to supervised clusters.\r\n+SYMMETRIC_METRICS = [\r\n+    \"adjusted_rand_score\", \"v_measure_score\",\r\n+    \"mutual_info_score\", \"adjusted_mutual_info_score\",\r\n+    \"normalized_mutual_info_score\", \"fowlkes_mallows_score\"\r\n+]\r\n+\r\n+NON_SYMMETRIC_METRICS = [\"homogeneity_score\", \"completeness_score\"]\r\n+\r\n+\r\n+# Metrics whose upper bound is 1\r\n+NORMALIZED_METRICS = [\r\n+    \"adjusted_rand_score\", \"homogeneity_score\", \"completeness_score\",\r\n+    \"v_measure_score\", \"adjusted_mutual_info_score\", \"fowlkes_mallows_score\",\r\n+    \"normalized_mutual_info_score\"\r\n+]\r\n+\r\n+\r\n+def test_symmetry():\r\n+    rng = np.random.RandomState(0)\r\n+    y1 = rng.randint(3, size=30)\r\n+    y2 = rng.randint(3, size=30)\r\n+    for name in SYMMETRIC_METRICS:\r\n+        metric = SUPERVISED_METRICS[name]\r\n+        assert_almost_equal(metric(y1, y2), metric(y2, y1),\r\n+                            err_msg=\"%s is not symmetric\" % name)\r\n+\r\n+    for name in NON_SYMMETRIC_METRICS:\r\n+        metric = SUPERVISED_METRICS[name]\r\n+        assert_not_equal(metric(y1, y2), metric(y2, y1),\r\n+                         msg=\"%s is symmetric\" % name)\r\n+\r\n+\r\n+def test_normalized_output():\r\n+    upper_bound_1 = [0, 0, 0, 1, 1, 1]\r\n+    upper_bound_2 = [0, 0, 0, 1, 1, 1]\r\n+    for name in NORMALIZED_METRICS:\r\n+        metric = SUPERVISED_METRICS[name]\r\n+        assert_greater(metric([0, 0, 0, 1, 1], [0, 0, 0, 1, 2]), 0.0)\r\n+        assert_greater(metric([0, 0, 1, 1, 2], [0, 0, 1, 1, 1]), 0.0)\r\n+        assert_less(metric([0, 0, 0, 1, 2], [0, 1, 1, 1, 1]), 1.0)\r\n+        assert_less(metric([0, 0, 0, 1, 2], [0, 1, 1, 1, 1]), 1.0)\r\n+        assert_equal(metric(upper_bound_1, upper_bound_2), 1.0,\r\n+                     msg=\"%s has upper_bound greater than 1\" % name)\r\n+\r\n+    lower_bound_1 = [0, 0, 0, 0, 0, 0]\r\n+    lower_bound_2 = [0, 1, 2, 3, 4, 5]\r\n+    for name in NORMALIZED_METRICS:\r\n+        metric = SUPERVISED_METRICS[name]\r\n+        assert_equal((metric(lower_bound_1, lower_bound_2) and\r\n+                      metric(lower_bound_2, lower_bound_1)), 0.0,\r\n+                     msg=\"%s has lower_bound less than 0.0\" % name)\r\n+\r\n+\r\n+# All clustering metrics do not change score due to permutations of labels\r\n+# that is when 0 and 1 exchchanged.\r\n+def test_permute_labels():\r\n+    y_label = np.array([0, 0, 0, 1, 1, 0, 1])\r\n+    y_pred = np.array([1, 0, 1, 0, 1, 1, 0])\r\n+    for name in SUPERVISED_METRICS:\r\n+        metric = SUPERVISED_METRICS[name]\r\n+        score_1 = metric(y_pred, y_label)\r\n+        assert_equal(score_1, metric(1 - y_pred, y_label),\r\n+                     msg=\"%s failed labels permutation\" % name)\r\n+        assert_equal(score_1, metric(1 - y_pred, 1 - y_label),\r\n+                     msg=\"%s failed labels permutation\" % name)\r\n+        assert_almost_equal(score_1, metric(y_pred, 1 - y_label),\r\n+                            err_msg=\"%s failed labels permutation\" % name)\r\n+\r\n+    for name in UNSUPERVISED_METRICS:\r\n+        metric = UNSUPERVISED_METRICS[name]\r\n+        X = np.random.randint(10, size=(7, 10))\r\n+        score_1 = metric(X, y_pred)\r\n+        assert_almost_equal(score_1, metric(X, 1 - y_pred),\r\n+                            err_msg=\"%s failed labels permutation\" % name)\r\n+\r\n+\r\n+# For ALL clustering metrics Input parameters can be both\r\n+# in the form of arrays lists , positive , negetive or string\r\n+def test_format_invariance():\r\n+    labels = [0, 0, 0, 0, 1, 1, 1, 1]\r","path":"sklearn/metrics/cluster/tests/test_common.py","position":141,"original_position":141,"commit_id":"e1eaf045f22a67b4e9e67f89e5caf9ccfdf53d30","original_commit_id":"4aed4c109f96ce29074cc1b0c619032c434078e1","user":{"login":"jnothman","id":78827,"avatar_url":"https://avatars.githubusercontent.com/u/78827?v=3","gravatar_id":"","url":"https://api.github.com/users/jnothman","html_url":"https://github.com/jnothman","followers_url":"https://api.github.com/users/jnothman/followers","following_url":"https://api.github.com/users/jnothman/following{/other_user}","gists_url":"https://api.github.com/users/jnothman/gists{/gist_id}","starred_url":"https://api.github.com/users/jnothman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jnothman/subscriptions","organizations_url":"https://api.github.com/users/jnothman/orgs","repos_url":"https://api.github.com/users/jnothman/repos","events_url":"https://api.github.com/users/jnothman/events{/privacy}","received_events_url":"https://api.github.com/users/jnothman/received_events","type":"User","site_admin":false},"body":"perhaps call this `y_true` and be consistent across other tests?","created_at":"2017-01-11T06:03:27Z","updated_at":"2017-01-11T06:07:03Z","html_url":"https://github.com/scikit-learn/scikit-learn/pull/8135#discussion_r95516898","pull_request_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/8135","_links":{"self":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments/95516898"},"html":{"href":"https://github.com/scikit-learn/scikit-learn/pull/8135#discussion_r95516898"},"pull_request":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/8135"}}},"pull_request":{"url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/8135","id":99685398,"html_url":"https://github.com/scikit-learn/scikit-learn/pull/8135","diff_url":"https://github.com/scikit-learn/scikit-learn/pull/8135.diff","patch_url":"https://github.com/scikit-learn/scikit-learn/pull/8135.patch","issue_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/8135","number":8135,"state":"open","locked":false,"title":"[MRG] Invariance tests for clustering metrics #8102","user":{"login":"anki08","id":8593629,"avatar_url":"https://avatars.githubusercontent.com/u/8593629?v=3","gravatar_id":"","url":"https://api.github.com/users/anki08","html_url":"https://github.com/anki08","followers_url":"https://api.github.com/users/anki08/followers","following_url":"https://api.github.com/users/anki08/following{/other_user}","gists_url":"https://api.github.com/users/anki08/gists{/gist_id}","starred_url":"https://api.github.com/users/anki08/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anki08/subscriptions","organizations_url":"https://api.github.com/users/anki08/orgs","repos_url":"https://api.github.com/users/anki08/repos","events_url":"https://api.github.com/users/anki08/events{/privacy}","received_events_url":"https://api.github.com/users/anki08/received_events","type":"User","site_admin":false},"body":"<!--\r\nThanks for contributing a pull request! Please ensure you have taken a look at\r\nthe contribution guidelines: https://github.com/scikit-learn/scikit-learn/blob/master/CONTRIBUTING.md#Contributing-Pull-Requests\r\n-->\r\n#### Reference Issue\r\n<!-- Example: Fixes #1234 -->\r\n\r\n\r\n#### What does this implement/fix? Explain your changes.\r\n\r\n\r\n#### Any other comments?\r\n\r\n\r\n<!--\r\nPlease be aware that we are a loose team of volunteers so patience is\r\nnecessary; assistance handling other issues is very welcome. We value\r\nall user contributions, no matter how minor they are. If we are slow to\r\nreview, either the pull request needs some benchmarking, tinkering,\r\nconvincing, etc. or more likely the reviewers are simply busy. In either\r\ncase, we ask for your understanding during the review process.\r\nFor more information, see our FAQ on this topic:\r\nhttp://scikit-learn.org/dev/faq.html#why-is-my-pull-request-not-getting-any-attention.\r\n\r\nThanks for contributing!\r\n-->\r\n","created_at":"2016-12-29T18:34:53Z","updated_at":"2017-01-11T06:07:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6225b690ff7a509e2df15259cc8ec309ff261987","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/8135/commits","review_comments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/8135/comments","review_comment_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/8135/comments","statuses_url":"https://api.github.com/repos/scikit-learn/scikit-learn/statuses/e1eaf045f22a67b4e9e67f89e5caf9ccfdf53d30","head":{"label":"anki08:feature1","ref":"feature1","sha":"e1eaf045f22a67b4e9e67f89e5caf9ccfdf53d30","user":{"login":"anki08","id":8593629,"avatar_url":"https://avatars.githubusercontent.com/u/8593629?v=3","gravatar_id":"","url":"https://api.github.com/users/anki08","html_url":"https://github.com/anki08","followers_url":"https://api.github.com/users/anki08/followers","following_url":"https://api.github.com/users/anki08/following{/other_user}","gists_url":"https://api.github.com/users/anki08/gists{/gist_id}","starred_url":"https://api.github.com/users/anki08/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anki08/subscriptions","organizations_url":"https://api.github.com/users/anki08/orgs","repos_url":"https://api.github.com/users/anki08/repos","events_url":"https://api.github.com/users/anki08/events{/privacy}","received_events_url":"https://api.github.com/users/anki08/received_events","type":"User","site_admin":false},"repo":{"id":77432133,"name":"scikit-learn","full_name":"anki08/scikit-learn","owner":{"login":"anki08","id":8593629,"avatar_url":"https://avatars.githubusercontent.com/u/8593629?v=3","gravatar_id":"","url":"https://api.github.com/users/anki08","html_url":"https://github.com/anki08","followers_url":"https://api.github.com/users/anki08/followers","following_url":"https://api.github.com/users/anki08/following{/other_user}","gists_url":"https://api.github.com/users/anki08/gists{/gist_id}","starred_url":"https://api.github.com/users/anki08/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anki08/subscriptions","organizations_url":"https://api.github.com/users/anki08/orgs","repos_url":"https://api.github.com/users/anki08/repos","events_url":"https://api.github.com/users/anki08/events{/privacy}","received_events_url":"https://api.github.com/users/anki08/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/anki08/scikit-learn","description":"scikit-learn: machine learning in Python","fork":true,"url":"https://api.github.com/repos/anki08/scikit-learn","forks_url":"https://api.github.com/repos/anki08/scikit-learn/forks","keys_url":"https://api.github.com/repos/anki08/scikit-learn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/anki08/scikit-learn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/anki08/scikit-learn/teams","hooks_url":"https://api.github.com/repos/anki08/scikit-learn/hooks","issue_events_url":"https://api.github.com/repos/anki08/scikit-learn/issues/events{/number}","events_url":"https://api.github.com/repos/anki08/scikit-learn/events","assignees_url":"https://api.github.com/repos/anki08/scikit-learn/assignees{/user}","branches_url":"https://api.github.com/repos/anki08/scikit-learn/branches{/branch}","tags_url":"https://api.github.com/repos/anki08/scikit-learn/tags","blobs_url":"https://api.github.com/repos/anki08/scikit-learn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/anki08/scikit-learn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/anki08/scikit-learn/git/refs{/sha}","trees_url":"https://api.github.com/repos/anki08/scikit-learn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/anki08/scikit-learn/statuses/{sha}","languages_url":"https://api.github.com/repos/anki08/scikit-learn/languages","stargazers_url":"https://api.github.com/repos/anki08/scikit-learn/stargazers","contributors_url":"https://api.github.com/repos/anki08/scikit-learn/contributors","subscribers_url":"https://api.github.com/repos/anki08/scikit-learn/subscribers","subscription_url":"https://api.github.com/repos/anki08/scikit-learn/subscription","commits_url":"https://api.github.com/repos/anki08/scikit-learn/commits{/sha}","git_commits_url":"https://api.github.com/repos/anki08/scikit-learn/git/commits{/sha}","comments_url":"https://api.github.com/repos/anki08/scikit-learn/comments{/number}","issue_comment_url":"https://api.github.com/repos/anki08/scikit-learn/issues/comments{/number}","contents_url":"https://api.github.com/repos/anki08/scikit-learn/contents/{+path}","compare_url":"https://api.github.com/repos/anki08/scikit-learn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/anki08/scikit-learn/merges","archive_url":"https://api.github.com/repos/anki08/scikit-learn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/anki08/scikit-learn/downloads","issues_url":"https://api.github.com/repos/anki08/scikit-learn/issues{/number}","pulls_url":"https://api.github.com/repos/anki08/scikit-learn/pulls{/number}","milestones_url":"https://api.github.com/repos/anki08/scikit-learn/milestones{/number}","notifications_url":"https://api.github.com/repos/anki08/scikit-learn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/anki08/scikit-learn/labels{/name}","releases_url":"https://api.github.com/repos/anki08/scikit-learn/releases{/id}","deployments_url":"https://api.github.com/repos/anki08/scikit-learn/deployments","created_at":"2016-12-27T06:36:12Z","updated_at":"2016-12-27T06:36:22Z","pushed_at":"2017-01-11T06:03:59Z","git_url":"git://github.com/anki08/scikit-learn.git","ssh_url":"git@github.com:anki08/scikit-learn.git","clone_url":"https://github.com/anki08/scikit-learn.git","svn_url":"https://github.com/anki08/scikit-learn","homepage":"http://scikit-learn.org","size":78307,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"scikit-learn:master","ref":"master","sha":"e2adbb7e037de74044db002eff5898f5e11a5507","user":{"login":"scikit-learn","id":365630,"avatar_url":"https://avatars.githubusercontent.com/u/365630?v=3","gravatar_id":"","url":"https://api.github.com/users/scikit-learn","html_url":"https://github.com/scikit-learn","followers_url":"https://api.github.com/users/scikit-learn/followers","following_url":"https://api.github.com/users/scikit-learn/following{/other_user}","gists_url":"https://api.github.com/users/scikit-learn/gists{/gist_id}","starred_url":"https://api.github.com/users/scikit-learn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scikit-learn/subscriptions","organizations_url":"https://api.github.com/users/scikit-learn/orgs","repos_url":"https://api.github.com/users/scikit-learn/repos","events_url":"https://api.github.com/users/scikit-learn/events{/privacy}","received_events_url":"https://api.github.com/users/scikit-learn/received_events","type":"Organization","site_admin":false},"repo":{"id":843222,"name":"scikit-learn","full_name":"scikit-learn/scikit-learn","owner":{"login":"scikit-learn","id":365630,"avatar_url":"https://avatars.githubusercontent.com/u/365630?v=3","gravatar_id":"","url":"https://api.github.com/users/scikit-learn","html_url":"https://github.com/scikit-learn","followers_url":"https://api.github.com/users/scikit-learn/followers","following_url":"https://api.github.com/users/scikit-learn/following{/other_user}","gists_url":"https://api.github.com/users/scikit-learn/gists{/gist_id}","starred_url":"https://api.github.com/users/scikit-learn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scikit-learn/subscriptions","organizations_url":"https://api.github.com/users/scikit-learn/orgs","repos_url":"https://api.github.com/users/scikit-learn/repos","events_url":"https://api.github.com/users/scikit-learn/events{/privacy}","received_events_url":"https://api.github.com/users/scikit-learn/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scikit-learn/scikit-learn","description":"scikit-learn: machine learning in Python","fork":false,"url":"https://api.github.com/repos/scikit-learn/scikit-learn","forks_url":"https://api.github.com/repos/scikit-learn/scikit-learn/forks","keys_url":"https://api.github.com/repos/scikit-learn/scikit-learn/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scikit-learn/scikit-learn/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scikit-learn/scikit-learn/teams","hooks_url":"https://api.github.com/repos/scikit-learn/scikit-learn/hooks","issue_events_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/events{/number}","events_url":"https://api.github.com/repos/scikit-learn/scikit-learn/events","assignees_url":"https://api.github.com/repos/scikit-learn/scikit-learn/assignees{/user}","branches_url":"https://api.github.com/repos/scikit-learn/scikit-learn/branches{/branch}","tags_url":"https://api.github.com/repos/scikit-learn/scikit-learn/tags","blobs_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/refs{/sha}","trees_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scikit-learn/scikit-learn/statuses/{sha}","languages_url":"https://api.github.com/repos/scikit-learn/scikit-learn/languages","stargazers_url":"https://api.github.com/repos/scikit-learn/scikit-learn/stargazers","contributors_url":"https://api.github.com/repos/scikit-learn/scikit-learn/contributors","subscribers_url":"https://api.github.com/repos/scikit-learn/scikit-learn/subscribers","subscription_url":"https://api.github.com/repos/scikit-learn/scikit-learn/subscription","commits_url":"https://api.github.com/repos/scikit-learn/scikit-learn/commits{/sha}","git_commits_url":"https://api.github.com/repos/scikit-learn/scikit-learn/git/commits{/sha}","comments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/comments{/number}","issue_comment_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/comments{/number}","contents_url":"https://api.github.com/repos/scikit-learn/scikit-learn/contents/{+path}","compare_url":"https://api.github.com/repos/scikit-learn/scikit-learn/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scikit-learn/scikit-learn/merges","archive_url":"https://api.github.com/repos/scikit-learn/scikit-learn/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scikit-learn/scikit-learn/downloads","issues_url":"https://api.github.com/repos/scikit-learn/scikit-learn/issues{/number}","pulls_url":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls{/number}","milestones_url":"https://api.github.com/repos/scikit-learn/scikit-learn/milestones{/number}","notifications_url":"https://api.github.com/repos/scikit-learn/scikit-learn/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scikit-learn/scikit-learn/labels{/name}","releases_url":"https://api.github.com/repos/scikit-learn/scikit-learn/releases{/id}","deployments_url":"https://api.github.com/repos/scikit-learn/scikit-learn/deployments","created_at":"2010-08-17T09:43:38Z","updated_at":"2017-01-11T05:35:40Z","pushed_at":"2017-01-11T06:04:01Z","git_url":"git://github.com/scikit-learn/scikit-learn.git","ssh_url":"git@github.com:scikit-learn/scikit-learn.git","clone_url":"https://github.com/scikit-learn/scikit-learn.git","svn_url":"https://github.com/scikit-learn/scikit-learn","homepage":"http://scikit-learn.org","size":79091,"stargazers_count":15770,"watchers_count":15770,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":8822,"mirror_url":null,"open_issues_count":1168,"forks":8822,"open_issues":1168,"watchers":15770,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/8135"},"html":{"href":"https://github.com/scikit-learn/scikit-learn/pull/8135"},"issue":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/8135"},"comments":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/issues/8135/comments"},"review_comments":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/8135/comments"},"review_comment":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/pulls/8135/commits"},"statuses":{"href":"https://api.github.com/repos/scikit-learn/scikit-learn/statuses/e1eaf045f22a67b4e9e67f89e5caf9ccfdf53d30"}}}}
{"actor":{"display_login":"jnothman"}}