頻度パターン マイニング

頻度の項目、項目セット、部分列、あるいは他の下部構造の採掘は、通常大きなスケールのデータセットを解析するための共通の最初の一歩です。これは長年の間データの採掘での活発な研究トピックでした。更に詳しい情報は 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 実装は以下の(ハイパー)パラメータを取ります:

FPGrowthModel は以下を提供します:

詳細は 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()
例の完全なコードは Spark のリポジトリの "examples/src/main/scala/org/apache/spark/examples/ml/FPGrowthExample.scala" で見つかります。

詳細は 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();
例の完全なコードは Spark のリポジトリの "examples/src/main/java/org/apache/spark/examples/ml/JavaFPGrowthExample.java" で見つかります。

詳細は 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()
例の完全なコードは Spark のリポジトリの "examples/src/main/python/ml/fpgrowth_example.py" で見つかります。

詳細は 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)
例の完全なコードはSparkのリポジトリの "examples/src/main/r/ml/fpm.R" で見つかります。
TOP
inserted by FC2 system