I have a dataset as follows. For each user, I have a separate row with the forum he reads. There is up to 100 different forums.

data i have currently

I would like to cluster this data, so each user will be assigned to one of the groups (I do not know how much of groups there could be) based on the forums he read.

Do you know if there is a ready algorithm that I can use? For now, I'm thinking if I can calculate the vector from the list of all the forums and use k-means on that.

Second thing would be to transform the data as follows:

enter image description here

I guess that if I would only use 1, if user read the forum, or 0 if not, that would not work with k-means. I can extract number of posts, reputation or upvotes instead of "1". Will it work with k-means?


1 Answer 1


There are different approaches from easy to complicated


  1. Distance or similarity matrix is calculated for different topics (forums) and if two topics are more similar than a threshold, you suggest them to the users of the other one. For this, you need to gather all texts of different forums and vectorise them (from TF-IDF to Neural Embedding). Then define a similarity score which tells you how related topics are. Then suggest them to users.
  2. Second way of doing the same is to calculate similarity of different topics based on the number of mutual readers. Then doing the same as above.

Community Detection (Clustering) in Bipartite Graphs

Familiar yourself with the concepts of Community Detection and Bipartite Graphs. Then apply this clustering on users based on the forums they read. Select top topics inside each cluster of users and suggest them to all members of that cluster.

Link Prediction in Bipartite Graphs

Familiarize yourself with concept of Link Prediction. Applying link prediction on your problem gives you most probable links between users and forums.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.