我完全是机器学习和k-means算法的新手。经过相当多的搜索,我确定在尝试为k-means找到合适的k时,我可以使用弯头,轮廓或间隙统计方法。问题是每个图表给出了一个截然不同的输出。该数据用于一个用户的纬度和经度位置,并且缩放几乎没有效果,因为所有位置实际上都在相同的50英里半径内。
这是我在R中使用的代码:
#Determining the right number of clusters for each user beginning with UserId = 2949
la <- user2949$Latitude
lo<-user2949$Longitude
p <- cbind(la,lo)
s <- scale(p)
head(s)
#Using Elbow Method
Elbow <- fviz_nbclust(p,kmeans,method = "wss")+labs(subtitle = "Elbow Method")
Elbow
#Using Silhouette Method
Silhouette <- fviz_nbclust(p,kmeans,method = "silhouette")+labs(subtitle = "Silhouette Method")
Silhouette
#Using Gap Statistic
set.seed(123)
Gap <- fviz_nbclust(p,kmeans,nstart=25,method = "gap_stat",nboot=50)+labs(subtitle = "Gap Statistic Method",K.max = 20)
Gap
输出(这些仅在链接中,因为我显然无法发布没有10的声誉的照片): - 对我来说另一个问题是决定弯曲,我听说我应该看看BIC,但不知道如何解决这个问题。我从观察结果得出结论,最佳簇数可能是6, - 这个方法说10,考虑到用户数量庞大,这可能不适合我想做的事情, - 差距统计说1个集群就足够了。我不知道什么是误导,什么不是,因为我对每种方法都没有专业知识。
这个项目的最终目标是查看所有用户位置,并确定他们的家庭所在地和#34;是基于他们的活动(由快餐店的信标拾取)。我正在尝试找到一种大规模的方法来确定近70,000个用户的用户位置。我最初的想法是使用最有效的这些方法进行循环,并将群集的中心用作可能的归属位置...我可以使用哪些代码,这将为我提供正确数量的群集,而无需查看70,000个图形?
答案 0 :(得分:0)
如果这些启发式相互矛盾,这通常意味着k-means算法失败,并且没有k是好的。它不是一个非常强大的算法,它对异常值很敏感。
您需要改进处理,并重新考虑您对相似性是什么以及群集是什么的假设。