頻度パターン マイニング
頻度の項目、項目セット、部分列、あるいは他の下部構造の採掘は、通常大きなスケールのデータセットを解析するための共通の最初の一歩です。これは長年の間データの採掘での活発な研究トピックでした。更に詳しい情報は Wikipediaの 関連ルール学習を見てください。
目次
FP-Growth
FP-growth アルゴリズムは Han et al., Mining frequent patterns without candidate generationで説明されています。"FP"はリクエストのパターンを意味します。処理のデータセットが与えられた場合、FP-growthの最初のステップはアイテム頻度と頻度が高いアイテムを識別です。同じ目的のために設計されたApriori-likeアルゴリズムと異なり、FP-growthの二つ目のステップは明示的に候補セットを生成することなしに処理をエンコードするためにサフィックスツリー(FP-tree)を使います。これは通常生成するのが高くつきます。二つ目のステップの後で、頻出アイテム集合をFP-treeから抽出することができます。spark.mllib
では、Li et al., PFP: Parallel FP-growth for query recommendationで説明される、PFPと呼ばれるFP-growthの並行バージョンを実装しています。PFP は処理のサフィックスに基づいて成長するFP-treeの作業を分散し、従って1つのマシーンの実装よりもスケーラブルです。詳細は論文を参照してください。
spark.ml
の FP-growth 実装は以下の(ハイパー)パラメータを取ります:
minSupport
: 頻度として識別されるアイテム集合のための最小限のサポート。例えば、もしアイテムが5処理のうち3つで現れた場合、3/5=0.6のサポートを持ちます。minConfidence
: 関連ルールを生成するための最小の信頼性。信頼性は関連ルールがtrueだと分かる頻度の指標です。例えば、トランザクション内でアイテムセットX
が4回現れ、X
とY
が同時に2回だけ起こる場合、ルールX => Y
の信頼性は 2/4 = 0.5 です。The parameter will not affect the mining for frequent itemsets, but specify the minimum confidence for generating association rules from frequent itemsets.numPartitions
: 作業を分散するために使われるパーティションの数。デフォルトでは、パラメータは設定されず、入力データセットのパーティションの数が使われます。
FPGrowthModel
は以下を提供します:
freqItemsets
: DataFrame(“items”[Array], “freq”[Long]) の形式の頻度のアイテムセットassociationRules
: 上のminConfidence
を使って生成された相関ルール。DataFrame(“antecedent”[Array], “consequent”[Array], “confidence”[Double]) の形式。transform
:itemsCol
内の各トランザクションについては、transform
メソッドが項目と各相関ルールの前例を比較するでしょう。レコードが特定の相関ルールの全ての前例を含む場合、そのルールは適用可能だと見なされ、その結果は予想の結果に追加されるでしょう。変換メソッドは予測として全ての適用可能なルールから結果を要約するでしょう。予想カラムはitemsCol
と同じデータ型を持ち、itemsCol
内の既存の項目を含みません。
例
詳細は Scala API ドキュメントを参照してください。
import org.apache.spark.ml.fpm.FPGrowth
val dataset = spark.createDataset(Seq(
"1 2 5",
"1 2 3 5",
"1 2")
).map(t => t.split(" ")).toDF("items")
val fpgrowth = new FPGrowth().setItemsCol("items").setMinSupport(0.5).setMinConfidence(0.6)
val model = fpgrowth.fit(dataset)
// Display frequent itemsets.
model.freqItemsets.show()
// Display generated association rules.
model.associationRules.show()
// transform examines the input items against all the association rules and summarize the
// consequents as prediction
model.transform(dataset).show()
詳細は Java API ドキュメントを参照してください。
import java.util.Arrays;
import java.util.List;
import org.apache.spark.ml.fpm.FPGrowth;
import org.apache.spark.ml.fpm.FPGrowthModel;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.*;
List<Row> data = Arrays.asList(
RowFactory.create(Arrays.asList("1 2 5".split(" "))),
RowFactory.create(Arrays.asList("1 2 3 5".split(" "))),
RowFactory.create(Arrays.asList("1 2".split(" ")))
);
StructType schema = new StructType(new StructField[]{ new StructField(
"items", new ArrayType(DataTypes.StringType, true), false, Metadata.empty())
});
Dataset<Row> itemsDF = spark.createDataFrame(data, schema);
FPGrowthModel model = new FPGrowth()
.setItemsCol("items")
.setMinSupport(0.5)
.setMinConfidence(0.6)
.fit(itemsDF);
// Display frequent itemsets.
model.freqItemsets().show();
// Display generated association rules.
model.associationRules().show();
// transform examines the input items against all the association rules and summarize the
// consequents as prediction
model.transform(itemsDF).show();
詳細は Python API ドキュメントを参照してください。
from pyspark.ml.fpm import FPGrowth
df = spark.createDataFrame([
(0, [1, 2, 5]),
(1, [1, 2, 3, 5]),
(2, [1, 2])
], ["id", "items"])
fpGrowth = FPGrowth(itemsCol="items", minSupport=0.5, minConfidence=0.6)
model = fpGrowth.fit(df)
# Display frequent itemsets.
model.freqItemsets.show()
# Display generated association rules.
model.associationRules.show()
# transform examines the input items against all the association rules and summarize the
# consequents as prediction
model.transform(df).show()
詳細は R API ドキュメント を参照してください。
# Load training data
df <- selectExpr(createDataFrame(data.frame(rawItems = c(
"1,2,5", "1,2,3,5", "1,2"
))), "split(rawItems, ',') AS items")
fpm <- spark.fpGrowth(df, itemsCol="items", minSupport=0.5, minConfidence=0.6)
# Extracting frequent itemsets
spark.freqItemsets(fpm)
# Extracting association rules
spark.associationRules(fpm)
# Predict uses association rules to and combines possible consequents
predict(fpm, df)