Mahout - 聚類



聚類是根據專案之間的相似性,將給定集合中的元素或專案組織成組的過程。例如,與線上新聞釋出相關的應用程式使用聚類對其新聞文章進行分組。

聚類的應用

  • 聚類廣泛應用於許多應用中,例如市場研究、模式識別、資料分析和影像處理。

  • 聚類可以幫助營銷人員在其客戶群中發現不同的群體。他們可以根據購買模式來描述其客戶群體。

  • 在生物學領域,它可以用於推導植物和動物分類法,對具有相似功能的基因進行分類,並深入瞭解群體中固有的結構。

  • 聚類有助於識別地球觀測資料庫中相似土地利用區域。

  • 聚類還有助於對網路上的文件進行分類以進行資訊發現。

  • 聚類用於異常值檢測應用程式,例如信用卡欺詐檢測。

  • 作為一種資料探勘功能,聚類分析可作為一種工具來深入瞭解資料的分佈,以觀察每個聚類的特徵。

使用 Mahout,我們可以對給定的資料集進行聚類。所需的步驟如下:

  • 演算法 您需要選擇合適的聚類演算法來對聚類的元素進行分組。

  • 相似性和相異性 您需要制定規則來驗證新遇到的元素與組中元素之間的相似性。

  • 停止條件 需要一個停止條件來定義不需要聚類的點。

聚類過程

要對給定資料進行聚類,您需要:

  • 啟動 Hadoop 伺服器。建立在 Hadoop 檔案系統中儲存檔案的所需目錄。(為輸入檔案、序列檔案和(在 canopy 情況下)聚類輸出建立目錄)。

  • 將輸入檔案從 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 介面驗證目錄是否已建立:https://:50070/

它會給出如下所示的輸出

Input Files Directories

將輸入檔案複製到 HDFS

現在,將輸入資料檔案從 Linux 檔案系統複製到 Hadoop 檔案系統中的 mahout_data 目錄,如下所示。假設您的輸入檔案是 mydata.txt,它位於 /home/Hadoop/data/ 目錄中。

$ hadoop fs -put /home/Hadoop/data/mydata.txt /mahout_data/

準備序列檔案

Mahout 提供了一個實用程式,用於將給定的輸入檔案轉換為序列檔案格式。此實用程式需要兩個引數。

  • 包含原始資料所在的輸入檔案目錄。
  • 要儲存聚類資料的輸出檔案目錄。

以下是 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://:9000/mahout_seq/
-o hdfs://:9000/clustered_data/

聚類演算法

Mahout 支援兩種主要的聚類演算法,即

  • Canopy 聚類
  • K 均值聚類

Canopy 聚類

Canopy 聚類是一種簡單快速的 Mahout 聚類技術。物件將被視為平面空間中的點。此技術通常用作其他聚類技術(如 k 均值聚類)的初始步驟。您可以使用以下語法執行 Canopy 作業

mahout canopy -i <input vectors directory>
-o <output directory>
-t1 <threshold value 1>
-t2 <threshold value 2>

Canopy 作業需要一個包含序列檔案的輸入檔案目錄和一個要儲存聚類資料的輸出目錄。

示例

mahout canopy -i hdfs://:9000/mahout_seq/mydata.seq
-o hdfs://:9000/clustered_data
-t1 20
-t2 30 

您將在給定的輸出目錄中獲得生成的聚類資料。

K 均值聚類

K 均值聚類是一種重要的聚類演算法。k 均值聚類演算法中的 k 表示資料將被劃分成的聚類數。例如,如果為此演算法指定的 k 值選擇為 3,則該演算法將資料劃分為 3 個聚類。

每個物件都將表示為空間中的向量。最初,演算法將隨機選擇 k 個點並將其視為中心,每個最接近每個中心的物體都會被聚類。有幾種距離度量演算法,使用者應該選擇所需的演算法。

建立向量檔案

  • 與 Canopy 演算法不同,k 均值演算法需要向量檔案作為輸入,因此您必須建立向量檔案。

  • 為了從序列檔案格式生成向量檔案,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 均值演算法。執行 k 均值作業的語法如下:

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 均值聚類作業需要輸入向量目錄、輸出聚類目錄、距離度量、要執行的最大迭代次數以及一個表示輸入資料將被劃分為的聚類數的整數值。

廣告
© . All rights reserved.