Mahout-クラスタリング
クラスタリングは、特定のコレクションの要素またはアイテムを、アイテム間の類似性に基づいてグループに編成する手順です。たとえば、オンラインニュース発行に関連するアプリケーションは、クラスタリングを使用してニュース記事をグループ化します。
クラスタリングのアプリケーション
クラスタリングは、市場調査、パターン認識、データ分析、画像処理などの多くのアプリケーションで広く使用されています。
クラスタリングは、マーケターが顧客ベースで個別のグループを発見するのに役立ちます。また、購入パターンに基づいて顧客グループを特徴付けることができます。
生物学の分野では、植物や動物の分類法を導き出し、同様の機能を持つ遺伝子を分類し、集団に固有の構造への洞察を得るのに使用できます。
クラスタリングは、地球観測データベースで同様の土地利用の領域を特定するのに役立ちます。
クラスタリングは、情報発見のためにWeb上のドキュメントを分類するのにも役立ちます。
クラスタリングは、クレジットカード詐欺の検出などの外れ値検出アプリケーションで使用されます。
データマイニング機能として、クラスター分析は、各クラスターの特性を観察するためのデータの分布に関する洞察を得るためのツールとして機能します。
Mahoutを使用すると、特定のデータセットをクラスター化できます。必要な手順は次のとおりです。
Algorithm クラスターの要素をグループ化するには、適切なクラスタリングアルゴリズムを選択する必要があります。
Similarity and Dissimilarity 新しく検出された要素とグループ内の要素との類似性を検証するためのルールを設定する必要があります。
Stopping Condition クラスタリングが不要なポイントを定義するには、停止条件が必要です。
クラスタリングの手順
特定のデータをクラスター化するには、次のことを行う必要があります-
Hadoopサーバーを起動します。Hadoopファイルシステムにファイルを保存するために必要なディレクトリを作成します。(キャノピーの場合は、入力ファイル、シーケンスファイル、およびクラスター化された出力用のディレクトリを作成します)。
入力ファイルをUnixファイルシステムからHadoopファイルシステムにコピーします。
入力データからシーケンスファイルを作成します。
利用可能なクラスタリングアルゴリズムのいずれかを実行します。
クラスター化されたデータを取得します。
Hadoopの開始
MahoutはHadoopと連携するため、Hadoopサーバーが稼働していることを確認してください。
$ cd HADOOP_HOME/bin
$ start-all.sh
入力ファイルディレクトリの準備
次のコマンドを使用して、Hadoopファイルシステムにディレクトリを作成し、入力ファイル、シーケンスファイル、およびクラスター化されたデータを保存します。
$ hadoop fs -p mkdir /mahout_data
$ hadoop fs -p mkdir /clustered_data
$ hadoop fs -p mkdir /mahout_seq
次のURLのhadoopWebインターフェイスを使用してディレクトリが作成されているかどうかを確認できます- http://localhost:50070/
以下に示すような出力が得られます。
入力ファイルをHDFSにコピーする
次に、以下に示すように、入力データファイルをLinuxファイルシステムからHadoopファイルシステムのmahout_dataディレクトリにコピーします。入力ファイルがmydata.txtであり、/ home / Hadoop / data /ディレクトリにあると想定します。
$ hadoop fs -put /home/Hadoop/data/mydata.txt /mahout_data/
シーケンスファイルの準備
Mahoutは、指定された入力ファイルをシーケンスファイル形式に変換するユーティリティを提供します。このユーティリティには2つのパラメータが必要です。
- 元のデータが存在する入力ファイルディレクトリ。
- クラスタ化されたデータが保存される出力ファイルディレクトリ。
以下に、mahoutのヘルププロンプトを示します。 seqdirectory ユーティリティ。
Step 1:Mahoutホームディレクトリを参照します。以下に示すように、ユーティリティのヘルプを取得できます。
[Hadoop@localhost bin]$ ./mahout seqdirectory --help
Job-Specific Options:
--input (-i) input Path to job input directory.
--output (-o) output The directory pathname for output.
--overwrite (-ow) If present, overwrite the output directory
次の構文を使用して、ユーティリティを使用してシーケンスファイルを生成します。
mahout seqdirectory -i <input file path> -o <output directory>
Example
mahout seqdirectory
-i hdfs://localhost:9000/mahout_seq/
-o hdfs://localhost:9000/clustered_data/
クラスタリングアルゴリズム
Mahoutは、クラスタリングの2つの主要なアルゴリズムをサポートしています。
- キャノピークラスタリング
- K-meansクラスタリング
キャノピークラスタリング
キャノピークラスタリングは、Mahoutがクラスタリングの目的で使用するシンプルで高速な手法です。オブジェクトは、プレーンスペース内のポイントとして扱われます。この手法は、k-meansクラスタリングなどの他のクラスタリング手法の最初のステップとしてよく使用されます。次の構文を使用して、Canopyジョブを実行できます。
mahout canopy -i <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>
キャノピージョブには、シーケンスファイルを含む入力ファイルディレクトリと、クラスタ化されたデータが保存される出力ディレクトリが必要です。
Example
mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq
-o hdfs://localhost:9000/clustered_data
-t1 20
-t2 30
指定された出力ディレクトリで生成されたクラスター化されたデータを取得します。
K-meansクラスタリング
K-meansクラスタリングは、重要なクラスタリングアルゴリズムです。k-meansクラスタリングアルゴリズムのkは、データが分割されるクラスターの数を表します。たとえば、このアルゴリズムに指定されたk値は3として選択され、アルゴリズムはデータを3つのクラスターに分割します。
各オブジェクトは、空間内のベクトルとして表されます。最初に、k個のポイントがアルゴリズムによってランダムに選択され、中心として扱われます。各中心に最も近いすべてのオブジェクトがクラスター化されます。距離測定にはいくつかのアルゴリズムがあり、ユーザーは必要なものを選択する必要があります。
Creating Vector Files
キャノピーアルゴリズムとは異なり、k-meansアルゴリズムでは入力としてベクターファイルが必要であるため、ベクターファイルを作成する必要があります。
シーケンスファイル形式からベクターファイルを生成するために、Mahoutは seq2parse ユーティリティ。
以下に示すオプションのいくつかは seq2parseユーティリティ。これらのオプションを使用してベクターファイルを作成します。
$MAHOUT_HOME/bin/mahout seq2sparse
--analyzerName (-a) analyzerName The class name of the analyzer
--chunkSize (-chunk) chunkSize The chunkSize in MegaBytes.
--output (-o) output The directory pathname for o/p
--input (-i) input Path to job input directory.
ベクトルを作成した後、k-meansアルゴリズムに進みます。k-meansジョブを実行するための構文は次のとおりです。
mahout kmeans -i <input vectors directory>
-c <input clusters directory>
-o <output working directory>
-dm <Distance Measure technique>
-x <maximum number of iterations>
-k <number of initial clusters>
K-meansクラスタリングジョブには、入力ベクトルディレクトリ、出力クラスターディレクトリ、距離測定、実行される最大反復回数、および入力データが分割されるクラスターの数を表す整数値が必要です。