I think it's defiantly needed since `kneighbors_graph` does not give a symmetric matrix.
I know in the `spectral_embedding` module, (G + G.T /2.) is used but I don't think it's a correct way.

Suppose jth node is among k-nearest of ith node and the opposite is not. i.e. G[i, j] = dist(i, j) and G[j, i] = 0.
Also suppose G[m, l] = G[l, m] = dist(m, l).
Now if we use (G + G.T)/2, G[i, j] = G[j,i] = dist(i, j) /2 and G[m, l] = G[l, m] = dist(m. l].
It is obviously not what we want.