# Clustering users with very sparse data

I have a dataframe of the form

| user_ID | cat1 | cat2 | ..... |cat 2125 |
234       1.0    0.0            0.0
125       0.0    1.0            0.0
542       0.0    1.0            1.0
...


This dataset represents user votes on 2125 books. Each category column stands for one book. It contains either a 1.0, for a vote given by that user or a 0.0, for no vote.

I want to cluster these users by the books they voted for. I realize I first need to reduce dimensionality. I tried PCA and TruncatedSVD, with k-Means clustering afterwards. In both cases, the clusters I get are irrelevant (users usually have no books in common).

My only constraint here is that i must use k-Means (since I need the coordinates of the centroids). I suspect that my dimensionality reduction is not good though.

Can someone please offer some advice as to what I should do?

There are methods such as KernelPCA, using different kernels, with which you can even construct your own. There are other dimensionality reduction techniques - this link https://towardsdatascience.com/dimensionality-reduction-for-machine-learning-80a46c2ebb7e might give you a start.