Partitioning of a graph I am trying to split a network. I have an adjacency matrix that shows edges between nodes. The weight of the edge depends upon the total number of overlapping items between two nodes/union of items between two nodes. 
Next, I am trying to partition this adjacency matrix into sub-networks that show tightness of these sub-networks based on the strength of the connections within them.
Right now I am using Networkx python's modularity metric to do this splitting.
I am looking for a second opinion. Also, I can keep splitting until the sub-networks further until there are no more sub-networks left.
In addition to that, I am searching for a metric that can tell me whether further splitting this sub-network gives me better information (aka better tighter sub-network than the last one).FYI, this is an unsupervised approach.
Hope this makes sense. If not please fire away your comments/questions and I will edit my response accordingly.
Any help is much appreciated.
Rocky 
 A: I found a solution to my problem using consensus clustering. Here is the paper that describes it. One way to get the optimum clusters without having to solve them in a high-dimensional space using spectral clustering would be to run the algorithm repeatedly until no more partitions can be achieved.
Here is the article and complete explanation details:
SCIENTIFIC REPORTS | 2 : 336 | DOI: 10.1038/srep00336
Consensus clustering in complex networks
Andrea Lancichinetti & Santo Fortunato
The consensus matrix. Let us suppose that we wish to combine nP partitions found
by a clustering algorithm on a network with n vertices. The consensus matrix D is an n x n matrix, whose entry Dij indicates the number of partitions in which vertices i and j of the network were assigned to the same cluster, divided by the number of partitions nP. The matrix D is usually much denser than the adjacency matrix A of the original network, because in the consensus matrix there is an edge between any two vertices which have cooccurred in the same cluster at least once. On the other hand, the weights are large only for those vertices which are most frequently coclustered, whereas low weights indicate that the vertices are probably at the boundary between different (real) clusters, so their classification in the same cluster is unlikely
and essentially due to noise. We wish to maintain the large weights and to drop
the low ones, therefore a filtering procedure is in order. Among the other things, in the absence of filtering the consensus matrix would quickly grow into a very dense matrix, which would make the application of any clustering algorithm computationally expensive.We discard all entries of D below a threshold t. We stress that there might be some noisy vertices whose edges could all be below the threshold, and they would be not connected anymore. When this happens, we just connect them to their neighbors with highest weights, to keep the graph connected all along the procedure.
Next we apply the same clustering algorithm to D and produce another set of
partitions, which is then used to construct a new consensus matrix D9, as described above. The procedure is iterated until the consensus matrix turns into a block diagonal matrix Dfinal, whose weights equal 1 for vertices in the same block and 0 for vertices in different blocks. The matrix Dfinal delivers the community structure of the original network. In our calculations typically one iteration is sufficient to lead to stable results. We remark that in order to use the same clustering method all along, the latter has to be able to detect clusters in weighted networks, since the consensus matrix is weighted. This is a necessary constraint on the choice of the methods for which one could use the procedure proposed here. However, it is not a severe limitation,as most clustering algorithms in the literature can handle weighted networks
or can be trivially extended to deal with them.
A: This PNAS article sounds like it might be of interest to you. The author defines the modularity of the network and then uses that to partition the network. The algorithm used to do so is essentially a low-rank SVD approximation to a modified version of the adjacency matrix, so it is very fast to compute. If you use the first $k$ singular vectors, you will have at most $2^k$ partitions. 
M. E. J. Newman, "Modularity and community structure in networks," 2006, PNAS.  doi: 10.1073/pnas.0601602103
