spark GMM无法将点划分为正确的簇

时间:2016-07-25 07:45:21

标签: apache-spark cluster-analysis apache-spark-mllib

我的数据集看起来像这样:(用户名已被混淆,也有40位用户 - 我并不想全部显示)

(a1,List(1.0, 1015.0))
(a2,List(2.0, 2015.0))
(a3,List(3.0, 3015.0))
(a4,List(1.0, 1015.0))
(a5,List(0.0, 15.0))
(a6,List(0.0, 15.0))

基本上,我想创建一个示例应用程序,其中有4个非常明显的集群(每个集群有10个用户)。并表明具有相同特征的用户属于同一群集。

代码从数据创建向量,训练模型并根据所学习的模型进行预测:

val cuttedData = data1.map(s => s.replace("List", "").replace("(", "").replace(")", "").trim.split(','))
val parsedData1 = cuttedData.map(item => Vectors.dense(item.drop(1).map(t => t.toDouble))).cache()
parsedData1.foreach(println)
val gmm1 = new GaussianMixture().setK(4).run(parsedData1)
cuttedData.foreach(item => {println(item(0) + " : " + gmm1.predict(Vectors.dense(item.drop(1).map(i => i.toDouble))))})

问题是用户预计只有3个集群,因此功能 - >集群关系是:

(1.0, 1015.0) -> 1
(0.0, 15.0) -> 0
(2.0, 2015.0), (3.0, 3015.0) -> 2

从模型中打印出的簇是:

weight=0.150000
mu=[2.4445803037860923E-11,15.000000024445805]
sigma=
5.7824573923325105E-11  5.782457392332511E-8  
5.782457392332511E-8    5.782457377877571E-5  

weight=0.150000
mu=[2.4445803037860923E-11,15.000000024445805]
sigma=
5.7824573923325105E-11  5.782457392332511E-8  
5.782457392332511E-8    5.782457377877571E-5  

weight=0.371495
mu=[2.1293846059560595,2144.3846059560597]
sigma=
0.4824411855092578  482.4411855092562  
482.4411855092562   482441.185509255   

weight=0.328505
mu=[1.8536826474572847,1868.6826474572852]
sigma=
0.4795182413266584  479.51824132665774  
479.51824132665774  479518.24132665637  

我不明白为什么用户被分类错误,我尝试将K参数增加到100,并使用Normalizer来获取数据,但它没有帮助。

另一件需要注意的事情是,当我使用KMEANS获取相同的数据时,它可以完美地运行。

0 个答案:

没有答案