【问题标题】:Spark Mllib - Frequent Pattern Mining - Association Rules - Not getting the expected resultsSpark Mllib - 频繁模式挖掘 - 关联规则 - 没有得到预期的结果
【发布时间】:2016-09-29 07:33:01
【问题描述】:

我有以下数据集:

[A,D]
[C,A,B]
[A]
[A,E,D]
[B,D]

我正在尝试使用 Spark Mllib 使用频繁模式挖掘来提取一些关联规则。为此,我有以下代码:

val transactions = sc.textFile("/user/cloudera/teste")

import org.apache.spark.mllib.fpm.AssociationRules
import org.apache.spark.mllib.fpm.FPGrowth.FreqItemset

val freqItemsets = transactions.repartition(10).map(_.split(",")).flatMap(xs => 
    (xs.combinations(1) ++ xs.combinations(2) ++ xs.combinations(3) ++ xs.combinations(4) ++ xs.combinations(5)).filter(_.nonEmpty).map(x => (x.toList, 1L))   ).reduceByKey(_ + _).map{case (xs, cnt) => new FreqItemset(xs.toArray, cnt)}

val ar = new AssociationRules().setMinConfidence(0.8)

val results = ar.run(freqItemsets)

results.collect().foreach { rule =>
  println("[" + rule.antecedent.mkString(",")
    + "=>"
    + rule.consequent.mkString(",") + "]," + rule.confidence)}

但是提取的所有规则的置信度都等于1:

[[C=>A],1.0
[[C=>B]],1.0
[A,B]=>[C],1.0
[E=>D]],1.0
[E=>[A],1.0
[A=>B]],1.0
[A=>[C],1.0
[[C,A=>B]],1.0
[[A=>D]],1.0
[E,D]=>[A],1.0
[[A,E=>D]],1.0
[[C,B]=>A],1.0
[[B=>D]],1.0
[B]=>A],1.0
[B]=>[C],1.0

我真的不明白我在代码中遇到的问题......谁知道我必须计算置信度的错误是什么?

非常感谢!

【问题讨论】:

    标签: scala data-mining apache-spark-mllib pattern-mining


    【解决方案1】:

    您的数据集太小。数据中任何项目的最大频率为 3。因此您可以有 0、1/3、1/2、2/3、1 的置信度。只有 1 大于 0.8。

    尝试将最小置信度设置为0.6,然后你就可以真正得到

    [A]=>[D] confidence 0.666
    

    【讨论】:

    • 嗨@Anony-Mousse,感谢您的回复:) 但是为什么总是出现值等于1?作为低于 0.8 的真正信心,这些规则不应该出现,对吧?
    • 你已设置.setMinConfidence(0.8)
    猜你喜欢
    • 2011-03-04
    • 2011-10-26
    • 2015-04-29
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-26
    • 2014-07-13
    相关资源
    最近更新 更多