葉惠仙+黃偉剛
摘 要: 研究使用mahout命令進(jìn)行電影聚類分析,介紹了聚類算法、分類算法及推薦過濾算法等。同時(shí)結(jié)合mahout的特點(diǎn),分別呈現(xiàn)兩種算法即K-means與Canopy+K-means的原理,并采用從電影網(wǎng)站中爬取的幾十條數(shù)據(jù)對(duì)算法進(jìn)行測(cè)試與實(shí)現(xiàn),兩種算法最終都直觀地得出此聚類所代表的電影信息。
關(guān)鍵詞: Mahout; 聚類分析; 大數(shù)據(jù); 電影
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2017)11-54-04
Implementing the clustering analysis of movies with Mahout
Ye Huixian, Huang Weigang
(Fujian Agricultural Vocational and Technical College, Fuzhou, Fujian 350007, China)
Abstract: This paper studies the clustering analysis of movies using mahout, and introduces the clustering algorithm, classification algorithm and recommendation filtering algorithm. At the same time, combining with the characteristics of mahout, shows the principle of two kinds of algorithms respectively, i.e. K-means and Canopy+K-means, and the algorithms are tested and implemented with dozens of data climbed from movie website, both algorithms intuitively show the information of the movies represented by the cluster.
Key words: Mahout; clustering; big data; movie
0 引言
互聯(lián)網(wǎng)娛樂在大數(shù)據(jù)浪潮中迎來(lái)了新的挑戰(zhàn),如何在各種網(wǎng)站海量的視頻中找到感興趣的內(nèi)容就成了新的難題。中國(guó)電影產(chǎn)業(yè)正處于高速發(fā)展期,據(jù)中國(guó)電影產(chǎn)業(yè)《2017-2022年中國(guó)電影行業(yè)深度調(diào)研及投資前景預(yù)測(cè)報(bào)告》數(shù)據(jù)中顯示:國(guó)產(chǎn)電影2016年我國(guó)共生產(chǎn)故事片772部,動(dòng)畫片49部,科教片67部,記錄片32部,特種片24部,總計(jì)944部,超過前十年峰值,2016年國(guó)產(chǎn)電影放映率僅40%,相比美國(guó)100%上映率,資源嚴(yán)重浪費(fèi)[1]。電影票房慘淡可能導(dǎo)致前期的巨大投入無(wú)法收回,因此電影人必須謹(jǐn)慎考慮每個(gè)因素對(duì)票房的影響,到底什么類型的電影才能賣得好?這是本文數(shù)據(jù)分析要解決的問題。電影網(wǎng)站上的數(shù)據(jù)非常龐大,抓取到的文本信息甚至需要以TB為單位來(lái)存儲(chǔ),所以在進(jìn)行大數(shù)據(jù)量的代碼實(shí)現(xiàn)之前,要先對(duì)小數(shù)據(jù)集進(jìn)行測(cè)試,以驗(yàn)證算法的可行性。
1 聚類概述
聚類顧名思義是將同一類事物或數(shù)據(jù)歸到同一類型中,同一個(gè)類中的對(duì)象有很大的相似性,不同類之間的對(duì)象有很大的差異性。在機(jī)器學(xué)習(xí)中,要把大量的數(shù)據(jù)劃分為不同的類型通常采用建模的方法。聚類是搜索類的無(wú)事先規(guī)則與分類的標(biāo)準(zhǔn)的學(xué)習(xí)過程。與分類不同,聚類是無(wú)規(guī)則的學(xué)習(xí),不依賴預(yù)先定義的類或帶類標(biāo)記的實(shí)例,由聚類學(xué)習(xí)算法自動(dòng)確定標(biāo)記,而分類學(xué)習(xí)的實(shí)例或數(shù)據(jù)對(duì)象有類別標(biāo)記[2]。聚類分析是一種探索性的分析,不同分析者對(duì)于同一組數(shù)據(jù)進(jìn)行聚類分析,所得到的聚類數(shù)未必一致。
2 應(yīng)用背景
本文將從電影網(wǎng)站上爬取到的電影類型匹配到所建數(shù)據(jù)庫(kù)中。利用數(shù)據(jù)清洗中的去重,將沒有匹配到任何電影類型信息視為無(wú)用文本數(shù)據(jù)將其刪除。最后保留電影名稱,匹配到的類型,詞與詞之間用空格分開。然而這樣的文本向量是無(wú)法在分布式文件系統(tǒng)上進(jìn)行處理的,因此需要通過TF-IDF加權(quán)的方法,將詞文本進(jìn)行轉(zhuǎn)換,得到可處理的數(shù)據(jù)向量。
TF-IDF是一種統(tǒng)計(jì)方法,即一個(gè)詞語(yǔ)在在一篇文章中或一個(gè)文件集或一個(gè)語(yǔ)料庫(kù)中出現(xiàn)次數(shù)越多,同時(shí)在所有文檔中出現(xiàn)次數(shù)越少,越能夠代表該文章。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時(shí)會(huì)隨著它在語(yǔ)料庫(kù)中出現(xiàn)的頻率成反比下降。TF詞頻(term frequency)是指某一個(gè)給定的詞語(yǔ)在該文件中出現(xiàn)的次數(shù)[4]。詞頻公式如圖1所示。
單純使用TF還不足,需要進(jìn)行權(quán)重的設(shè)計(jì)即:一個(gè)詞語(yǔ)預(yù)測(cè)主題的能力越強(qiáng)則權(quán)重越大,反之權(quán)重越小。IDF逆向文件頻率(inverse document frequency)就是在完成這樣的工作,某一特定詞語(yǔ)的IDF,是由總的文件數(shù)目除以包含該詞語(yǔ)之文件的數(shù)目,再將得到的值用log取對(duì)數(shù)得到。逆文檔頻率公式如圖2所示。
在IDF中用一個(gè)語(yǔ)料庫(kù)(corpus)來(lái)模擬語(yǔ)言的使用環(huán)境。如果一個(gè)詞很常見,那么分母就越大,逆文檔頻率就越小越接近0。為避免分母為0用加1法即:所有文檔都不包含該詞。TF-IDF公式如圖3所示。
從圖3可得出,TF-IDF與一個(gè)詞在文檔中的出現(xiàn)次數(shù)成正比,與該詞在整個(gè)語(yǔ)言中的出現(xiàn)次數(shù)成反比,即提取關(guān)鍵詞的算法為計(jì)算出文檔的每個(gè)詞的TF-IDF值,然后按降序排列,取排在最前面的幾個(gè)詞。
3 Mahout算法
Mahout算法大致分為聚類、協(xié)同過濾和分類三種。聚類分析是當(dāng)下科學(xué)研究中一個(gè)很活躍的領(lǐng)域,常用聚類算法有:canopy聚類,k均值算法(k-means),模糊k均值,層次聚類,LDA聚類等[3]。Mahout算法分析有以下幾種:endprint
3.1 K-means聚類
在將電影類型向量轉(zhuǎn)換為HDFS可處理的數(shù)據(jù)后, 便可以進(jìn)行基于文本詞頻與TF-IDF的k-means聚類。
K-means算法是基于劃分的聚類方法,首先選擇用戶指定的參數(shù)個(gè)數(shù)K為初始質(zhì)心,然后將事先輸入的n個(gè)數(shù)據(jù)對(duì)象劃分為k個(gè)聚類以便使所獲得的聚類滿足[5]:同一聚類中的對(duì)象相似度較高,而不同聚類中的對(duì)象相似度較低。聚類相似度是利用各聚類中對(duì)象的均值所獲得一個(gè)“中心目標(biāo)”來(lái)進(jìn)行計(jì)算的。通常采用以下方法來(lái)實(shí)現(xiàn):①與層次聚類結(jié)合;②穩(wěn)定性方法;③系統(tǒng)演化方法。
K-means算法試圖找到使平凡誤差準(zhǔn)則函數(shù)最小的簇,當(dāng)潛在的簇形狀是凸面的,簇與簇之間區(qū)別較明顯,當(dāng)簇的大小相近時(shí),其聚類結(jié)果較理想。該算法時(shí)間復(fù)雜度為O(tKmn),與樣本數(shù)量線性相關(guān),所以,對(duì)于處理大數(shù)據(jù)集合,該算法效率高,且伸縮性較好。但該算法除了要事先確定簇?cái)?shù)K和初始聚類中心外,經(jīng)常以局部最優(yōu)結(jié)束,同時(shí)對(duì)“噪聲”和孤立點(diǎn)敏感[6],并且該方法不適用于發(fā)現(xiàn)非凸面形狀的簇或大小差別很大的簇。
3.2 Canopy算法
Canopy主要思想是把聚類分為兩個(gè)階段:第一階段,通過使用一個(gè)簡(jiǎn)單、快捷的距離計(jì)算方法把數(shù)據(jù)分為可重疊的子集,稱為“canopy”;第二階段,通過使用一個(gè)精準(zhǔn)、嚴(yán)密的距離計(jì)算方法來(lái)計(jì)算出現(xiàn)階段中同一個(gè)canopy的所有數(shù)據(jù)向量的距離[7]。這種方式和聚類方式不同的地方在于使用了兩種距離計(jì)算方式,同時(shí)因?yàn)橹挥?jì)算了重疊部分的數(shù)據(jù)向量,所以達(dá)到了減少計(jì)算量的目的。
Canopy算法的優(yōu)勢(shì)在于可以通過第一階段的粗糙距離計(jì)算方法把數(shù)據(jù)劃入不同的可重疊的子集中,然后只計(jì)算在同一個(gè)重疊子集中的樣本數(shù)據(jù)向量來(lái)減少對(duì)于需要距離計(jì)算的樣本數(shù)量。
4 算法與實(shí)現(xiàn)
在影視網(wǎng)站上的數(shù)據(jù)十分龐大,本文從豆瓣網(wǎng)上收集了30條電影信息,其中10條是戲曲類型電影,10條是愛情類型電影,10條是動(dòng)作類型電影,每一個(gè)電影信息都用一個(gè)txt文件保存,編碼格式為UTF-8。由于已知這30個(gè)測(cè)試數(shù)據(jù)集應(yīng)聚成三類,將可直接進(jìn)行k-means算法的實(shí)現(xiàn),也可以進(jìn)行Canopy結(jié)合K-means的算法實(shí)現(xiàn),下面分別呈現(xiàn)兩種方法的代碼與結(jié)果[8]。
4.1 k-means實(shí)現(xiàn)
⑴ 環(huán)境準(zhǔn)備
使用的Mahout版本為apache-mahout-distribution-
0.12.2,使用的Hadoop版本為hadoop-2.4.1。
將30個(gè)txt文件壓縮后上傳至遠(yuǎn)程虛擬機(jī),解壓至一個(gè)本地目錄。如/tmp/movie/txt。使用Mahout命令將文本文件轉(zhuǎn)換成SequenceFile,同時(shí)會(huì)將這么多小文本文件合并成一個(gè)Sequence,執(zhí)行成功后,在本地的/tmp/movie/txt-seq目錄下生成了chunk-0文件,該文件格式為SequenceFile,將文本文件轉(zhuǎn)換成SequenceFile,Mahout提供了相應(yīng)API。將轉(zhuǎn)換好的SequenceFile上傳至分布式文件系統(tǒng)上的/tmp/movie/txt-seq/目錄中。
⑵ 解析SequenceFile,轉(zhuǎn)換成向量表示
Mahout聚類算法使用向量空間(Vectors)作為數(shù)據(jù),接下來(lái)在Hadoop上,使用之前生成的SequenceFile,轉(zhuǎn)換成向量表示。
⑶ 運(yùn)行K-Means
使用tf-vectors作為輸入文件,即根據(jù)關(guān)鍵詞出現(xiàn)的頻率來(lái)進(jìn)行聚類。
輸出1,初始隨機(jī)選擇的中心點(diǎn);
輸出2,聚類過程、結(jié)果。
⑷ 查看聚類結(jié)果
由于Mahout的clusterdump命令只能在本地運(yùn)行,因此需要將聚類結(jié)果從HDFS下載到本地,其運(yùn)行命令如表1所示。
將文件下載到PC端本地并用notepad+查看dump出來(lái)的結(jié)果如表2所示。
可以看出,一共有三個(gè)Top Terms,即聚成了三類:第一個(gè)聚類,文本的形式是詞=>詞頻,在每個(gè)聚類中,出現(xiàn)次數(shù)越高的詞排名越靠前;第二個(gè)聚類,排名最高的詞匯是“動(dòng)作類型”詞頻為0.9,說(shuō)明在K-means聚類下,該聚類收斂的效果非常好;第三個(gè)聚類,排名在第四位的是“戲曲類型”電影,說(shuō)明該聚類是關(guān)于戲曲類型的,但是電影類型并不是詞頻為0.9,說(shuō)明該聚類中還有其他電影的信息,而對(duì)比第一個(gè)聚類,發(fā)現(xiàn)第三個(gè)聚類中的確有一部分是重合的,說(shuō)明聚類結(jié)果看似不理想,卻完全符合現(xiàn)實(shí)情況[9]。在運(yùn)行K-means時(shí)使用的是tf-vectors,即基于詞頻進(jìn)行聚類,這是當(dāng)已經(jīng)提取了關(guān)鍵詞后,每一個(gè)詞都是重要的,不會(huì)存在高頻無(wú)用詞,若使用tfidf-vectors,即基于詞頻-逆向文件頻率進(jìn)行測(cè)試,運(yùn)行命令/結(jié)果幾乎相近。此處略。這說(shuō)明TF-IDF相比TF加權(quán)方法,更能提取出文本的特征值,從而使聚類效果理想。
4.2 Canopy+K-means實(shí)現(xiàn)
K-means算法是基于TF與TF-IDF加權(quán)方法的實(shí)現(xiàn),Mahout的K-means算法提供了另一種選擇,即如果提供了初始化聚類中心,隨機(jī)從輸入向量中生成K個(gè)點(diǎn),采用canopy算法將能得到初始化聚類中心,并且mahout也有相應(yīng)封裝好的jar包,直接從命令行進(jìn)行操作[10]。
⑴ 運(yùn)行Canopy
使用tfidf-vectors進(jìn)行測(cè)試,因?yàn)門F-IDF方法更為有效地生成了一個(gè)聚類結(jié)果,這個(gè)聚類結(jié)果將直接用作初始化聚類中心。
⑵ 運(yùn)行K-Means
這里只采用tfidf-vectors作為輸入向量,并且在-c后面用canopy聚類結(jié)果。運(yùn)行命令如表3所示。
⑶ 查看聚類結(jié)果endprint
用dump將聚類結(jié)果下來(lái),下載到PC端使用Notepad++查看如表4所示。
以上數(shù)據(jù)顯示Canopy+K-means算法起到很好的聚類結(jié)果,雖然關(guān)鍵詞的排序以及權(quán)重與K-means的結(jié)果有細(xì)微不同,這正說(shuō)明了兩種方法過程的不同,但都收斂到了很好的聚類效果。
5 結(jié)束語(yǔ)
本文闡述了K-means算法適合于已知聚類數(shù)的測(cè)試數(shù)據(jù);Canopy+K-means在基于TF-IDF加權(quán)技術(shù)下適用于對(duì)未知聚類數(shù)的情況進(jìn)行聚類。兩個(gè)方法最后都能有效地將電影類型排序出聚類結(jié)果,可以直觀地看出這一個(gè)聚類代表的是哪一種電影類型[11]。每一個(gè)聚類中,根據(jù)權(quán)重的排序也可以很直觀地得到與該電影關(guān)聯(lián)度最大的類型。這樣的映射是來(lái)源于數(shù)以萬(wàn)計(jì)的大數(shù)據(jù)中電影信息的綜合評(píng)估,是客觀的,是符合大數(shù)據(jù)挖掘機(jī)器學(xué)習(xí)核心理念的。本文用的是測(cè)試數(shù)據(jù)的實(shí)現(xiàn),由于實(shí)際應(yīng)用中數(shù)據(jù)的復(fù)雜性,多樣性,特別是對(duì)于多維數(shù)據(jù)和大型數(shù)據(jù)的情況下,參數(shù)會(huì)有變化。大量無(wú)關(guān)的屬性使得在所有維中存在類的可能性幾乎為零,同一部電影會(huì)出現(xiàn)許多不同的類型,會(huì)使電影類型的權(quán)重下降,導(dǎo)致無(wú)法在聚類結(jié)果中直觀地看出這一類代表的是哪一類電影,因此需要人為地提高電影類型的權(quán)重,讓電影類型在文本詞向量中重復(fù)若干次,相當(dāng)于提高詞頻,而逆向詞頻頻率不變,以此提高電影類型的TF-IDF權(quán)重。
參考文獻(xiàn)(References):
[1] 袁義龍.基于Mahout的電影推薦引擎的設(shè)計(jì)與實(shí)現(xiàn)[D].北京
郵電大學(xué)碩士學(xué)位論文,2014.
[2] 孫天昊,黎安能,李明,朱慶生.基于Hadoop分布式改進(jìn)聚類
協(xié)同過濾推薦算法研究[J].計(jì)算機(jī)工程與應(yīng)用,2015.15.
[3] 趙偉,李俊鋒,韓英,張紅濤.Hadoop云平臺(tái)下的基于用戶協(xié)
同過濾算法研究[J].計(jì)算機(jī)測(cè)量與控制,2015.6.
[4] 劉文峰,顧君忠,林欣,陳鵬.基于Hadoop和Mahout的大數(shù)
據(jù)管理分析系統(tǒng)[J].計(jì)算機(jī)應(yīng)用與軟件,2015.1.
[5] 路秋瑞.基于Hadoop的大規(guī)模數(shù)據(jù)排序算法研究[J].信息與
電腦(理論版),2015.17.
[6] 戴中華,盛鴻彬,王麗莉.基于Hadoop平臺(tái)的大數(shù)據(jù)分析與
處理[J].通訊世界,2015.6.
[7] 張效尉,陳亞峰,秦東霞.基于Hadoop的云存儲(chǔ)系統(tǒng)研究與
實(shí)現(xiàn)[J].商丘師范學(xué)院學(xué)報(bào),2015.9.
[8] 黃學(xué)峰.基于Hadoop的電影推薦系統(tǒng)研究與實(shí)現(xiàn)[D].南京
師范大學(xué),2015.
[9] 竇志成,文繼榮.大數(shù)據(jù)時(shí)代的互聯(lián)網(wǎng)分析引擎[J].大數(shù)據(jù),
2015.3.
[10] 路小瑞.基于Hadoop平臺(tái)的職位推薦系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].
上海交通大學(xué)碩士學(xué)位論文,2015.
[11] 李龍飛.基于Hadoop+Mahout的智能終端云應(yīng)用推薦引
擎的研究與實(shí)現(xiàn)[D].電子科技大學(xué)碩士學(xué)位論文,2013.endprint