PySClump 
A Python implementation of 'Spectral Clustering in Heterogeneous Information Networks' from AAAI, 2019.
This was heavily inspired by the original implementation in MATLAB.
Figure: A similarity matrix represented as a graph. Nodes are coloured according to their assigned cluster.
References
Li, Xiang and Kao, Ben and Ren, Zhaochun and Yin, Dawei. 'Spectral Clustering in Heterogeneous Information Networks'. Proceedings of the AAAI Conference on Artificial Intelligence: 4221-4228.
Installation
PySClump is available on PyPI! Install with:
pip install pysclump
PathSim
We provide PathSim as a similarity metric between pairs of nodes. However, PySClump works with any similarity metric! See the SClump section below.
from pysclump import PathSim
import numpy as np
type_lists = {
'A': ['Mike', 'Jim', 'Mary', 'Bob', 'Ann'],
'C': ['SIGMOD', 'VLDB', 'ICDE', 'KDD'],
'V': ['Pasadena', 'Guwahati', 'Bangalore']
}
incidence_matrices = {
'AC': np.array([[2, 1, 0, 0], [50, 20, 0, 0], [2, 0, 1, 0], [2, 1, 0, 0], [0, 0, 1, 1]]),
'VC': np.array([[3, 1, 1, 1], [1, 0, 0, 0], [2, 1, 0, 1]])
}
# Create PathSim instance.
ps = PathSim(type_lists, incidence_matrices)
# Get the similarity between two authors (indicated by type 'A').
ps.pathsim('Mike', 'Jim', metapath='ACA')
# Get the similarity matrix M for the metapath.
ps.compute_similarity_matrix(metapath='ACVCA')
SClump
Once we have the similarity matrices (PathSim shown here), running SClump is really simple.
from pysclump import SClump
# Construct similarity matrices.
similarity_matrices = {
'ACA': pathsim.compute_similarity_matrix(metapath='ACA'),
'ACVCA': pathsim.compute_similarity_matrix(metapath='ACVCA'),
}
# Create SClump instance.
sclump = SClump(similarity_matrices, num_clusters=2)
# Run the algorithm!
labels, learned_similarity_matrix, metapath_weights = sclump.run()
If we have n nodes to be clustered into k clusters, labels is a n-by-1 vector, with entries from 0 to (k - 1) indicating the cluster index assigned. learned_similarity_matrix is the n-by-n matrix S referenced in the paper, indicating node-to-node similarity.
The clusters themselves are assigned by k++-means clustering either on the similarity matrix directly, or on the Laplacian of the learned similarity matrix.
Acknowledgements
This would not have been possible without the assistance of my CS529 teammates at IIT Guwahati:
- Yagyansh Bhatia (yagyanshbhatia)
- Dhananjay Shukla (dshukla1997)
Credit for visualization is completely due to Ramyani Ghosh (ramyani-ghosh).
Release files for pysclump 0.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pysclump-0.0.4.tar.gz | 6.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pysclump-0.0.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.6 kB
Release files / pysclump-0.0.4.tar.gz
| Download URL | pysclump-0.0.4.tar.gz |
|---|---|
| Size | 6.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b87faf847334f4866b6ff2f494bbcbccaa6bc3dc7b7d81a1d9f9753607d82bfc
|
|
BLAKE2b-256 checksum How to use checksums |
ea1e6bdefc47c96ee9f59f22c1b3b5803bc951fa2181087fa68549e73f9295ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/41.6.0 requests-toolbelt/0.8.0 tqdm/4.23.3 CPython/3.5.2
|
Release files / pysclump-0.0.4-py3-none-any.whl
| Download URL | pysclump-0.0.4-py3-none-any.whl |
|---|---|
| Size | 12.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e89b7e980b7919956d1ef3a774df0dabe6131ad52d3c1fbedf1e205b275860c7
|
|
BLAKE2b-256 checksum How to use checksums |
34d3788d8caf2614ded6fbbdcfea4928ba05132568740c2eee18685864f306da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/41.6.0 requests-toolbelt/0.8.0 tqdm/4.23.3 CPython/3.5.2
|