scikit-network 0.31.0__tar.gz → 0.32.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of scikit-network might be problematic. Click here for more details.
- {scikit-network-0.31.0 → scikit-network-0.32.0}/AUTHORS.rst +3 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/HISTORY.rst +10 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/PKG-INFO +11 -4
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/clustering.rst +11 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/embedding.rst +0 -4
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/topology.rst +6 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/visualization.rst +2 -2
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/clustering/index.rst +2 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/embedding/index.rst +0 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/scikit_network.egg-info/PKG-INFO +11 -4
- {scikit-network-0.31.0 → scikit-network-0.32.0}/scikit_network.egg-info/SOURCES.txt +9 -3
- {scikit-network-0.31.0 → scikit-network-0.32.0}/setup.cfg +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/setup.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/__init__.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/base.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/base_rank.py +3 -3
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/diffusion.py +21 -13
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/knn.py +19 -13
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/metrics.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/pagerank.py +12 -8
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/propagation.py +22 -15
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/tests/test_diffusion.py +10 -0
- scikit-network-0.31.0/sknetwork/clustering/louvain_core.cpp → scikit-network-0.32.0/sknetwork/classification/vote.cpp +12968 -11092
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/__init__.py +3 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/base.py +1 -1
- scikit-network-0.32.0/sknetwork/clustering/kcenters.py +253 -0
- scikit-network-0.32.0/sknetwork/clustering/leiden.py +241 -0
- scikit-network-0.32.0/sknetwork/clustering/leiden_core.cpp +31531 -0
- scikit-network-0.32.0/sknetwork/clustering/leiden_core.pyx +124 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/louvain.py +118 -83
- scikit-network-0.32.0/sknetwork/clustering/louvain_core.cpp +31176 -0
- scikit-network-0.32.0/sknetwork/clustering/louvain_core.pyx +124 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/postprocess.py +2 -2
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/propagation_clustering.py +4 -4
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/tests/test_API.py +7 -3
- scikit-network-0.32.0/sknetwork/clustering/tests/test_kcenters.py +92 -0
- scikit-network-0.32.0/sknetwork/clustering/tests/test_leiden.py +34 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/tests/test_louvain.py +2 -3
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/load.py +2 -4
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/parse.py +41 -20
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/tests/test_parse.py +9 -12
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/__init__.py +0 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/base.py +20 -19
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/force_atlas.py +3 -2
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/louvain_embedding.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/random_projection.py +5 -3
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/spectral.py +0 -73
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/tests/test_API.py +4 -28
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/tests/test_louvain_embedding.py +4 -9
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/tests/test_spectral.py +2 -5
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/tests/test_svd.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/base_layer.py +3 -3
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/gnn_classifier.py +40 -86
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/layer.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/loss.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/optimizer.py +4 -3
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/tests/test_base_layer.py +4 -4
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/tests/test_gnn_classifier.py +12 -39
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/utils.py +8 -8
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/base.py +27 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/louvain_hierarchy.py +45 -41
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/paris.cpp +27346 -20632
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/paris.pyx +7 -7
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/postprocess.py +16 -16
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/tests/test_algos.py +5 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/__init__.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/diteration.cpp +13927 -8097
- scikit-network-0.31.0/sknetwork/linalg/normalization.py → scikit-network-0.32.0/sknetwork/linalg/normalizer.py +17 -14
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/operators.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/ppr_solver.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/push.cpp +23093 -16922
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/tests/test_normalization.py +3 -7
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/tests/test_operators.py +2 -6
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/tests/test_ppr.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linkpred/base.py +12 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linkpred/nn.py +6 -6
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/path/distances.py +11 -4
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/path/shortest_path.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/path/tests/test_distances.py +7 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/path/tests/test_search.py +2 -2
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/base.py +11 -6
- scikit-network-0.32.0/sknetwork/ranking/betweenness.cpp +9668 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/pagerank.py +13 -12
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/tests/test_API.py +0 -2
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/tests/test_betweenness.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/tests/test_pagerank.py +11 -5
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/regression/base.py +18 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/regression/diffusion.py +24 -10
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/regression/tests/test_diffusion.py +8 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/__init__.py +3 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/cliques.cpp +23502 -16858
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/core.cpp +22743 -16511
- scikit-network-0.32.0/sknetwork/topology/cycles.py +243 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/minheap.cpp +19468 -13478
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/structure.py +2 -42
- scikit-network-0.32.0/sknetwork/topology/tests/test_cycles.py +65 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/tests/test_structure.py +2 -16
- scikit-network-0.32.0/sknetwork/topology/triangles.cpp +8856 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/triangles.pyx +7 -4
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/weisfeiler_lehman_core.cpp +14754 -8924
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/format.py +1 -1
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/membership.py +2 -2
- scikit-network-0.32.0/sknetwork/visualization/__init__.py +4 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/visualization/dendrograms.py +55 -7
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/visualization/graphs.py +261 -44
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/visualization/tests/test_dendrograms.py +9 -9
- scikit-network-0.32.0/sknetwork/visualization/tests/test_graphs.py +176 -0
- scikit-network-0.31.0/sknetwork/classification/vote.cpp +0 -21699
- scikit-network-0.31.0/sknetwork/clustering/louvain_core.pyx +0 -132
- scikit-network-0.31.0/sknetwork/embedding/louvain_hierarchy.py +0 -142
- scikit-network-0.31.0/sknetwork/embedding/tests/test_louvain_hierarchy.py +0 -19
- scikit-network-0.31.0/sknetwork/ranking/betweenness.cpp +0 -6638
- scikit-network-0.31.0/sknetwork/topology/triangles.cpp +0 -5006
- scikit-network-0.31.0/sknetwork/visualization/__init__.py +0 -4
- scikit-network-0.31.0/sknetwork/visualization/tests/test_graphs.py +0 -170
- {scikit-network-0.31.0 → scikit-network-0.32.0}/CONTRIBUTING.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/LICENSE +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/MANIFEST.in +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/README.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/Makefile +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/authors.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/conf.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/contributing.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/first_steps.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/genindex.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/glossary.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/history.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/make.bat +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/readme.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/classification.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/data.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/gnn.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/hierarchy.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/linalg.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/linkpred.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/path.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/ranking.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/regression.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/reference/utils.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/classification/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/data/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/gnn/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/hierarchy/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/linkpred/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/overview/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/path/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/ranking/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/regression/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/topology/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/docs/tutorials/visualization/index.rst +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/scikit_network.egg-info/dependency_links.txt +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/scikit_network.egg-info/not-zip-safe +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/scikit_network.egg-info/requires.txt +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/scikit_network.egg-info/top_level.txt +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/base.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/tests/test_API.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/tests/test_knn.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/tests/test_metrics.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/tests/test_pagerank.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/tests/test_propagation.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/vote.pyx +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/metrics.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/tests/test_metrics.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/clustering/tests/test_postprocess.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/base.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/models.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/test_graphs.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/tests/test_API.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/tests/test_base.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/tests/test_load.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/tests/test_models.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/tests/test_test_graphs.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/tests/test_toy_graphs.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/timeout.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/data/toy_graphs.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/spring.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/svd.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/tests/test_force_atlas.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/tests/test_random_projection.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/embedding/tests/test_spring.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/activation.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/base.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/base_activation.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/neighbor_sampler.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/tests/test_activation.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/tests/test_base.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/tests/test_layers.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/tests/test_loss.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/tests/test_neigh_sampler.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/tests/test_optimizer.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/gnn/tests/test_utils.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/metrics.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/tests/test_API.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/tests/test_metrics.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/hierarchy/tests/test_postprocess.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/basics.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/diteration.pyx +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/eig_solver.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/laplacian.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/polynome.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/push.pyx +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/sparse_lowrank.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/svd_solver.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/tests/test_eig.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/tests/test_laplacian.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/tests/test_polynome.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/tests/test_sparse_lowrank.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linalg/tests/test_svd.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linkpred/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linkpred/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/linkpred/tests/test_nn.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/log.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/path/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/path/dag.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/path/search.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/path/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/path/tests/test_dag.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/path/tests/test_shortest_path.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/betweenness.pyx +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/closeness.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/hits.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/katz.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/postprocess.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/tests/test_closeness.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/tests/test_hits.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/ranking/tests/test_postprocess.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/regression/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/regression/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/regression/tests/test_API.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/sknetwork.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/test_base.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/test_log.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/cliques.pyx +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/core.pyx +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/minheap.pxd +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/minheap.pyx +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/tests/test_cliques.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/tests/test_core.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/tests/test_triangles.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/tests/test_wl.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/weisfeiler_lehman.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/topology/weisfeiler_lehman_core.pyx +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/check.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/neighbors.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/tests/__init__.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/tests/test_check.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/tests/test_format.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/tests/test_membership.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/tests/test_neighbors.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/tests/test_tfidf.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/tests/test_values.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/tfidf.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/utils/values.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/visualization/colors.py +0 -0
- {scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/visualization/tests/__init__.py +0 -0
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
History
|
|
3
3
|
=======
|
|
4
4
|
|
|
5
|
+
0.32.0 (2024-03-28)
|
|
6
|
+
-------------------
|
|
7
|
+
|
|
8
|
+
* Add Leiden clustering algorithm
|
|
9
|
+
* Add k-center clustering algorithm
|
|
10
|
+
* Add functions to detect and break cycles
|
|
11
|
+
* Add damping factor in diffusion
|
|
12
|
+
* Fix F1 scores
|
|
13
|
+
* Remove hierarchical Louvain embedding
|
|
14
|
+
* Get clustering coefficient for directed graphs
|
|
5
15
|
|
|
6
16
|
0.31.0 (2023-05-22)
|
|
7
17
|
-------------------
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: scikit-network
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.32.0
|
|
4
4
|
Summary: Graph algorithms
|
|
5
5
|
Home-page: https://github.com/sknetwork-team/scikit-network
|
|
6
6
|
Author: Scikit-network team
|
|
7
7
|
Author-email: bonald@enst.fr
|
|
8
8
|
License: BSD license
|
|
9
9
|
Keywords: sknetwork
|
|
10
|
-
Platform: UNKNOWN
|
|
11
10
|
Classifier: Development Status :: 3 - Alpha
|
|
12
11
|
Classifier: Intended Audience :: Developers
|
|
13
12
|
Classifier: Intended Audience :: Information Technology
|
|
@@ -117,6 +116,16 @@ the `Journal of Machine Learning Research <https://jmlr.org>`_:
|
|
|
117
116
|
History
|
|
118
117
|
=======
|
|
119
118
|
|
|
119
|
+
0.32.0 (2024-03-28)
|
|
120
|
+
-------------------
|
|
121
|
+
|
|
122
|
+
* Add Leiden clustering algorithm
|
|
123
|
+
* Add k-center clustering algorithm
|
|
124
|
+
* Add functions to detect and break cycles
|
|
125
|
+
* Add damping factor in diffusion
|
|
126
|
+
* Fix F1 scores
|
|
127
|
+
* Remove hierarchical Louvain embedding
|
|
128
|
+
* Get clustering coefficient for directed graphs
|
|
120
129
|
|
|
121
130
|
0.31.0 (2023-05-22)
|
|
122
131
|
-------------------
|
|
@@ -492,5 +501,3 @@ History
|
|
|
492
501
|
------------------
|
|
493
502
|
|
|
494
503
|
* First release on PyPI.
|
|
495
|
-
|
|
496
|
-
|
|
@@ -49,6 +49,17 @@ When the graph is weighted, the degree of a node is replaced by its weight (sum
|
|
|
49
49
|
|
|
50
50
|
.. autoclass:: sknetwork.clustering.Louvain
|
|
51
51
|
|
|
52
|
+
Leiden
|
|
53
|
+
------
|
|
54
|
+
|
|
55
|
+
.. autoclass:: sknetwork.clustering.Leiden
|
|
56
|
+
|
|
57
|
+
K-centers
|
|
58
|
+
---------
|
|
59
|
+
|
|
60
|
+
.. autoclass:: sknetwork.clustering.KCenters
|
|
61
|
+
|
|
62
|
+
|
|
52
63
|
Propagation
|
|
53
64
|
-----------
|
|
54
65
|
.. autoclass:: sknetwork.clustering.PropagationClustering
|
|
@@ -19,8 +19,14 @@ Structure
|
|
|
19
19
|
|
|
20
20
|
.. autofunction:: sknetwork.topology.is_bipartite
|
|
21
21
|
|
|
22
|
+
Cycles
|
|
23
|
+
------
|
|
24
|
+
|
|
22
25
|
.. autofunction:: sknetwork.topology.is_acyclic
|
|
23
26
|
|
|
27
|
+
.. autofunction:: sknetwork.topology.get_cycles
|
|
28
|
+
|
|
29
|
+
.. autofunction:: sknetwork.topology.break_cycles
|
|
24
30
|
|
|
25
31
|
Core decomposition
|
|
26
32
|
------------------
|
|
@@ -10,9 +10,9 @@ Graphs
|
|
|
10
10
|
|
|
11
11
|
.. autofunction:: sknetwork.visualization.graphs.svg_graph
|
|
12
12
|
|
|
13
|
-
.. autofunction:: sknetwork.visualization.graphs.
|
|
13
|
+
.. autofunction:: sknetwork.visualization.graphs.visualize_bigraph
|
|
14
14
|
|
|
15
15
|
Dendrograms
|
|
16
16
|
-----------
|
|
17
17
|
|
|
18
|
-
.. autofunction:: sknetwork.visualization.dendrograms.
|
|
18
|
+
.. autofunction:: sknetwork.visualization.dendrograms.visualize_dendrogram
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: scikit-network
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.32.0
|
|
4
4
|
Summary: Graph algorithms
|
|
5
5
|
Home-page: https://github.com/sknetwork-team/scikit-network
|
|
6
6
|
Author: Scikit-network team
|
|
7
7
|
Author-email: bonald@enst.fr
|
|
8
8
|
License: BSD license
|
|
9
9
|
Keywords: sknetwork
|
|
10
|
-
Platform: UNKNOWN
|
|
11
10
|
Classifier: Development Status :: 3 - Alpha
|
|
12
11
|
Classifier: Intended Audience :: Developers
|
|
13
12
|
Classifier: Intended Audience :: Information Technology
|
|
@@ -117,6 +116,16 @@ the `Journal of Machine Learning Research <https://jmlr.org>`_:
|
|
|
117
116
|
History
|
|
118
117
|
=======
|
|
119
118
|
|
|
119
|
+
0.32.0 (2024-03-28)
|
|
120
|
+
-------------------
|
|
121
|
+
|
|
122
|
+
* Add Leiden clustering algorithm
|
|
123
|
+
* Add k-center clustering algorithm
|
|
124
|
+
* Add functions to detect and break cycles
|
|
125
|
+
* Add damping factor in diffusion
|
|
126
|
+
* Fix F1 scores
|
|
127
|
+
* Remove hierarchical Louvain embedding
|
|
128
|
+
* Get clustering coefficient for directed graphs
|
|
120
129
|
|
|
121
130
|
0.31.0 (2023-05-22)
|
|
122
131
|
-------------------
|
|
@@ -492,5 +501,3 @@ History
|
|
|
492
501
|
------------------
|
|
493
502
|
|
|
494
503
|
* First release on PyPI.
|
|
495
|
-
|
|
496
|
-
|
|
@@ -7,6 +7,7 @@ README.rst
|
|
|
7
7
|
setup.cfg
|
|
8
8
|
setup.py
|
|
9
9
|
./sknetwork/classification/vote.cpp
|
|
10
|
+
./sknetwork/clustering/leiden_core.cpp
|
|
10
11
|
./sknetwork/clustering/louvain_core.cpp
|
|
11
12
|
./sknetwork/hierarchy/paris.cpp
|
|
12
13
|
./sknetwork/linalg/diteration.cpp
|
|
@@ -85,6 +86,9 @@ sknetwork/classification/tests/test_pagerank.py
|
|
|
85
86
|
sknetwork/classification/tests/test_propagation.py
|
|
86
87
|
sknetwork/clustering/__init__.py
|
|
87
88
|
sknetwork/clustering/base.py
|
|
89
|
+
sknetwork/clustering/kcenters.py
|
|
90
|
+
sknetwork/clustering/leiden.py
|
|
91
|
+
sknetwork/clustering/leiden_core.pyx
|
|
88
92
|
sknetwork/clustering/louvain.py
|
|
89
93
|
sknetwork/clustering/louvain_core.pyx
|
|
90
94
|
sknetwork/clustering/metrics.py
|
|
@@ -92,6 +96,8 @@ sknetwork/clustering/postprocess.py
|
|
|
92
96
|
sknetwork/clustering/propagation_clustering.py
|
|
93
97
|
sknetwork/clustering/tests/__init__.py
|
|
94
98
|
sknetwork/clustering/tests/test_API.py
|
|
99
|
+
sknetwork/clustering/tests/test_kcenters.py
|
|
100
|
+
sknetwork/clustering/tests/test_leiden.py
|
|
95
101
|
sknetwork/clustering/tests/test_louvain.py
|
|
96
102
|
sknetwork/clustering/tests/test_metrics.py
|
|
97
103
|
sknetwork/clustering/tests/test_postprocess.py
|
|
@@ -115,7 +121,6 @@ sknetwork/embedding/__init__.py
|
|
|
115
121
|
sknetwork/embedding/base.py
|
|
116
122
|
sknetwork/embedding/force_atlas.py
|
|
117
123
|
sknetwork/embedding/louvain_embedding.py
|
|
118
|
-
sknetwork/embedding/louvain_hierarchy.py
|
|
119
124
|
sknetwork/embedding/random_projection.py
|
|
120
125
|
sknetwork/embedding/spectral.py
|
|
121
126
|
sknetwork/embedding/spring.py
|
|
@@ -124,7 +129,6 @@ sknetwork/embedding/tests/__init__.py
|
|
|
124
129
|
sknetwork/embedding/tests/test_API.py
|
|
125
130
|
sknetwork/embedding/tests/test_force_atlas.py
|
|
126
131
|
sknetwork/embedding/tests/test_louvain_embedding.py
|
|
127
|
-
sknetwork/embedding/tests/test_louvain_hierarchy.py
|
|
128
132
|
sknetwork/embedding/tests/test_random_projection.py
|
|
129
133
|
sknetwork/embedding/tests/test_spectral.py
|
|
130
134
|
sknetwork/embedding/tests/test_spring.py
|
|
@@ -166,7 +170,7 @@ sknetwork/linalg/basics.py
|
|
|
166
170
|
sknetwork/linalg/diteration.pyx
|
|
167
171
|
sknetwork/linalg/eig_solver.py
|
|
168
172
|
sknetwork/linalg/laplacian.py
|
|
169
|
-
sknetwork/linalg/
|
|
173
|
+
sknetwork/linalg/normalizer.py
|
|
170
174
|
sknetwork/linalg/operators.py
|
|
171
175
|
sknetwork/linalg/polynome.py
|
|
172
176
|
sknetwork/linalg/ppr_solver.py
|
|
@@ -221,6 +225,7 @@ sknetwork/regression/tests/test_diffusion.py
|
|
|
221
225
|
sknetwork/topology/__init__.py
|
|
222
226
|
sknetwork/topology/cliques.pyx
|
|
223
227
|
sknetwork/topology/core.pyx
|
|
228
|
+
sknetwork/topology/cycles.py
|
|
224
229
|
sknetwork/topology/minheap.pxd
|
|
225
230
|
sknetwork/topology/minheap.pyx
|
|
226
231
|
sknetwork/topology/structure.py
|
|
@@ -230,6 +235,7 @@ sknetwork/topology/weisfeiler_lehman_core.pyx
|
|
|
230
235
|
sknetwork/topology/tests/__init__.py
|
|
231
236
|
sknetwork/topology/tests/test_cliques.py
|
|
232
237
|
sknetwork/topology/tests/test_core.py
|
|
238
|
+
sknetwork/topology/tests/test_cycles.py
|
|
233
239
|
sknetwork/topology/tests/test_structure.py
|
|
234
240
|
sknetwork/topology/tests/test_triangles.py
|
|
235
241
|
sknetwork/topology/tests/test_wl.py
|
|
@@ -153,7 +153,7 @@ setup(
|
|
|
153
153
|
test_suite='tests',
|
|
154
154
|
tests_require=test_requirements,
|
|
155
155
|
url='https://github.com/sknetwork-team/scikit-network',
|
|
156
|
-
version='0.
|
|
156
|
+
version='0.32.0',
|
|
157
157
|
zip_safe=False,
|
|
158
158
|
ext_modules=ext_modules,
|
|
159
159
|
include_dirs=[numpy.get_include()],
|
|
@@ -38,7 +38,7 @@ class BaseClassifier(Algorithm, ABC):
|
|
|
38
38
|
self.probs_row_ = None
|
|
39
39
|
self.probs_col_ = None
|
|
40
40
|
|
|
41
|
-
def predict(self, columns=False) -> np.ndarray:
|
|
41
|
+
def predict(self, columns: bool = False) -> np.ndarray:
|
|
42
42
|
"""Return the labels predicted by the algorithm.
|
|
43
43
|
|
|
44
44
|
Parameters
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Created
|
|
4
|
+
Created in March 2020
|
|
5
5
|
@author: Nathan de Lara <nathan.delara@polytechnique.org>
|
|
6
6
|
"""
|
|
7
7
|
from functools import partial
|
|
@@ -12,7 +12,7 @@ import numpy as np
|
|
|
12
12
|
from scipy import sparse
|
|
13
13
|
|
|
14
14
|
from sknetwork.classification.base import BaseClassifier
|
|
15
|
-
from sknetwork.linalg.
|
|
15
|
+
from sknetwork.linalg.normalizer import normalize
|
|
16
16
|
from sknetwork.ranking.base import BaseRanking
|
|
17
17
|
from sknetwork.utils.check import check_labels, check_n_jobs
|
|
18
18
|
from sknetwork.utils.format import get_adjacency_values
|
|
@@ -114,7 +114,7 @@ class RankClassifier(BaseClassifier):
|
|
|
114
114
|
seeds_labels = seeds_labels.astype(int)
|
|
115
115
|
labels_unique, n_classes = check_labels(seeds_labels)
|
|
116
116
|
seeds_all = self._process_labels(seeds_labels)
|
|
117
|
-
local_function = partial(self.algorithm.
|
|
117
|
+
local_function = partial(self.algorithm.fit_predict, adjacency)
|
|
118
118
|
with Pool(self.n_jobs) as pool:
|
|
119
119
|
scores = np.array(pool.map(local_function, seeds_all))
|
|
120
120
|
scores = scores.T
|
|
@@ -11,7 +11,7 @@ from scipy import sparse
|
|
|
11
11
|
|
|
12
12
|
from sknetwork.classification.base import BaseClassifier
|
|
13
13
|
from sknetwork.path.distances import get_distances
|
|
14
|
-
from sknetwork.linalg.
|
|
14
|
+
from sknetwork.linalg.normalizer import normalize
|
|
15
15
|
from sknetwork.utils.format import get_adjacency_values
|
|
16
16
|
from sknetwork.utils.membership import get_membership
|
|
17
17
|
from sknetwork.utils.neighbors import get_degrees
|
|
@@ -38,11 +38,14 @@ class DiffusionClassifier(BaseClassifier):
|
|
|
38
38
|
Labels of nodes.
|
|
39
39
|
probs_ : sparse.csr_matrix, shape (n_row, n_labels)
|
|
40
40
|
Probability distribution over labels.
|
|
41
|
-
labels_row_
|
|
42
|
-
Labels of rows
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
labels_row_ : np.ndarray
|
|
42
|
+
Labels of rows, for bipartite graphs.
|
|
43
|
+
labels_col_ : np.ndarray
|
|
44
|
+
Labels of columns, for bipartite graphs.
|
|
45
|
+
probs_row_ : sparse.csr_matrix, shape (n_row, n_labels)
|
|
46
|
+
Probability distributions over labels of rows, for bipartite graphs.
|
|
47
|
+
probs_col_ : sparse.csr_matrix, shape (n_col, n_labels)
|
|
48
|
+
Probability distributions over labels of columns, for bipartite graphs.
|
|
46
49
|
Example
|
|
47
50
|
-------
|
|
48
51
|
>>> from sknetwork.data import karate_club
|
|
@@ -78,13 +81,15 @@ class DiffusionClassifier(BaseClassifier):
|
|
|
78
81
|
|
|
79
82
|
Parameters
|
|
80
83
|
----------
|
|
81
|
-
input_matrix :
|
|
84
|
+
input_matrix : sparse.csr_matrix, np.ndarray
|
|
82
85
|
Adjacency matrix or biadjacency matrix of the graph.
|
|
83
|
-
labels :
|
|
86
|
+
labels : dict, np.ndarray
|
|
84
87
|
Known labels (dictionary or vector of int). Negative values ignored.
|
|
85
|
-
labels_row,
|
|
86
|
-
Labels of rows
|
|
87
|
-
|
|
88
|
+
labels_row : dict, np.ndarray
|
|
89
|
+
Labels of rows for bipartite graphs. Negative values ignored.
|
|
90
|
+
labels_col : dict, np.ndarray
|
|
91
|
+
Labels of columns for bipartite graphs. Negative values ignored.
|
|
92
|
+
force_bipartite : bool
|
|
88
93
|
If ``True``, consider the input matrix as a biadjacency matrix (default = ``False``).
|
|
89
94
|
|
|
90
95
|
Returns
|
|
@@ -98,7 +103,10 @@ class DiffusionClassifier(BaseClassifier):
|
|
|
98
103
|
labels = values.astype(int)
|
|
99
104
|
if (labels < 0).all():
|
|
100
105
|
raise ValueError('At least one node must be given a non-negative label.')
|
|
101
|
-
|
|
106
|
+
labels_reindex = labels.copy()
|
|
107
|
+
labels_unique, inverse = np.unique(labels[labels >= 0], return_inverse=True)
|
|
108
|
+
labels_reindex[labels >= 0] = inverse
|
|
109
|
+
temperatures = get_membership(labels_reindex).toarray()
|
|
102
110
|
temperatures_seeds = temperatures[labels >= 0]
|
|
103
111
|
temperatures[labels < 0] = 0.5
|
|
104
112
|
diffusion = normalize(adjacency)
|
|
@@ -107,7 +115,7 @@ class DiffusionClassifier(BaseClassifier):
|
|
|
107
115
|
temperatures[labels >= 0] = temperatures_seeds
|
|
108
116
|
if self.centering:
|
|
109
117
|
temperatures -= temperatures.mean(axis=0)
|
|
110
|
-
labels_ = temperatures.argmax(axis=1)
|
|
118
|
+
labels_ = labels_unique[temperatures.argmax(axis=1)]
|
|
111
119
|
|
|
112
120
|
# softmax
|
|
113
121
|
if self.centering:
|
|
@@ -12,7 +12,7 @@ from scipy import sparse
|
|
|
12
12
|
|
|
13
13
|
from sknetwork.classification.base import BaseClassifier
|
|
14
14
|
from sknetwork.embedding.base import BaseEmbedding
|
|
15
|
-
from sknetwork.linalg.
|
|
15
|
+
from sknetwork.linalg.normalizer import get_norms, normalize
|
|
16
16
|
from sknetwork.utils.check import check_n_neighbors
|
|
17
17
|
from sknetwork.utils.format import get_adjacency_values
|
|
18
18
|
|
|
@@ -22,12 +22,12 @@ class NNClassifier(BaseClassifier):
|
|
|
22
22
|
|
|
23
23
|
Parameters
|
|
24
24
|
----------
|
|
25
|
-
n_neighbors :
|
|
25
|
+
n_neighbors : int
|
|
26
26
|
Number of nearest neighbors .
|
|
27
|
-
embedding_method :
|
|
27
|
+
embedding_method : :class:`BaseEmbedding`
|
|
28
28
|
Embedding method used to represent nodes in vector space.
|
|
29
29
|
If ``None`` (default), use identity.
|
|
30
|
-
normalize :
|
|
30
|
+
normalize : bool
|
|
31
31
|
If ``True``, apply normalization so that all vectors have norm 1 in the embedding space.
|
|
32
32
|
|
|
33
33
|
Attributes
|
|
@@ -36,10 +36,14 @@ class NNClassifier(BaseClassifier):
|
|
|
36
36
|
Labels of nodes.
|
|
37
37
|
probs_ : sparse.csr_matrix, shape (n_row, n_labels)
|
|
38
38
|
Probability distribution over labels.
|
|
39
|
-
labels_row_
|
|
40
|
-
Labels of rows
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
labels_row_ : np.ndarray
|
|
40
|
+
Labels of rows, for bipartite graphs.
|
|
41
|
+
labels_col_ : np.ndarray
|
|
42
|
+
Labels of columns, for bipartite graphs.
|
|
43
|
+
probs_row_ : sparse.csr_matrix, shape (n_row, n_labels)
|
|
44
|
+
Probability distributions over labels of rows, for bipartite graphs.
|
|
45
|
+
probs_col_ : sparse.csr_matrix, shape (n_col, n_labels)
|
|
46
|
+
Probability distributions over labels of columns, for bipartite graphs.
|
|
43
47
|
|
|
44
48
|
Example
|
|
45
49
|
-------
|
|
@@ -99,12 +103,14 @@ class NNClassifier(BaseClassifier):
|
|
|
99
103
|
|
|
100
104
|
Parameters
|
|
101
105
|
----------
|
|
102
|
-
input_matrix :
|
|
106
|
+
input_matrix : sparse.csr_matrix, np.ndarray
|
|
103
107
|
Adjacency matrix or biadjacency matrix of the graph.
|
|
104
|
-
labels :
|
|
105
|
-
Known labels
|
|
106
|
-
labels_row,
|
|
107
|
-
Known labels of rows
|
|
108
|
+
labels : np.ndarray, dict
|
|
109
|
+
Known labels. Negative values ignored.
|
|
110
|
+
labels_row : np.ndarray, dict
|
|
111
|
+
Known labels of rows, for bipartite graphs.
|
|
112
|
+
labels_col : np.ndarray, dict
|
|
113
|
+
Known labels of columns, for bipartite graphs.
|
|
108
114
|
|
|
109
115
|
Returns
|
|
110
116
|
-------
|
|
@@ -158,7 +158,7 @@ def get_f1_scores(labels_true: np.ndarray, labels_pred: np.ndarray, return_preci
|
|
|
158
158
|
mask = counts_pred > 0
|
|
159
159
|
precisions[mask] = counts_correct[mask] / counts_pred[mask]
|
|
160
160
|
f1_scores = np.zeros(n_labels)
|
|
161
|
-
mask = (
|
|
161
|
+
mask = (precisions > 0) & (recalls > 0)
|
|
162
162
|
f1_scores[mask] = 2 / (1 / precisions[mask] + 1 / recalls[mask])
|
|
163
163
|
if return_precision_recall:
|
|
164
164
|
return f1_scores, precisions, recalls
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
"""
|
|
4
|
-
Created
|
|
4
|
+
Created in March 2020
|
|
5
5
|
@author: Nathan de Lara <nathan.delara@polytechnique.org>
|
|
6
6
|
"""
|
|
7
7
|
from typing import Optional
|
|
@@ -17,9 +17,9 @@ class PageRankClassifier(RankClassifier):
|
|
|
17
17
|
|
|
18
18
|
Parameters
|
|
19
19
|
----------
|
|
20
|
-
damping_factor:
|
|
20
|
+
damping_factor: float
|
|
21
21
|
Probability to continue the random walk.
|
|
22
|
-
solver :
|
|
22
|
+
solver : str
|
|
23
23
|
Which solver to use: 'piteration', 'diteration', 'bicgstab', 'lanczos'.
|
|
24
24
|
n_iter : int
|
|
25
25
|
Number of iterations for some solvers such as ``'piteration'`` or ``'diteration'``.
|
|
@@ -29,13 +29,17 @@ class PageRankClassifier(RankClassifier):
|
|
|
29
29
|
Attributes
|
|
30
30
|
----------
|
|
31
31
|
labels_ : np.ndarray, shape (n_labels,)
|
|
32
|
-
|
|
32
|
+
Labels of nodes.
|
|
33
33
|
probs_ : sparse.csr_matrix, shape (n_row, n_labels)
|
|
34
34
|
Probability distribution over labels.
|
|
35
|
-
labels_row_
|
|
36
|
-
Labels of rows
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
labels_row_ : np.ndarray
|
|
36
|
+
Labels of rows, for bipartite graphs.
|
|
37
|
+
labels_col_ : np.ndarray
|
|
38
|
+
Labels of columns, for bipartite graphs.
|
|
39
|
+
probs_row_ : sparse.csr_matrix, shape (n_row, n_labels)
|
|
40
|
+
Probability distributions over labels of rows, for bipartite graphs.
|
|
41
|
+
probs_col_ : sparse.csr_matrix, shape (n_col, n_labels)
|
|
42
|
+
Probability distributions over labels of columns, for bipartite graphs.
|
|
39
43
|
|
|
40
44
|
Example
|
|
41
45
|
-------
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
# coding: utf-8
|
|
3
3
|
"""
|
|
4
|
-
Created
|
|
4
|
+
Created in April 2020
|
|
5
5
|
@author: Thomas Bonald <tbonald@enst.fr>
|
|
6
6
|
"""
|
|
7
7
|
|
|
@@ -12,7 +12,7 @@ from scipy import sparse
|
|
|
12
12
|
|
|
13
13
|
from sknetwork.classification.base import BaseClassifier
|
|
14
14
|
from sknetwork.classification.vote import vote_update
|
|
15
|
-
from sknetwork.linalg.
|
|
15
|
+
from sknetwork.linalg.normalizer import normalize
|
|
16
16
|
from sknetwork.utils.format import get_adjacency_values
|
|
17
17
|
from sknetwork.utils.membership import get_membership
|
|
18
18
|
|
|
@@ -25,9 +25,9 @@ class Propagation(BaseClassifier):
|
|
|
25
25
|
n_iter : float
|
|
26
26
|
Maximum number of iterations (-1 for infinity).
|
|
27
27
|
node_order : str
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
28
|
+
* ``'random'``: node labels are updated in random order.
|
|
29
|
+
* ``'increasing'``: node labels are updated by increasing order of (in-) weight.
|
|
30
|
+
* ``'decreasing'``: node labels are updated by decreasing order of (in-) weight.
|
|
31
31
|
* Otherwise, node labels are updated by index order.
|
|
32
32
|
weighted : bool
|
|
33
33
|
If ``True``, the vote of each neighbor is proportional to the edge weight.
|
|
@@ -36,13 +36,17 @@ class Propagation(BaseClassifier):
|
|
|
36
36
|
Attributes
|
|
37
37
|
----------
|
|
38
38
|
labels_ : np.ndarray, shape (n_labels,)
|
|
39
|
-
|
|
39
|
+
Labels of nodes.
|
|
40
40
|
probs_ : sparse.csr_matrix, shape (n_row, n_labels)
|
|
41
41
|
Probability distribution over labels.
|
|
42
|
-
labels_row_
|
|
43
|
-
Labels of rows
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
labels_row_ : np.ndarray
|
|
43
|
+
Labels of rows, for bipartite graphs.
|
|
44
|
+
labels_col_ : np.ndarray
|
|
45
|
+
Labels of columns, for bipartite graphs.
|
|
46
|
+
probs_row_ : sparse.csr_matrix, shape (n_row, n_labels)
|
|
47
|
+
Probability distributions over labels of rows, for bipartite graphs.
|
|
48
|
+
probs_col_ : sparse.csr_matrix, shape (n_col, n_labels)
|
|
49
|
+
Probability distributions over labels of columns, for bipartite graphs.
|
|
46
50
|
|
|
47
51
|
Example
|
|
48
52
|
-------
|
|
@@ -93,12 +97,15 @@ class Propagation(BaseClassifier):
|
|
|
93
97
|
|
|
94
98
|
Parameters
|
|
95
99
|
----------
|
|
96
|
-
input_matrix :
|
|
100
|
+
input_matrix : sparse.csr_matrix, np.ndarray
|
|
97
101
|
Adjacency matrix or biadjacency matrix of the graph.
|
|
98
|
-
labels :
|
|
99
|
-
Known labels
|
|
100
|
-
labels_row,
|
|
101
|
-
Known labels of rows
|
|
102
|
+
labels : np.ndarray, dict
|
|
103
|
+
Known labels. Negative values ignored.
|
|
104
|
+
labels_row : np.ndarray, dict
|
|
105
|
+
Known labels of rows, for bipartite graphs.
|
|
106
|
+
labels_col : np.ndarray, dict
|
|
107
|
+
Known labels of columns, for bipartite graphs.
|
|
108
|
+
|
|
102
109
|
Returns
|
|
103
110
|
-------
|
|
104
111
|
self: :class:`Propagation`
|
{scikit-network-0.31.0 → scikit-network-0.32.0}/sknetwork/classification/tests/test_diffusion.py
RENAMED
|
@@ -36,6 +36,7 @@ class TestDiffusionClassifier(unittest.TestCase):
|
|
|
36
36
|
algo.fit(biadjacency, labels_row=labels_row, labels_col=labels_col)
|
|
37
37
|
self.assertTrue(len(algo.labels_row_) == n_row)
|
|
38
38
|
self.assertTrue(len(algo.labels_col_) == n_col)
|
|
39
|
+
self.assertTrue(all(algo.labels_col_ == algo.predict(columns=True)))
|
|
39
40
|
|
|
40
41
|
def test_predict(self):
|
|
41
42
|
adjacency = test_graph()
|
|
@@ -65,3 +66,12 @@ class TestDiffusionClassifier(unittest.TestCase):
|
|
|
65
66
|
self.assertTrue(membership.shape == (n_row, 2))
|
|
66
67
|
membership = algo.transform(columns=True)
|
|
67
68
|
self.assertTrue(membership.shape == (n_col, 2))
|
|
69
|
+
|
|
70
|
+
def test_reindex_label(self):
|
|
71
|
+
adjacency = test_graph()
|
|
72
|
+
n_nodes = adjacency.shape[0]
|
|
73
|
+
labels = {0: 0, 1: 2, 2: 3}
|
|
74
|
+
algo = DiffusionClassifier()
|
|
75
|
+
labels_pred = algo.fit_predict(adjacency, labels=labels)
|
|
76
|
+
self.assertTrue(len(labels_pred) == n_nodes)
|
|
77
|
+
self.assertTrue(set(list(labels_pred)) == {0, 2, 3})
|