Mahout-clustering
Mahout-クラスタリング
クラスタリングは、特定のコレクションの要素またはアイテムを、アイテム間の類似性に基づいてグループに編成する手順です。 たとえば、オンラインニュースパブリッシングに関連するアプリケーションは、クラスタリングを使用してニュース記事をグループ化します。
クラスタリングの応用
- クラスタリングは、市場調査、パターン認識、データ分析、画像処理などの多くのアプリケーションで広く使用されています。
- クラスタリングは、マーケティング担当者が顧客ごとに異なるグループを発見するのに役立ちます。 また、購入パターンに基づいて顧客グループを特徴付けることができます。
- 生物学の分野では、植物および動物の分類法を導き出すために使用できます。 同様の機能を持つ遺伝子を分類し、集団に固有の構造に関する洞察を得ます。
- クラスタリングは、地球内の同様の土地利用の地域の特定に役立ちます 観測データベース。
- クラスタリングは、情報を得るためにWeb上のドキュメントを分類するのにも役立ちます 発見。
- クラスタリングは、クレジットの検出などの異常値検出アプリケーションで使用されます カード詐欺。
- クラスター分析は、データマイニング機能として、以下に関する洞察を得るためのツールとして機能します。 各クラスターの特性を観察するためのデータの分布。
Mahoutを使用すると、特定のデータセットをクラスター化できます。 必要な手順は次のとおりです。
- *アルゴリズム*適切なクラスタリングアルゴリズムを選択してグループ化する必要があります クラスターの要素。
- *類似性と非類似性*を確認するには、ルールを設定する必要があります 新しく出現した要素とグループ内の要素の類似性。
- *停止条件*クラスタリングが不要なポイントを定義するには、停止条件が必要です。
クラスタリングの手順
特定のデータをクラスター化するには、次の操作が必要です-
- 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のhadoop Webインターフェイスを使用して、ディレクトリが作成されているかどうかを確認できます- 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 *ユーティリティのヘルププロンプトを示します。
ステップ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>
例
mahout seqdirectory
-i hdfs://localhost:9000/mahout_seq/
-o hdfs://localhost:9000/clustered_data/
クラスタリングアルゴリズム
Mahoutは、クラスタリング用の2つの主要なアルゴリズムをサポートしています。
- キャノピークラスタリング
- K平均クラスタリング
キャノピークラスタリング
キャノピークラスタリングは、クラスタリングの目的でMahoutが使用するシンプルで高速な手法です。 オブジェクトは、プレーンスペース内のポイントとして扱われます。 この手法は、k-meansクラスタリングなどの他のクラスタリング手法の最初のステップとしてよく使用されます。 次の構文を使用して、Canopyジョブを実行できます。
mahout canopy -i <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>
Canopyジョブには、シーケンスファイルを含む入力ファイルディレクトリと、クラスター化されたデータを保存する出力ディレクトリが必要です。
例
mahout canopy -i hdfs://localhost:9000/mahout_seq/mydata.seq
-o hdfs://localhost:9000/clustered_data
-t1 20
-t2 30
指定された出力ディレクトリに生成されたクラスター化データを取得します。
K平均クラスタリング
K-meansクラスタリングは重要なクラスタリングアルゴリズムです。 k-meansクラスタリングアルゴリズムのkは、データを分割するクラスターの数を表します。 たとえば、このアルゴリズムに指定されたk値は3として選択され、アルゴリズムはデータを3つのクラスターに分割します。
各オブジェクトは、空間内のベクトルとして表されます。 最初は、アルゴリズムによってk個のポイントがランダムに選択され、センターとして扱われ、各センターに最も近いすべてのオブジェクトがクラスター化されます。 距離測定にはいくつかのアルゴリズムがあり、ユーザーは必要なものを選択する必要があります。
ベクターファイルの作成
- Canopyアルゴリズムとは異なり、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平均クラスタリングジョブには、入力ベクトルディレクトリ、出力クラスターディレクトリ、距離測定、実行する最大反復数、および入力データを分割するクラスターの数を表す整数値が必要です。