本發(fā)明涉及一種基于mahout的機器學習服務組裝方法。
背景技術:
如今人類社會每天產生和存儲的數據量越來越龐大,同時還伴隨著用戶越來多樣化的數據分析需求。如何簡單、快速、有效地構建一個能夠處理大規(guī)模數據的機器學習流程,已經成為一個目前亟待解決的需求。mahout是建立在hadoop之上的開源分布式機器學習算法庫,mahout的出現(xiàn)解決了傳統(tǒng)的機器學習庫存在的缺少活躍技術社區(qū)、擴展性差、無法處理分布式海量數據以及不開源等缺陷。但由于mahout提供的機器學習算法眾多,每個算法又擁有少則幾個多則數十個的可調整參數,所以在hadoop平臺上使用mahout進行數據挖掘仍需要非常高的學習成本。
技術實現(xiàn)要素:
為解決上述問題,本發(fā)明提供一種復用視角下的mahout機器學習服務組裝方法。
本發(fā)明采用以下技術方案:一種基于mahout的機器學習服務組裝方法,其特征在于,包括以下步驟:步驟s1:將不同格式的數據進行預處理,轉換成模型訓練使用的特征向量;步驟s2:進行聚類模型、分類模型及協(xié)同過濾推薦模型訓練;步驟s3:對訓練完成的模型進行評估;步驟s4:步驟s1、步驟s2及步驟s3都屬于mahout算法庫中一系列算子,將這些算子進行統(tǒng)一的封裝,使其成為滿足oozie工作流平臺調用規(guī)范的一系列服務;步驟s5:根據用戶描述的所要使用的機器學習方法以及要進行處理的數據的格式,組裝出不止一條滿足需求的機器學習工作流路徑;步驟s6:當這些機器學習工作流在通過oozie在hadoop平臺上運行結束之后,每一條工作流的模型評估算子將會給出工作流的評估結果;用戶根據此評估結果,選擇機器學習工作流。
在本發(fā)明一實施例中,還包括步驟s7:將用戶已經選定的機器學習工作流存儲到知識庫中,以供該用戶或者具有相似需求的用戶在此之后復用。
在本發(fā)明一實施例中,步驟s1中的數據預處理包括:seqdirectory、lucene2seq、seq2sparse、arff.vector、split、splitdataset、describe及hive。
在本發(fā)明一實施例中,步驟s2中的聚類模型包括采用canopy、k-means、模糊k-means、lda和譜聚類五個聚類算法的聚類模型。
進一步的,步驟s2中的分類模型包括采用樸素貝葉斯算法及隨機森林算法的分類模型。
進一步的,步驟s2中的協(xié)同過濾推薦模型采用矩陣因式分解協(xié)同過濾算法及基于物品的協(xié)同過濾推薦算法的協(xié)同過濾推薦模型。
在本發(fā)明一實施例中,步驟s3中訓練完成的模型評估包括以下步驟:步驟s31:聚類模型評估采用簇間距離及聚類輸出檢查進行評估;步驟s32:分類模型評估采用正確率進行評估,若分類模型采用樸素貝葉斯算法,評估還包括混淆矩陣;步驟s33:協(xié)同過濾推薦模型評估采用模型的準確率進行評估。
與現(xiàn)有技術相比,本發(fā)明能夠快速有效地定制和調優(yōu)可復用的機器學習流程,從而能夠高效的在hadoop平臺上進行數據挖掘工作。
附圖說明
圖1為本發(fā)明的主要流程圖。
圖2為本發(fā)明機器學習工作流程圖。
圖3為本發(fā)明一實施例中根據需求生成的工作流程圖。
具體實施方式
下面結合附圖和具體實施例對本發(fā)明做進一步解釋說明。
一種基于mahout的機器學習服務組裝方法,其包括以下步驟:步驟s1:將不同格式的數據進行預處理,轉換成模型訓練使用的特征向量;步驟s2:進行聚類模型、分類模型及協(xié)同過濾推薦模型訓練;步驟s3:對訓練完成的模型進行評估;步驟s4:步驟s1、步驟s2及步驟s3都屬于mahout算法庫中一系列算子,將這些算子進行統(tǒng)一的封裝,使其成為滿足oozie工作流平臺調用規(guī)范的一系列服務;步驟s5:根據用戶描述的所要使用的機器學習方法以及要進行處理的數據的格式,組裝出不止一條滿足需求的機器學習工作流路徑;步驟s6:當這些機器學習工作流在通過oozie在hadoop平臺上運行結束之后,每一條工作流的模型評估算子將會給出工作流的評估結果;用戶根據此評估結果,選擇機器學習工作流。oozie是用于調度hadoop作業(yè)的javaweb應用程序。oozie將多個作業(yè)順序組合成一個邏輯工作單元。它與hadoop集成,并支持mapreduce、pig、hive、和sqoop等hadoop任務。
在本發(fā)明一實施例中,還包括步驟s7:將用戶已經選定的機器學習工作流存儲到知識庫中,以供該用戶或者具有相似需求的用戶在此之后復用。
在本發(fā)明一實施例中,步驟s1中的數據預處理包括:seqdirectory、lucene2seq、seq2sparse、arff.vector、split、splitdataset、describe及hive。
(1)seqdirectory
該算子用于將文本文檔的文件轉成sequencefile格式的文件。sequencefile文件是hadoop用來存儲二進制形式的key-value對而設計的一種序列化文件。建立在hadoop之上的mahout提供的機器學習算法輸入文件自然也就要求格式是sequencefile。seqdirectory算子在mahout中使用的命令是“seqdirectory”。我們通過對seqdirectory算子進行服務封裝,對用戶暴露了2個參數,除了輸出路徑外,“--input”參數用來指定需要處理的文件輸入路徑,由于這個算子是入口算子,所以用戶必須指定該參數。
(2)lucene2seq
與seqdirectory類似的,該算子用于將lucene索引文件轉成sequencefile格式文件,只是它的輸入是lucene分析器生成的索引文件。lucene2seq算子在mahout中使用的命令是“l(fā)ucene2seq”,封裝之后,我們向用戶暴露了lucene2seq的2個參數:“--input”參數用來指定需要處理的lucene索引文件輸入路徑,同樣作為入口算子也是必須指定的參數,另外一個是默認的輸出路徑參數。
(3)seq2sparse
seq2sparse算子是用來從文本文檔生成向量的重要工具,它讀取已經被seqdirectory算子轉換成sequencefile格式的文本數據,根據該數據先生成字典文件,然后基于字典再生成文本的特征向量。該向量的特征值加權方式可以是單純的tf詞頻向量,也可以是業(yè)界所流行的tf-idf向量,向量的加權方式通過“--weight”指定。seq2sparse算子在mahout中使用的命令是“seq2sparse”。seq2sparse算子可指定的參數有數十個,我們通過對其封裝,除了輸出路徑外,還對用戶暴露了5個參數:“--analyzername”用來指定所用的文本分詞器類名,默認值是lucene標準分析器;“--weight”用來指定所用的加權機制,tf為基于詞頻的加權,而tfidf為基于tf-idf的加權,該參數默認值為tfidf;“--minsupport”用于在整個集合中可放入詞典文件的詞的最小頻率,低于該頻率的詞被忽略,默認值為2;“--mindf”用于指定可放入詞典文件的詞所在文檔的最小個數,低于該頻率的詞被忽略,默認值為1;“--maxdfpercent”用于指定可放入詞典文件的詞所在文檔的最大個數,默認值為99。
(4)arff.vector
arff文件是weka默認的儲存數據集文件。每個arff文件對應一個二維表格。表格的各行是數據集的各個實例,各列是數據集的各個屬性。該算子用于從arff文件生成模型訓練算子可識別的特征向量。seq2sparse算子在mahout中使用的命令是“seq2sparse”。我們向用戶暴露了arff.vector的三個參數:“--input”參數用來指定arff文件輸入路徑,“--output”用來指定特征向量輸出路徑,“--dicout”用來指定向量字典文件的輸出路徑。其中“--input”是必選項,“--output”和“--dicout”是可選項。
(5)csv2vector
該算子用于將csv文件直接轉換成特征向量。它不是mahout庫中提供的可直接使用的命令,我們在mahout源碼的基礎上封裝了該功能。csv2vector算子使用的java類是“services.encapsulation.csv2vector”,在oozie封裝時,可將該類名寫于<main-class>之間進行調用。類似的,該算子暴露給用戶輸入文件路徑“--input”和輸出文件路徑“--output”兩個參數,其中輸入路徑必須指定,輸出路徑可選。
(6)splitdataset
對于mahout中的協(xié)同過濾推薦算法來說,通常輸入的文件的是帶有三列數據的csv格式文件。其中第一列為用戶的id,第二列為物品的id,第三列為用戶對于物品的偏好值。splitdataset算子用于將csv格式的輸入數據切分成訓練集和測試集兩部分。它在mahout中使用的命令是“splitdataset”。用戶可指定的參數有:“--input”指定文件輸入路徑,“--output”指定文件輸出路徑,“--trainingpercentage”指定用于訓練的數據的百分比,“--probepercentage”指定用于測試的數據的百分比。其中“--input”必須指定,其他三個是可選項,“--trainingpercentage”默認值為0.9,“--probepercentage”默認值為0.1。
(7)split
split算子用于把特征向量切分成訓練集和測試集。它在mahout中使用的命令是“split”。用戶可指定參數有五個:“--input”指定輸入路徑;“-trainingoutput”指定訓練集輸出路徑;“--testoutput”指定測試集輸出路徑;“--randomselectionsize”指定隨機選擇為測試數據的條數,默認值為100;“--randomselectionpct”指定隨機選擇為測試數據的百分比,默認值為0.2。除了“--input”必須指定外,其他四個參數均是可選項。
(8)describe
該算子用于標記arff數據集中的字段和目標變量,使得分類算法能夠識別數據集從而能夠做進一步的模型訓練。它在mahout中使用的命令是“describe”。用戶可調整的參數有三個:“--path”用于指定輸入數據路徑,“--file”用于指定生成的描述符文件的路徑,“--descriptor”用于描述字段的數據類型以及被選為目標變量的字段。除輸出路徑可選外,輸入數據在服務組裝階段從前面的算子獲取,“--descriptor”參數則必須由用戶指定。
(9)hiveaction
oozie支持hive任務節(jié)點,我們通過對hive服務的封裝,大大提高了本方法的數據預處理能力。hive在oozie中的動作節(jié)點代碼,${preprocess.hql}指定了hiveql腳本的文件路徑,該腳本中書寫了hive的sql語句。當用戶使用到hive動作節(jié)點時,hiveql命令腳本是必須指定的。
在本發(fā)明一實施例中,步驟s2中的聚類模型包括采用canopy、k-means、模糊k-means、lda和譜聚類五個聚類算法的聚類模型。
(1)canopy聚類
canopy聚類算法是一種無監(jiān)督的預聚類算法。它通常用作k-means算法或模糊k-means算法的預處理步驟。它旨在加速對大數據集的聚類操作。由于數據集的大小無法確定,而k-means在一開始就要輸入聚簇的個數,因此直接使用k-means算法并不是一個很好的選擇。canopy算子在mahout中使用的命令是“canopy”,向用戶暴露的參數有4個:輸出路徑“--output”,用于確定聚類粒度的“--t1”和“--t2”,以及相似度距離度量方式“--distancemeasure”。t1和t2的值是必選項,距離度量方式是可選項,默認值的平方歐式距離度量。
(2)k-means聚類
k-means聚類是數據挖掘中非常流行的聚類分析方法,在眾多科學領域被廣泛用做聚類算法。k-means聚類的目的是將n個數據點分為k個簇,每個數據點屬于其中一個具有最近均值的簇。k-means在mahout中使用的命令是“kmeans”。當不使用canopy進行預聚類時,k-means算法要求在一開始就指定最終要聚出的簇的個數,也即k值。因此,k-means的參數方案有兩種,當沒有使用canopy進行預聚類時,k-means需要指定聚類結果的簇數“--clusters”。此外,該算子還有4個可選參數:默認值為平方歐式距離度量的“--distancemeasure”,默認值為20的最大迭代次數“--maxiter”,默認值為0.5的收斂閾值“--convergencedelta”,以及輸出路徑參數“--output”。
(3)模糊k-means聚類
模糊k-means(也稱為模糊c-means)是k-means的擴展。k-means用于發(fā)現(xiàn)硬簇(點僅屬于一個簇),而模糊k-means則是以一種更統(tǒng)計化的形式化方法來發(fā)現(xiàn)軟簇(即特定點可以以特定的概率屬于多個簇)。模糊k-means在mahout中的命令為“fkmeans”,參數的封裝方案和kmeans相同,在此不做贅述。
(4)譜聚類
在聚類中,譜聚類算法利用數據的相似性矩陣的頻譜(特征值)以在較少維度上在聚類之前執(zhí)行降維。譜聚類在mahout中使用的命令是“spectralkmeans”,簇的個數“--clusters”是必須指定的參數,默認值為20的最高迭代次數“--maxiter”、輸出路徑“--output”、默認值為平方歐式距離度量的“--distancemeasure”和默認值為0.5的收斂閾值“--convergencedelta”是可選參數。
(5)lda聚類
潛在dirichlet分配(lda)是一個強大的機器學習算法,它可以將一系列的詞語聚類進入某個話題,并將一系列的文檔聚類進入多個混合的話題。在自然語言處理中,lda是一種生成統(tǒng)計模型,它允許觀察集由未觀察組解釋,解釋為什么數據的某些部分是相似的。潛在dirichlet分配服務在mahout中使用的命令是“l(fā)da”,模型的話題數據“--num_topics”是必須指定的參數,此外默認值為20的最高迭代次數“--maxiter”和輸出路徑“--output”是可選參數。
進一步的,步驟s2中的分類模型包括采用樸素貝葉斯算法及隨機森林算法的分類模型。
(1)樸素貝葉斯
生活中很多場合需要用到分類,樸素貝葉斯是一種簡單有效的常用分類算法。它的基本思想很簡單,即對于給出的待分類項,求解在此項出現(xiàn)的條件下各個類別出現(xiàn)的概率,哪個最大,就認為此待分類項屬于哪個類別。樸素貝葉斯在mahout中使用的命令是“trainnb”,模型的輸出路徑“--output”和默認值為“/mahout/trainnb/labelindex”的標簽索引輸出路徑“--labelindex”是可選參數。
(2)隨機森林
隨機森林或隨機決策林算法是用于分類,回歸和其他任務的整體學習方法,其通過在訓練時構建多個決策樹并輸出作為類的模式(分類)或平均預測的類(回歸)的單棵樹。隨機決策森林糾正了決策樹過度適應他們的訓練集的問題。隨機森林算法在mahout中使用的命令是“buildforest”,可選參數有“--output”和“--selection”。第二個參數表示在每個樹節(jié)點隨機選擇的變量的數量,默認值是解釋變量的數量的平方根。
進一步的,步驟s2中的協(xié)同過濾推薦模型采用矩陣因式分解協(xié)同過濾算法及基于物品的協(xié)同過濾推薦算法的協(xié)同過濾推薦模型。
(1)矩陣因式分解協(xié)同過濾
該算法是基于als-wr矩陣因式分解的協(xié)同過濾算法。目前協(xié)同過濾算法主要可區(qū)分為基于因式分解的和基于鄰域的兩種。因為因式分解會從全局考慮用戶投票的影響,所以在理論和實踐上相比基于鄰域的協(xié)同過濾算法效果會更好一些。該算子在mahout中使用的命令是“parallelals”,特征的維度“--numfeatures”和正則化參數“--lambda”是必須指定的參數,默認值為10的迭代次數“--numiterations”和輸出路徑“--output”是可選參數。
(2)基于物品的協(xié)同過濾推薦
基于物品的協(xié)同過濾推薦根據用戶對其他物品的喜好數據,通過找到相似的但用戶還沒評價過的物品推薦給用戶。這是目前業(yè)界廣泛使用的一個協(xié)同過濾推薦算法。該算子在mahout中使用的命令是“itemsimilarity”,除了輸出路徑“--output”之外,可選參數還有相似度度量“--similarityclassname”、物品之間的最大相似度值“--maxsimilaritiesperitem”、最大物品偏好值“--maxprefs”、每個用戶的最小偏好值“--minprefsperuser”和是否視輸入為無偏好值的數據的參數“--booleandata”。它們的默認值依次是:similarity_euclidean_distance、100、500、1和false。
在本發(fā)明一實施例中,步驟s3中訓練完成的模型評估包括以下步驟:
步驟s31:聚類模型評估采用簇間距離及聚類輸出檢查進行評估;
(1)簇間距離評估
簇間距離能夠很好的反映聚類質量。好的聚類結果中不同簇中心點之間不可能靠得太近,太近則意味著聚類過程產生了多個具有相似特征的組,并導致簇之間的區(qū)別不夠顯著。所以我們不會希望簇之間的距離太近。簇間距離與聚類的結果質量密切相關。簇間距離評估算子不在mahout提供的命令里面,因此我們編碼封裝了該算子服務。算子對應的java類為interclusterdistances。該算子的其中一個參數為需要評估的聚類結果的文件路徑,該路徑可以在服務組裝時從聚類模型訓練服務的輸出參數中獲取,無需用戶指定。此外還有一個可選參數就是評估結果的輸出路徑。
(2)檢查聚類輸出
mahout中檢查聚類輸出的主要工具是clusterdumper。用clusterdumper讀取mahout中聚類算法的輸出很方便。根據此輸出,我們就能很方便的評估聚類的質量。任何簇都有一個中心向量,它是該簇中所有點的平均值。在本課題中,除了潛在dirichlet分配聚類之外,這點對于canopy聚類、k-means聚類、模糊k-means聚類和譜聚類都成立。特別的,當聚類的目標是文本文檔時,特征就是單詞,也就是說中心點權重最高的那些單詞反映出了該簇中文檔要表達的含義。
該算子的運行命令是“clusterdumper”,輸入是簇集合,它可以在服務組裝階段從聚類模型訓練的輸出參數中獲取,無需指定。此外,將數據轉為向量時生成的詞典也是一個可選的輸入??蛇x參數“--numwords”表示需要打印的單詞個數,默認值為10。
步驟s32:分類模型評估采用正確率進行評估,若分類模型采用樸素貝葉斯算法,評估還包括混淆矩陣;
對分類模型進行評估,最常用的評價標準一般有正確率和混淆矩陣兩種。正確率很好理解,那混淆矩陣又是什么呢?對于輸出非分值結果的分類器來說,可能最直接的指標就是混淆矩陣?;煜仃囀悄P洼敵鼋Y果和一直正確目標值的交叉表。矩陣的每一行對應真是目標值而每一列對應模型的輸出值。矩陣第i行第j列的元素值為類別i的測試樣本被模型分到類別j中的數目。一個好模型對應的混淆矩陣的大元素都集中在對角線。這些對角線元素指的是類別i中樣本被正確分到i類中的數目。
樸素貝葉斯評估算子能通過測試過程,計算出樸素貝葉斯模型的正確率和混淆矩陣。它的運行命令為“testnb”,對應訓練的“trainnb”命令。該評估算子需要輸入用于訓練的特征向量,以及訓練完的模型和索引標簽,這些路徑將在服務組裝過程中從前面的算子中參數直接獲取,無需用戶指定。
(1)隨機森林評估
隨機森林評估算子可以用于測試隨機森林模型的正確率。它的命令為“testforest”,輸入路徑參數在服務組裝時獲取。
步驟s33:協(xié)同過濾推薦模型評估采用模型的準確率進行評估。
(1)矩陣因式分解協(xié)同過濾評估
該算子通過計算rmse與mae得出推薦模型的準確率,它運行命令為“evaluatefactorization”。該算子的輸入為用戶矩陣模型、物品矩陣模型和用于測試的數據集,它們均能在服務組裝階段從前面的算子參數中獲取。
(2)基于物品的協(xié)同過濾推薦評估
該算子根據訓練所得的物品相似度模型,使用測試數據集測試得到模型的準確率。輸入路徑同樣的在服務組裝階段獲取。
本發(fā)明將機器學習過程區(qū)分成數據預處理、模型訓練和模型評估三個階段,每個階段在mahout算法庫里都有屬于該階段的一系列算子,復用視角下的mahout機器學習服務組裝方法概覽如圖1所示。
將上述算子進行封裝,在封裝成具有統(tǒng)一調用規(guī)范的服務之后,就能使用它們進行服務組裝,生成一個完整的機器學習工作流全圖。如圖2所示,就是我們封裝的算子所能組裝出的機器學習工作流的全貌。圖中的圓圈表示能單獨執(zhí)行某個任務的算子,一共有25個算子。連線表示算子執(zhí)行的次序和流程。方塊表示的是算子執(zhí)行輸出的中間結果,該模塊只是為了工作流圖的整體美觀,不代表可運行的具體任務。我們將機器學習過程區(qū)分成數據預處理、模型訓練和模型評估三個階段。其中,左邊的圓圈代表數據預處理算子服務,如將文本文檔格式文件轉化成sequencefile格式文件的seqdirectory;中間藍色的圓圈代表模型訓練算子服務,如k-means聚類算子服務;右邊的圓圈代表模型評估算子服務如評估聚類結果簇間距離的interclustersdistance。
根據一般的數據挖掘需求以及hadoop生態(tài)系統(tǒng)的支持范圍考慮,最終我們選定支持的輸入數據格式類型有五種,它們分別是:hive表數據、csv文件、arff文件、lucene索引文件和txt文本文檔文件。這些文件均存儲在hdfs中。hdfs是分布式的文件存儲系統(tǒng),它能非常方便的存儲海量的數據。在預處理算子中hiveaction用于處理hive表數據輸入,并輸出csv格式文件到hdfs中;lucene2seq算子用于處理lucene索引文件,并將它轉換成sequencefile格式文件;arff.vector用于處理arff格式文件,并根據文件生成相應的特征向量;csv2vector和splitdataset都用于處理csv格式文件輸入,csv2vector根據csv格式文件生成特征向量,splitdataset則是將csv數據按一定比例切分成訓練集和測試集。由于這6個算子是整個機器學習工作流的入口,因此他們的數據文件輸入路徑必須由用戶指定,系統(tǒng)才能知道要處理哪些數據。對于剩下的19個算子來說,則不需要指定文件的輸入路徑,因為它們的輸入就是工作流前面的其他某個算子的輸出路徑,只要在服務組裝過程中從前面的算子獲取并按需進行拼裝即可。
在本發(fā)明具體實施例中使用reuters-21578新聞數據集。它在機器學習研究領域中被廣泛使用。這些數據的收集和標記最初是由卡內基集團和路透社在開發(fā)construe文本分類系統(tǒng)的過程中完成的。reuters-21578數據集分為22個文件,除最后一個文件只包含578篇文檔之外,其余每個文件均包含1000篇文檔。這些文件為sgml格式,類似于xml,在開始本實例研究前已經事先將它們處理成了txt文檔并存儲在hdfs中。
由于輸入文件是txt格式,所以很自然的我們選擇了seq2directory預處理算子作為整個機器學習工作流的入口。此外,選用kmeans和lda這兩種聚類算法來進行文本話題的發(fā)現(xiàn),并使用clusterdumper和ldaprinttopics算子輸出最后的話題發(fā)現(xiàn)結果。
根據上述的需求,結合機器學習工作流全圖所描述的算子前后依賴關系,能迅速的使用封裝好的算子生成兩條機器學習工作流路徑。在原本工作流全圖的基礎上,去掉不相關的算子之后,就得到了如圖3所示的工作流。從圖上我們可以看到,我們得到了兩條工作流路徑,它們分別是seqdirectory→seq2sparse→k-means→clusterdumper和seqdirectory→seq2sparse→lda→ldaprinttopics。
由工作流圖我們得知需要用到的算子服務一共有六個,進而得出這些使用到的算子所必須指定和可選的參數列表。如表1所示,在參數中我們必須指定的只有最初的數據輸入路徑、k-means算法的k值和lda算法的話題數等三個,其他參數細節(jié)均可在服務組裝階段自動獲取。
表1工作流算子需指定的參數列表
當然也可以指定一些其他可選的重要參數。在本例子中,由于不清楚對于k-means算法來說,默認的歐式距離度量和余弦距離度量究竟哪個聚類效果更好,所以決定同時使用兩套k-means參數方案。特別的,由于選擇了余弦距離度量,還將k-means算法的收斂閾值參數“--convergencedelta”指定為0.1,而不是默認的0.5,因為余弦距離的范圍是0到1。因此,根據指定的參數方案,最終將生成三條聚類工作流。其中一條實現(xiàn)lda聚類過程,一條實現(xiàn)歐式距離度量的k-means聚類過程,另外一條實現(xiàn)余弦距離度量的k-means聚類過程。
將上述的三條工作流路徑在oozie上執(zhí)行之后,得到了它們最終的評估結果,輸出結果列于表中。針對每種結果各列出了5個話題,并且每個話題列出了權重最大的前5個單詞。
如表2所示,lda聚類得到的話題識別效果總體上都很不錯。從靠前的5個關鍵詞中大致能看出每個聚簇的新聞文檔所談論的話題內容。例如從第1個聚簇的小麥(wheat)、農業(yè)(agriculture)、出口(export)和噸(tones)這些關鍵詞中,可以看出它是在討論和小麥產量相關的農業(yè)話題。從第2個聚簇的ibm(ibm)、計算機(computers)、美國電話電報公司(att)和個人的(personal)這些關鍵詞中,可以看出它是在討論涉及計算機和相關公司的話題。另外三個聚簇則分別是討論銀行金融、石油與能源以及證券相關的話題,也具有較明顯的效果。
表2lda聚類結果
如表3所示,使用余弦距離度量的k-means文本聚類相比lda聚類效果則會差一些,但是總體上也不錯。第1、2、3個聚簇的關鍵詞顯示出它們分別是談論與小麥產量、股票、原油價格上漲相關的話題。第4個聚簇雖然能大概看出是討論某個東西去年年增長的話題,但具體是什么增長就不明確了,說明該聚簇的效果并不好。此外,注意到第5個話題都是一些數字,盡管看上去這個聚簇內部的相關性很高,但它卻毫無意義。
表3k-means余弦距離聚類結果
最后如表4所示,是使用歐式距離度量的k-means文本聚類的結果,該文本聚類效果相比其他兩個聚類則要差許多。第1個和第2個聚簇的關鍵詞相關性還勉強說得過去,但是從第3、第4和第5個聚簇的關鍵詞就很難看出它們的相關性了,甚至給人有些“語無倫次”的感覺。特別是如he、said、vs、would等詞語,對于話題的識別實在是沒有任何意義。
表4k-means歐式距離聚類
因此,可以得出結論,在服務組裝得到的這三個機器學習工作流中,lda聚類工作流對文本話題發(fā)現(xiàn)的效果最好,使用余弦距離度量的k-means聚類工作流次之,歐式距離度量的k-means聚類工作流則最差。用戶如果對lda聚類的效果滿意,則可以將該機器學習工作流保存下來,以便日后能夠輕松的進行復用。當然,用戶也可以繼續(xù)調優(yōu)這些工作流中算子的參數,以求達到更好的聚類效果。
此外,從評估結果中看到,在三個聚類的結果中均出現(xiàn)了如7-apr-1987、數字、he和said等詞語,說明可能在預處理階段進行文本分詞生成特征向量時處理得不夠好。因此,為了進一步改善文本話題的發(fā)現(xiàn)效果,改變預處理算子seq2sparse的參數以進行調試也會是一個不錯的選擇。
實驗表明,使用該方法能夠快速有效地定制和調優(yōu)可復用的機器學習流程,從而能夠高效的在hadoop平臺上進行數據挖掘工作。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。