Spark Mllib - добыча по частым схемам - правила ассоциации - не получение ожидаемых результатов

У меня есть следующий набор данных:

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

И я пытаюсь извлечь некоторые правила ассоциации, используя Frequent Pattern Mining, используя 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

Я действительно не понимаю проблему, которая есть в моем коде... Кто-нибудь знает, в чем заключается ошибка, которую я должен рассчитать достоверность?

Большое спасибо!

1 ответ

Ваш набор данных слишком мал Максимальная частота любого элемента в ваших данных равна 3. Таким образом, вы можете иметь доверительные отношения 0, 1/3, 1/2, 2/3, 1. Только 1 больше 0,8.

Попробуйте установить минимальную достоверность 0,6, тогда вы действительно можете получить

[A]=>[D] confidence 0.666
Другие вопросы по тегам