def fit_from_dict(self, neighbors_dict, attr, spatially_extensive_attr, threshold, solver="cbc", metric="euclidean"): """ Alternative API for :meth:`fit_from_scipy_sparse_matrix`. Parameters ---------- neighbors_dict : dict Each key represents an area and each value is an iterable of neighbors of this area. attr : dict A dict with the same keys as `neighbors_dict` and values representing the attributes for calculating h**o-/heterogeneity. A value can be scalar (e.g. `float` or `int`) or a :class:`numpy.ndarray`. spatially_extensive_attr : dict A dict with the same keys as `neighbors_dict` and values representing the spatially extensive attribute (scalar or iterable of scalars). In the max-p-regions problem each region's sum of spatially extensive attributes must be greater than a specified threshold. In case of iterables of scalars as dict-values all elements of the iterable have to fulfill the condition. threshold : numbers.Real or :class:`numpy.ndarray` Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. solver : {"cbc", "cplex", "glpk", "gurobi"}, default: "cbc" Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. metric : str or function, default: "euclidean" Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. """ if not isinstance(neighbors_dict, dict): raise ValueError("The neighbors_dict argument must be dict.") not_same_dict_keys_msg = "The {} argument has to be of type dict " \ "with the same keys as neighbors_dict." if not isinstance(attr, dict) or attr.keys() != neighbors_dict.keys(): raise ValueError(not_same_dict_keys_msg.format("attr")) if not isinstance(spatially_extensive_attr, dict) or \ spatially_extensive_attr.keys() != neighbors_dict.keys(): raise ValueError( not_same_dict_keys_msg.format(spatially_extensive_attr)) adj = scipy_sparse_matrix_from_dict(neighbors_dict) attr_arr = array_from_dict_values(attr) spat_ext_attr_arr = array_from_dict_values(spatially_extensive_attr) self.fit_from_scipy_sparse_matrix(adj, attr_arr, spat_ext_attr_arr, threshold=threshold, solver=solver, metric=metric)
def fit_from_dict(self, neighbors_dict, attr, n_regions, method="flow", solver="cbc", metric="euclidean"): """ Alternative API for :meth:`fit_from_scipy_sparse_matrix`. Parameters ---------- neighbors_dict : dict Each key represents an area and each value is an iterable of neighbors of this area. attr : dict A dict with the same keys as `neighbors_dict` and values representing the clustering criteria. A value can be scalar (e.g. float or int) or a :class:`numpy.ndarray`. n_regions : int See the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. method : str See the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. solver : str See the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. metric : str or function, default: "euclidean" See the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. """ if not isinstance(neighbors_dict, dict): raise ValueError("The neighbors_dict argument must be dict.") if not isinstance(attr, dict) or attr.keys() != neighbors_dict.keys(): raise ValueError("The attr argument has to be of type dict with " "the same keys as neighbors_dict.") adj = scipy_sparse_matrix_from_dict(neighbors_dict) attr_arr = array_from_dict_values(attr) self.fit_from_scipy_sparse_matrix( adj, attr_arr, n_regions, method=method, solver=solver, metric=metric)
def fit_from_dict(self, neighbor_dict, attr, n_regions, initial_labels=None, objective_func=ObjectiveFunctionPairwise()): """ Alternative API for :meth:`fit_from_scipy_sparse_matrix`. Parameters ---------- neighbor_dict : `dict` Each key is an area and each value is an iterable of the key area's neighbors. attr : `dict` Each key is an area and each value is the corresponding clustering-relevant attribute. n_regions : `int` Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. initial_labels : `dict` or None, default: None Each key represents an area. Each value represents the region, the corresponding area is assigned to at the beginning of the algorithm. If None, then a random initial clustering will be generated. objective_func : :class:`region.ObjectiveFunction`, default: ObjectiveFunctionPairwise() Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. """ sorted_areas = sorted(neighbor_dict) adj = scipy_sparse_matrix_from_dict(neighbor_dict) attr_arr = array_from_dict_values(attr, sorted_areas) if initial_labels is not None: initial_labels = array_from_dict_values( initial_labels, sorted_areas, flat_output=True, dtype=np.int32) self.fit_from_scipy_sparse_matrix( adj, attr_arr, n_regions, initial_labels, objective_func=objective_func)
def fit_from_dict(self, neighbor_dict, attr, n_regions, initial_labels=None, cooling_factor=0.85, objective_func=ObjectiveFunctionPairwise()): """ Parameters ---------- neighbor_dict : `dict` Refer to the corresponding argument in :meth:`AZP.fit_from_dict`. attr : `dict` Refer to the corresponding argument in :meth:`AZP.fit_from_dict`. n_regions : `int` Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. initial_labels : `dict` or None, default: None Refer to the corresponding argument in :meth:`AZP.fit_from_dict`. cooling_factor : float, default: 0.85 Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. objective_func : :class:`region.ObjectiveFunction`, default: ObjectiveFunctionPairwise() Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. """ sorted_areas = sorted(neighbor_dict) adj = scipy_sparse_matrix_from_dict(neighbor_dict) attr_arr = array_from_dict_values(attr, sorted_areas) if initial_labels is not None: initial_labels = array_from_dict_values( initial_labels, sorted_areas, flat_output=True, dtype=np.int32) self.fit_from_scipy_sparse_matrix( adj, attr_arr, n_regions, initial_labels=initial_labels, cooling_factor=cooling_factor, objective_func=objective_func)
def fit_from_dict(self, neighbors_dict, attr, spatially_extensive_attr, threshold, max_it=10, objective_func=ObjectiveFunctionPairwise()): """ Solve the max-p-regions problem in a heuristic way (see [DAR2012]_). The resulting region labels are assigned to the instance's :attr:`labels_` attribute. Parameters ---------- neighbors_dict : dict Each key represents an area and each value is an iterable of neighbors of this area. attr : dict A dict with the same keys as `neighbors_dict` and values representing the attributes for calculating h**o-/heterogeneity. A value can be scalar (e.g. `float` or `int`) or a :class:`numpy.ndarray`. spatially_extensive_attr : dict A dict with the same keys as `neighbors_dict` and values representing the spatially extensive attribute (scalar or iterable of scalars). In the max-p-regions problem each region's sum of spatially extensive attributes must be greater than a specified threshold. In case of iterables of scalars as dict-values all elements of the iterable have to fulfill the condition. threshold : numbers.Real or :class:`numpy.ndarray` Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. max_it : int, default: 10 Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. objective_func : :class:`region.ObjectiveFunction`, default: ObjectiveFunctionPairwise() Refer to the corresponding argument in :meth:`fit_from_scipy_sparse_matrix`. """ if not isinstance(neighbors_dict, dict): raise ValueError("The neighbors_dict argument must be dict.") not_same_dict_keys_msg = "The {} argument has to be of type dict " \ "with the same keys as neighbors_dict." if not isinstance(attr, dict) or attr.keys() != neighbors_dict.keys(): raise ValueError(not_same_dict_keys_msg.format("attr")) if not isinstance(spatially_extensive_attr, dict) or \ spatially_extensive_attr.keys() != neighbors_dict.keys(): raise ValueError( not_same_dict_keys_msg.format(spatially_extensive_attr)) adj = scipy_sparse_matrix_from_dict(neighbors_dict) attr_arr = array_from_dict_values(attr) spat_ext_attr_arr = array_from_dict_values(spatially_extensive_attr) self.fit_from_scipy_sparse_matrix(adj, attr_arr, spat_ext_attr_arr, threshold=threshold, max_it=max_it, objective_func=objective_func)