2016-09-28 2 views
0

Я следующий набор данные:Спарка Mllib - Частое Pattern Mining - Правила ассоциации - Не получение ожидаемых результатов

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

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

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

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

ответ

0

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

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

[A]=>[D] confidence 0.666 
+0

Привет @ Anony-мусс, спасибо за ответ :) Но почему это то, что всегда оказывается значение равно 1? Будучи реальной уверенностью ниже 0,8, эти правила не должны появляться, не так ли? –

+0

Вы установили '.setMinConfidence (0.8)' –