範文齋

位置:首頁 > 校園範文 > 電影

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

電影1.18W

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

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

關鍵詞: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權重。