1. 首頁
  2. 電影

基於Mahout 命令的電影聚類分析與實現論文

基於Mahout 命令的電影聚類分析與實現論文

摘要:研究使用mahout命令進行電影聚類分析,介紹了聚類演算法、分類演算法及推薦過濾演算法等。同時結合mahout的特點,分別呈現兩種演算法即K-means與Canopy+K-means的原理,並採用從電影網站中爬取的幾十條資料對演算法進行測試與實現,兩種演算法最終都直觀地得出此聚類所代表的電影資訊。

關鍵詞:Mahout;聚類分析;大資料;電影

中圖分類號:TP393文獻標誌碼:A文章編號:1006-8228(2017)11-54-04

0引言

網際網路娛樂在大資料浪潮中迎來了新的挑戰,如何在各種網站海量的影片中找到感興趣的內容就成了新的難題。中國電影產業正處於高速發展期,據中國電影產業《2017-2022年中國電影行業深度調研及投資前景預測報告》資料中顯示:國產電影2016年我國共生產故事片772部,動畫片49部,科教片67部,記錄片32部,特種片24部,總計944部,超過前十年峰值,2016年國產電影放映率僅40%,相比美國100%上映率,資源嚴重浪費[1]。電影票房慘淡可能導致前期的巨大投入無法收回,因此電影人必須謹慎考慮每個因素對票房的影響,到底什麼型別的電影才能賣得好?這是本文資料分析要解決的問題。電影網站上的資料非常龐大,抓取到的文字資訊甚至需要以TB為單位來儲存,所以在進行大資料量的程式碼實現之前,要先對小資料集進行測試,以驗證演算法的可行性。

1聚類概述

聚類顧名思義是將同一類事物或資料歸到同一型別中,同一個類中的物件有很大的相似性,不同類之間的物件有很大的差異性。在機器學習中,要把大量的資料劃分為不同的型別通常採用建模的方法。聚類是搜尋類的無事先規則與分類的標準的學習過程。與分類不同,聚類是無規則的學習,不依賴預先定義的類或帶類標記的例項,由聚類學習演算法自動確定標記,而分類學習的例項或資料物件有類別標記[2]。聚類分析是一種探索性的分析,不同分析者對於同一組資料進行聚類分析,所得到的聚類數未必一致。

2應用背景

本文將從電影網站上爬取到的電影型別匹配到所建資料庫中。利用資料清洗中的去重,將沒有匹配到任何電影型別資訊視為無用文字資料將其刪除。最後保留電影名稱,匹配到的型別,詞與詞之間用空格分開。然而這樣的文字向量是無法在分散式檔案系統上進行處理的,因此需要透過TF-IDF加權的方法,將詞文字進行轉換,得到可處理的資料向量。

TF-IDF是一種統計方法,即一個詞語在在一篇文章中或一個檔案集或一個語料庫中出現次數越多,同時在所有文件中出現次數越少,越能夠代表該文章。字詞的重要性隨著它在檔案中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。TF詞頻(termfrequency)是指某一個給定的詞語在該檔案中出現的次數[4]。詞頻公式如圖1所示。

單純使用TF還不足,需要進行權重的設計即:一個詞語預測主題的能力越強則權重越大,反之權重越小。IDF逆向檔案頻率(inversedocumentfrequency)就是在完成這樣的工作,某一特定詞語的IDF,是由總的`檔案數目除以包含該詞語之檔案的數目,再將得到的值用log取對數得到。逆文件頻率公式如圖2所示。

在IDF中用一個語料庫(corpus)來模擬語言的使用環境。如果一個詞很常見,那麼分母就越大,逆文件頻率就越小越接近0。為避免分母為0用加1法即:所有文件都不包含該詞。TF-IDF公式如圖3所示。

從圖3可得出,TF-IDF與一個詞在文件中的出現次數成正比,與該詞在整個語言中的出現次數成反比,即提取關鍵詞的演算法為計算出文件的每個詞的TF-IDF值,然後按降序排列,取排在最前面的幾個詞。

3Mahout演算法

Mahout演算法大致分為聚類、協同過濾和分類三種。聚類分析是當下科學研究中一個很活躍的領域,常用聚類演算法有:canopy聚類,k均值演算法(k-means),模糊k均值,層次聚類,LDA聚類等[3]。Mahout演算法分析有以下幾種:

3.1K-means聚類

在將電影型別向量轉換為HDFS可處理的資料後,便可以進行基於文字詞頻與TF-IDF的k-means聚類。

K-means演算法是基於劃分的聚類方法,首先選擇使用者指定的引數個數K為初始質心,然後將事先輸入的n個數據物件劃分為k個聚類以便使所獲得的聚類滿足[5]:同一聚類中的物件相似度較高,而不同聚類中的物件相似度較低。聚類相似度是利用各聚類中物件的均值所獲得一個“中心目標”來進行計算的。通常採用以下方法來實現:①與層次聚類結合;②穩定性方法;③系統演化方法。

K-means演算法試圖找到使平凡誤差準則函式最小的簇,當潛在的簇形狀是凸面的,簇與簇之間區別較明顯,當簇的大小相近時,其聚類結果較理想。該演算法時間複雜度為O(tKmn),與樣本數量線性相關,所以,對於處理大資料集合,該演算法效率高,且伸縮性較好。但該演算法除了要事先確定簇數K和初始聚類中心外,經常以區域性最優結束,同時對“噪聲”和孤立點敏感[6],並且該方法不適用於發現非凸面形狀的簇或大小差別很大的簇。

3.2Canopy演算法

Canopy主要思想是把聚類分為兩個階段:第一階段,透過使用一個簡單、快捷的距離計算方法把資料分為可重疊的子集,稱為“canopy”;第二階段,透過使用一個精準、嚴密的距離計算方法來計算出現階段中同一個canopy的所有資料向量的距離[7]。這種方式和聚類方式不同的地方在於使用了兩種距離計算方式,同時因為只計算了重疊部分的資料向量,所以達到了減少計算量的目的。

Canopy演算法的優勢在於可以透過第一階段的粗糙距離計算方法把資料劃入不同的可重疊的子集中,然後只計算在同一個重疊子集中的樣本資料向量來減少對於需要距離計算的樣本數量。

4演算法與實現

在影視網站上的資料十分龐大,本文從豆瓣網上收集了30條電影資訊,其中10條是戲曲型別電影,10條是愛情型別電影,10條是動作型別電影,每一個電影資訊都用一個txt檔案儲存,編碼格式為UTF-8。由於已知這30個測試資料集應聚成三類,將可直接進行k-means演算法的實現,也可以進行Canopy結合K-means的演算法實現,下面分別呈現兩種方法的程式碼與結果[8]。

4.1k-means實現

⑴環境準備

使用的Mahout版本為apache-mahout-distribution-

0.12.2,使用的Hadoop版本為hadoop-2.4.1。

將30個txt檔案壓縮後上傳至遠端虛擬機器,解壓至一個本地目錄。如/tmp/movie/txt。使用Mahout命令將文字檔案轉換成SequenceFile,同時會將這麼多小文字檔案合併成一個Sequence,執行成功後,在本地的/tmp/movie/txt-seq目錄下生成了chunk-0檔案,該檔案格式為SequenceFile,將文字檔案轉換成SequenceFile,Mahout提供了相應API。將轉換好的SequenceFile上傳至分散式檔案系統上的/tmp/movie/txt-seq/目錄中。

⑵解析SequenceFile,轉換成向量表示

Mahout聚類演算法使用向量空間(Vectors)作為資料,接下來在Hadoop上,使用之前生成的SequenceFile,轉換成向量表示。

⑶執行K-Means

使用tf-vectors作為輸入檔案,即根據關鍵詞出現的頻率來進行聚類。

輸出1,初始隨機選擇的中心點;

輸出2,聚類過程、結果。

⑷檢視聚類結果

由於Mahout的clusterdump命令只能在本地執行,因此需要將聚類結果從HDFS下載到本地,其執行命令如表1所示。

將檔案下載到PC端本地並用notepad+檢視dump出來的結果如表2所示。

可以看出,一共有三個TopTerms,即聚成了三類:第一個聚類,文字的形式是詞=>詞頻,在每個聚類中,出現次數越高的詞排名越靠前;第二個聚類,排名最高的詞彙是“動作型別”詞頻為0.9,說明在K-means聚類下,該聚類收斂的效果非常好;第三個聚類,排名在第四位的是“戲曲型別”電影,說明該聚類是關於戲曲型別的,但是電影型別並不是詞頻為0.9,說明該聚類中還有其他電影的資訊,而對比第一個聚類,發現第三個聚類中的確有一部分是重合的,說明聚類結果看似不理想,卻完全符合現實情況[9]。在執行K-means時使用的是tf-vectors,即基於詞頻進行聚類,這是當已經提取了關鍵詞後,每一個詞都是重要的,不會存在高頻無用詞,若使用tfidf-vectors,即基於詞頻-逆向檔案頻率進行測試,執行命令/結果幾乎相近。此處略。這說明TF-IDF相比TF加權方法,更能提取出文字的特徵值,從而使聚類效果理想。

4.2Canopy+K-means實現

K-means演算法是基於TF與TF-IDF加權方法的實現,Mahout的K-means演算法提供了另一種選擇,即如果提供了初始化聚類中心,隨機從輸入向量中生成K個點,採用canopy演算法將能得到初始化聚類中心,並且mahout也有相應封裝好的jar包,直接從命令列進行操作[10]。

⑴執行Canopy

使用tfidf-vectors進行測試,因為TF-IDF方法更為有效地生成了一個聚類結果,這個聚類結果將直接用作初始化聚類中心。

⑵執行K-Means

這裡只採用tfidf-vectors作為輸入向量,並且在-c後面用canopy聚類結果。執行命令如表3所示。

⑶檢視聚類結果

用dump將聚類結果下來,下載到PC端使用Notepad++檢視如表4所示。

以上資料顯示Canopy+K-means演算法起到很好的聚類結果,雖然關鍵詞的排序以及權重與K-means的結果有細微不同,這正說明了兩種方法過程的不同,但都收斂到了很好的聚類效果。

5結束語

本文闡述了K-means演算法適合於已知聚類數的測試資料;Canopy+K-means在基於TF-IDF加權技術下適用於對未知聚類數的情況進行聚類。兩個方法最後都能有效地將電影型別排序出聚類結果,可以直觀地看出這一個聚類代表的是哪一種電影型別[11]。每一個聚類中,根據權重的排序也可以很直觀地得到與該電影關聯度最大的型別。這樣的對映是來源於數以萬計的大資料中電影資訊的綜合評估,是客觀的,是符合大資料探勘機器學習核心理念的。本文用的是測試資料的實現,由於實際應用中資料的複雜性,多樣性,特別是對於多維資料和大型資料的情況下,引數會有變化。大量無關的屬性使得在所有維中存在類的可能性幾乎為零,同一部電影會出現許多不同的型別,會使電影型別的權重下降,導致無法在聚類結果中直觀地看出這一類代表的是哪一類電影,因此需要人為地提高電影型別的權重,讓電影型別在文字詞向量中重複若干次,相當於提高詞頻,而逆向詞頻頻率不變,以此提高電影型別的TF-IDF權重。