Looking for a classification (?) algorithm for linearly separable but unlabeled data points
I got a partiall solution which migth work for this particular case but it is not easely generalizable: Since all your data converges to the same point: (1400, 500), you can set the center of coordinates there and then cluster in the space of angles. i.e. use the transformation $$\alpha = \arctan\left(\dfrac{y - y_0}{x - x_0}\right)$$ and cluster $\alpha$ (be carefull! you might divide by 0)

I have prepare this synthetic example in R and it works!,  but again: this is not easely generalizable

library(data.table)
library(ggplot2)

x &lt;- c(1,2,3,4,5)
y1 &lt;- x + 1
y2 &lt;- -x + 11
y3 &lt;- -3*x + 21

# creates a data.table with 3 lines converging at point (5,6)
dt &lt;- data.table( x = rep(x, 3)
                , y = c(y1,y2,y3)
                )


The data.table looks like this:



Now is time to transform it and make the clusters

dt_transform &lt;- dt[, .(x, y, a = atan((y - 6) / (x - 6)) )] # avoid x - 5 == 0

km &lt;- kmeans(dt_transform$a, 3)

dt_cluster &lt;- cbind(dt_transform, cluster = as.factor(km$cluster))


The clustered data.table looks like this:



If you go this way please, share the results with me. I'm interesting to know if it works with real data