From 5168c9168af62e79c95f9fe4a25bb54789f45882 Mon Sep 17 00:00:00 2001 From: "rwoolston.admin" Date: Sat, 13 Jul 2019 11:51:04 -0600 Subject: [PATCH 1/6] Added value checks and random state parameter to method --- sklearn/cluster/affinity_propagation_.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sklearn/cluster/affinity_propagation_.py b/sklearn/cluster/affinity_propagation_.py index 487ade4012133..da04a3556c3a8 100644 --- a/sklearn/cluster/affinity_propagation_.py +++ b/sklearn/cluster/affinity_propagation_.py @@ -32,7 +32,7 @@ def all_equal_similarities(): def affinity_propagation(S, preference=None, convergence_iter=15, max_iter=200, damping=0.5, copy=True, verbose=False, - return_n_iter=False): + return_n_iter=False, random_state=0): """Perform Affinity Propagation Clustering of data Read more in the :ref:`User Guide `. @@ -72,6 +72,12 @@ def affinity_propagation(S, preference=None, convergence_iter=15, max_iter=200, return_n_iter : bool, default False Whether or not to return the number of iterations. + random_state : int, RandomState instance or None, optional (default=None) + If int, random_state is the seed used by the random number generator; + If RandomState instance, random_state is the random number generator; + If None, the random number generator is the RandomState instance used + by `np.random`. + Returns ------- @@ -133,7 +139,10 @@ def affinity_propagation(S, preference=None, convergence_iter=15, max_iter=200, if return_n_iter else (np.array([0]), np.array([0] * n_samples))) - random_state = np.random.RandomState(0) + if random_state is None: + random_state = np.random.RandomState(0) + elif not isinstance(random_state, int): + raise TypeError('Random state must be of type int or None.') # Place preference on the diagonal of S S.flat[::(n_samples + 1)] = preference From ff35479b634d942cbb470ba46234f749272071d5 Mon Sep 17 00:00:00 2001 From: "rwoolston.admin" Date: Sat, 13 Jul 2019 11:56:58 -0600 Subject: [PATCH 2/6] Changed default parameter to None instead of 0 --- sklearn/cluster/affinity_propagation_.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/cluster/affinity_propagation_.py b/sklearn/cluster/affinity_propagation_.py index da04a3556c3a8..769a3ccdf343b 100644 --- a/sklearn/cluster/affinity_propagation_.py +++ b/sklearn/cluster/affinity_propagation_.py @@ -32,7 +32,7 @@ def all_equal_similarities(): def affinity_propagation(S, preference=None, convergence_iter=15, max_iter=200, damping=0.5, copy=True, verbose=False, - return_n_iter=False, random_state=0): + return_n_iter=False, random_state=None): """Perform Affinity Propagation Clustering of data Read more in the :ref:`User Guide `. From 3760ea3832ebf472f71ef2bee8ee0f35c0e2c304 Mon Sep 17 00:00:00 2001 From: "rwoolston.admin" Date: Sat, 13 Jul 2019 12:36:11 -0600 Subject: [PATCH 3/6] Added numpy RandomState to the check --- sklearn/cluster/affinity_propagation_.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/cluster/affinity_propagation_.py b/sklearn/cluster/affinity_propagation_.py index 769a3ccdf343b..589e50ddcaa01 100644 --- a/sklearn/cluster/affinity_propagation_.py +++ b/sklearn/cluster/affinity_propagation_.py @@ -141,7 +141,7 @@ def affinity_propagation(S, preference=None, convergence_iter=15, max_iter=200, if random_state is None: random_state = np.random.RandomState(0) - elif not isinstance(random_state, int): + elif not isinstance(random_state, (int, np.random.RandomState,)): raise TypeError('Random state must be of type int or None.') # Place preference on the diagonal of S From c3d42af7a2608770f8e722eb2adc45351c5fdb22 Mon Sep 17 00:00:00 2001 From: "rwoolston.admin" Date: Sun, 14 Jul 2019 08:28:53 -0600 Subject: [PATCH 4/6] Replaced inline validation with check_random_state from utils and pointed at glossery --- sklearn/cluster/affinity_propagation_.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/sklearn/cluster/affinity_propagation_.py b/sklearn/cluster/affinity_propagation_.py index 589e50ddcaa01..5f01c8f323167 100644 --- a/sklearn/cluster/affinity_propagation_.py +++ b/sklearn/cluster/affinity_propagation_.py @@ -10,7 +10,7 @@ from ..exceptions import ConvergenceWarning from ..base import BaseEstimator, ClusterMixin -from ..utils import as_float_array, check_array +from ..utils import as_float_array, check_array, check_random_state from ..utils.validation import check_is_fitted from ..metrics import euclidean_distances from ..metrics import pairwise_distances_argmin @@ -72,11 +72,8 @@ def affinity_propagation(S, preference=None, convergence_iter=15, max_iter=200, return_n_iter : bool, default False Whether or not to return the number of iterations. - random_state : int, RandomState instance or None, optional (default=None) - If int, random_state is the seed used by the random number generator; - If RandomState instance, random_state is the random number generator; - If None, the random number generator is the RandomState instance used - by `np.random`. + random_state : int, np.random.RandomStateInstance or None, optional (default=None) + Pseudo-random number generator to control the starting state. See :term:`random_state`. Returns ------- @@ -139,10 +136,7 @@ def affinity_propagation(S, preference=None, convergence_iter=15, max_iter=200, if return_n_iter else (np.array([0]), np.array([0] * n_samples))) - if random_state is None: - random_state = np.random.RandomState(0) - elif not isinstance(random_state, (int, np.random.RandomState,)): - raise TypeError('Random state must be of type int or None.') + random_state = check_random_state(random_state) # Place preference on the diagonal of S S.flat[::(n_samples + 1)] = preference From a06bb8a8240a6ceb0afb88c4307cc99c5023ac2a Mon Sep 17 00:00:00 2001 From: "rwoolston.admin" Date: Sun, 14 Jul 2019 09:28:03 -0600 Subject: [PATCH 5/6] Needed a different default parameter to pass the default way this has been working in the past --- sklearn/cluster/affinity_propagation_.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sklearn/cluster/affinity_propagation_.py b/sklearn/cluster/affinity_propagation_.py index 5f01c8f323167..71ef9451c828f 100644 --- a/sklearn/cluster/affinity_propagation_.py +++ b/sklearn/cluster/affinity_propagation_.py @@ -32,7 +32,7 @@ def all_equal_similarities(): def affinity_propagation(S, preference=None, convergence_iter=15, max_iter=200, damping=0.5, copy=True, verbose=False, - return_n_iter=False, random_state=None): + return_n_iter=False, random_state=0): """Perform Affinity Propagation Clustering of data Read more in the :ref:`User Guide `. From 12c8a38aab1df6a397962f76ed710a0b2a19f465 Mon Sep 17 00:00:00 2001 From: "rwoolston.admin" Date: Sun, 14 Jul 2019 09:44:08 -0600 Subject: [PATCH 6/6] Updated to conform with flake8 stds --- sklearn/cluster/affinity_propagation_.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sklearn/cluster/affinity_propagation_.py b/sklearn/cluster/affinity_propagation_.py index 71ef9451c828f..5d27f75ac0c88 100644 --- a/sklearn/cluster/affinity_propagation_.py +++ b/sklearn/cluster/affinity_propagation_.py @@ -72,8 +72,9 @@ def affinity_propagation(S, preference=None, convergence_iter=15, max_iter=200, return_n_iter : bool, default False Whether or not to return the number of iterations. - random_state : int, np.random.RandomStateInstance or None, optional (default=None) - Pseudo-random number generator to control the starting state. See :term:`random_state`. + random_state : int, np.random.RandomStateInstance or None, default: None + Pseudo-random number generator to control the starting state. + See :term:`random_state`. Returns -------