欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種分布式非負(fù)矩陣分解方法與流程

文檔序號:12363683閱讀:429來源:國知局
一種分布式非負(fù)矩陣分解方法與流程
本發(fā)明涉及分布式的機(jī)器學(xué)習(xí)技術(shù),特別是一種分布式的非負(fù)矩陣分解方法。
背景技術(shù)
:隨著互聯(lián)網(wǎng)信息科技的高速發(fā)展,每天都會(huì)有大量的網(wǎng)絡(luò)數(shù)據(jù)產(chǎn)生,如何快速有效從海量數(shù)據(jù)中提取有用的信息對人們來說變得越來越重要。互聯(lián)網(wǎng)上的信息包括了用戶商品的購買信息,新聞微信等文本信息,為了處理起來方便,這些信息通常被處理成矩陣的形式進(jìn)行處理。非負(fù)矩陣分解NMF是將矩陣X分解為2個(gè)非負(fù)因子矩陣W和H,W和H的乘積盡可能接近于原來的矩陣X。NMF是由D.D.Lee和H.S.Seung在1999年《nature》上提出的,并用于人臉識別。目前被越來越多的數(shù)據(jù)科學(xué)家用在更多的領(lǐng)域,用于降低數(shù)據(jù)的復(fù)雜性,以方便對數(shù)據(jù)的處理非負(fù)矩陣分解在處理上述數(shù)據(jù)時(shí)是一個(gè)十分方便的工具,它經(jīng)常被用來探索觀察到的矩陣的潛在的結(jié)構(gòu)。在利用這些豐富的網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行挖掘有用信息的同時(shí),我們必須面對一大挑戰(zhàn):我們所用處理工具的處理規(guī)模是否能適應(yīng)如此大規(guī)模的數(shù)據(jù),是否能跟上數(shù)據(jù)爆炸式增長的步伐?隨著大數(shù)據(jù)并行處理計(jì)算框架Mapreduce和Spark的出現(xiàn),大規(guī)模的矩陣分解的可操作性變得越來越強(qiáng)。許多互聯(lián)網(wǎng)公司都對矩陣分解做了并行化處理,以使其適應(yīng)大數(shù)據(jù)平臺(tái),用以分解大規(guī)模矩陣。同時(shí)許多其他的公司和企業(yè)也開始使用它來進(jìn)行處理大規(guī)模數(shù)據(jù)。傳統(tǒng)的SGD并行化算法,都面臨著一個(gè)很重要問題:鎖定等待問題,如:DSGD算法必須所有節(jié)點(diǎn)要等待最慢的那個(gè)節(jié)點(diǎn)處理完才能進(jìn)入下一步迭代,這就造成了算法的收斂性和執(zhí)行效率的降低。如何使矩陣分解更好的并行化,如何提高算法的收斂性和執(zhí)行效率成為當(dāng)前矩陣分解算法研究中的熱門課題。技術(shù)實(shí)現(xiàn)要素:本發(fā)明所要解決的技術(shù)問題是,針對現(xiàn)有技術(shù)不足,提供一種分布式非負(fù)矩陣分解方法。為解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案是:一種分布式的非負(fù)矩陣分解方法,包括以下步驟:1)輸入矩陣數(shù)據(jù)讀入到hadoop的分布式系統(tǒng),在Spark平臺(tái)上計(jì)算矩陣的統(tǒng)計(jì)信息,包括每行及每列所包含的數(shù)據(jù)個(gè)數(shù),以及這個(gè)矩陣的數(shù)據(jù)總數(shù)和非零元素的最大id值。2)利用原始矩陣X進(jìn)行矩陣的分塊,并且改進(jìn)分塊調(diào)度方法,降低鎖等待的時(shí)間。如果Spark上的計(jì)算節(jié)點(diǎn)為S個(gè),已有的分布式矩陣分解算法DSGD算法是將矩陣分成S*S個(gè)數(shù)據(jù)塊,每個(gè)模式中的S個(gè)模塊分配給S個(gè)計(jì)算節(jié)點(diǎn)。我們的改進(jìn)則是將矩陣劃隨機(jī)劃分生成2S×2S個(gè)子矩陣,每個(gè)子矩陣是一個(gè)數(shù)據(jù)塊,每2S個(gè)數(shù)據(jù)塊組成一個(gè)模式,總共可以得到2S個(gè)相互獨(dú)立的模式Pi,i的取值為1到2S。模式Pi和模式Pj沒有重疊的數(shù)據(jù)塊。每個(gè)單獨(dú)的模式都必須能覆蓋整個(gè)矩陣,使得在單模式下的所有數(shù)據(jù)塊上迭代計(jì)算一次后,矩陣W的所有行和矩陣H的所有列都進(jìn)行了更新,W和H是X進(jìn)行分解后得到的因子矩陣。圖1為矩陣被分成3×3個(gè)獨(dú)立處理模塊的矩陣的模式示意圖。3)對Spark平臺(tái)上的S個(gè)計(jì)算節(jié)點(diǎn),每次需要將單個(gè)模式中的2S個(gè)數(shù)據(jù)塊分配到S個(gè)計(jì)算節(jié)點(diǎn)。對每個(gè)模式中的2S個(gè)數(shù)據(jù)塊都計(jì)算它的數(shù)據(jù)量,即每個(gè)數(shù)據(jù)塊的非零數(shù)據(jù)個(gè)數(shù)。在單個(gè)模式中,將模式內(nèi)的2S個(gè)數(shù)據(jù)塊根據(jù)數(shù)據(jù)量進(jìn)行從小到大排序,將數(shù)據(jù)量最大的數(shù)據(jù)塊與數(shù)據(jù)量最小的數(shù)據(jù)塊分配給1個(gè)計(jì)算節(jié)點(diǎn),將數(shù)據(jù)量第二大的數(shù)據(jù)塊與數(shù)據(jù)量第二小的數(shù)據(jù)塊分配給第2個(gè)計(jì)算節(jié)點(diǎn),依次類推,從排序隊(duì)列2端選擇未分配數(shù)據(jù)塊依次分配給其他計(jì)算節(jié)點(diǎn)。直到所有2S個(gè)數(shù)據(jù)塊全部分配到S個(gè)計(jì)算節(jié)點(diǎn)中。通過這種方式減少分布式執(zhí)行過程中的數(shù)據(jù)傾斜問題,使得每個(gè)計(jì)算節(jié)點(diǎn)上的數(shù)據(jù)量相對均衡,不會(huì)產(chǎn)生某個(gè)數(shù)據(jù)量少的計(jì)算節(jié)點(diǎn)提前結(jié)束任務(wù),花費(fèi)大量時(shí)間等待其他計(jì)算節(jié)點(diǎn)任務(wù)完成一起進(jìn)入下次迭代。4)2S個(gè)不同的數(shù)據(jù)塊在S個(gè)計(jì)算節(jié)點(diǎn)上采用的隨機(jī)梯度下降(SGD)算法迭代更新,將X矩陣矩陣分解為W和H。每次迭代只隨機(jī)選取某一個(gè)數(shù)據(jù)xi,j,并計(jì)算其相應(yīng)的梯度。一旦xi,j被選定,就可以通過采取梯度下降法迭代地更新矩陣W第i行的元素wi和矩陣H第j列的元素hj。在迭代過程中DSGD算法中未加任何限制,W和H兩個(gè)矩陣都會(huì)出現(xiàn)負(fù)值的情況。為了限制W和H為非負(fù),實(shí)現(xiàn)非負(fù)矩陣的分解,我們在迭代的過程中,增加了一個(gè)非負(fù)限制,得到新的迭代更新公式:wi=max(0,wi+γ×[ei,jhj-λwwi])hj=max(0,hj+γ×[ei,jwi-λhhj])ei,j=xi,j-wiThj]]>為實(shí)際值與預(yù)測值之間的差值,γ是步長(學(xué)習(xí)速率),λw和λh為正則化參數(shù)。這里γ我們采用動(dòng)態(tài)歩長,隨著迭代次數(shù)增加不斷地縮小,使得算法在初始階段步長大,加大解收斂速度,隨著迭代的增加,則縮小步長,獲得精確解。其動(dòng)態(tài)步長的計(jì)算公式為:γ=1/(θ×N×iter)α其中:θ主要用來控制初始步長大小,α為控制步長變化速度。N為矩陣包含的非零元素個(gè)數(shù),iter為算法的迭代次數(shù)。5)遍歷訪問2S個(gè)模式,執(zhí)行步驟4.該過程迭代執(zhí)行,直到RSME值小于閾值(即:算法收斂)或迭代次數(shù)達(dá)到最大值T,閾值與最大值T均為人工輸入。與現(xiàn)有技術(shù)相比,本發(fā)明所具有的有益效果為:本發(fā)明對算法的分布式調(diào)度過程進(jìn)行改進(jìn),預(yù)先計(jì)算分塊后每塊中的數(shù)據(jù)量,根據(jù)塊中數(shù)據(jù)量對同一調(diào)度過程中的數(shù)據(jù)塊進(jìn)行重新劃分。以降低鎖定等待時(shí)間,提高運(yùn)算效率;對改進(jìn)后的算法添加非負(fù)控制以適應(yīng)分布式非負(fù)矩陣分解;使用動(dòng)態(tài)步長進(jìn)行迭代以提高算法收斂性。將算法在Spark平臺(tái)上實(shí)現(xiàn),并且通過實(shí)驗(yàn)測試算法性能。實(shí)驗(yàn)結(jié)果表明,該方法具有很高的收斂性,和更好的分解效果。附圖說明圖1為被切分成3×3個(gè)獨(dú)立處理模塊的矩陣的模式;圖2為改進(jìn)算法整體流程;圖3(a)為采用Cloud數(shù)據(jù)集時(shí)D-DSGD與DSGD之間的比較,比較相同迭代次數(shù)兩算法的耗時(shí);圖3(b)為采用MovieLen時(shí)D-DSGD與DSGD之間的比較,比較相同迭代次數(shù)兩算法的耗時(shí);圖4(a)為采用Cloud數(shù)據(jù)集時(shí)D-DSGD、DSGD、DSGD+之間的收斂性比較,相同迭代次數(shù)下收斂性實(shí)驗(yàn);圖4(b)為采用MovieLen時(shí)D-DSGD、DSGD、DSGD+之間的收斂性比較,相同迭代次數(shù)下收斂性實(shí)驗(yàn);圖5(a)為采用Cloud數(shù)據(jù)集時(shí)Clound-NMF與D-NMF之間的比較,相同迭代次數(shù)下收斂性實(shí)驗(yàn);圖5(b)為采用MovieLen時(shí)Clound-NMF與D-NMF之間的比較,相同迭代次數(shù)下收斂性實(shí)驗(yàn)。具體實(shí)施方式本發(fā)明的具體實(shí)現(xiàn)過程如下:步驟1:從文件系統(tǒng)中將原始矩陣數(shù)據(jù)讀入到spark平臺(tái)中,產(chǎn)生通過SparkContext生成彈性分布式數(shù)據(jù)集RDD。對RDD中的數(shù)據(jù)進(jìn)行一次map操作,將每行數(shù)據(jù)“row_id,col_id,value”映射成三元組數(shù)值數(shù)據(jù)(row_id,col_id,vakue),生成新的RDD(RDD1)。對新生的的RRD做一些統(tǒng)計(jì)操作,統(tǒng)計(jì)矩陣的基本信息matrix_info,包括每行及每列所包含的數(shù)據(jù)個(gè)數(shù)和數(shù)據(jù)總數(shù)(total_col,total_row,total_N),還有詞的最大行id值(max_row)和最大列id(max_col)。步驟2:劃分?jǐn)?shù)據(jù)塊,如果計(jì)算節(jié)點(diǎn)的個(gè)數(shù)為S,則生成數(shù)據(jù)塊個(gè)數(shù)為2S×2S。并且預(yù)生成2S個(gè)相互獨(dú)立的模式。讀取RDD1中的數(shù)據(jù),進(jìn)行map()操作,生成模式RDD2,數(shù)據(jù)格式為([main_key,sub_key],s),其中main_key表示模式號,sub_key表示處理該塊數(shù)據(jù)的機(jī)器號,s為一條三元組數(shù)據(jù)。模式號表示是哪個(gè)同時(shí)統(tǒng)計(jì)每個(gè)塊中所包含的數(shù)據(jù)量,記錄在一個(gè)2S×2S的矩陣N中。例如下表,如果有4個(gè)計(jì)算節(jié)點(diǎn)就將矩陣劃分為8×8塊。灰色部分為一個(gè)預(yù)設(shè)的模式,每塊中的數(shù)值為各塊的數(shù)據(jù)量。84162707875119160142157928096581471958684104899265159120176821297588701241971041158090108481761161108210011270104128141121116134821344414617783133891136350150135117步驟3:生成處理模式。對同一模式在矩陣N中對應(yīng)的2S個(gè)數(shù)據(jù)量進(jìn)行排序,根據(jù)排序后的結(jié)果,將數(shù)據(jù)量最大的數(shù)據(jù)塊與數(shù)據(jù)量最小的數(shù)據(jù)塊分配給1個(gè)計(jì)算節(jié)點(diǎn),將數(shù)據(jù)量第二大的數(shù)據(jù)塊與數(shù)據(jù)量第二小的數(shù)據(jù)塊分配給第2個(gè)計(jì)算節(jié)點(diǎn),依次類推。將2S個(gè)數(shù)據(jù)塊組合成S個(gè)數(shù)據(jù)塊,分配給S個(gè)計(jì)算節(jié)點(diǎn)。如步驟2所列的模式中,數(shù)據(jù)量為48的數(shù)據(jù)塊最小與數(shù)據(jù)量為177的合并,分配給1個(gè)計(jì)算節(jié)點(diǎn)。依次類推,4個(gè)計(jì)算節(jié)點(diǎn)需要計(jì)算的數(shù)據(jù)量分別為:212、181、205、225。這種調(diào)度方法可以使得所有計(jì)算節(jié)點(diǎn)的數(shù)據(jù)量基本相差不大,不會(huì)造成這種情況:在所有的計(jì)算節(jié)點(diǎn)計(jì)算完成進(jìn)入下次迭代前,數(shù)據(jù)量小的計(jì)算節(jié)點(diǎn)需要等待很長時(shí)間。具體來說,根據(jù)排序后的組合,操作RDD2,將需要組合的數(shù)據(jù)塊的sub_key設(shè)為相同值,main_key不變,生成數(shù)據(jù)集RDD3,同時(shí)對RDD3數(shù)據(jù)集進(jìn)行cache()操作,將RDD3數(shù)據(jù)集進(jìn)行緩存。其中RDD3的鍵值對形式為(<main_key,sub_key>,s),main_key的取值范圍為1~2S,代表進(jìn)行一次迭代需要執(zhí)行的模式的個(gè)數(shù)。sub_key的取值范圍為1~S,代表機(jī)器號。步驟4:根據(jù)max_row和max_col生成矩陣W,H,并通過隨機(jī)函數(shù)對矩陣W,H分別進(jìn)行初始化。初始化值在0~1之間。步驟5:對數(shù)據(jù)集RDD3進(jìn)行操作,根據(jù)main_key來區(qū)分2S個(gè)模式,根據(jù)sub_key來分配機(jī)器,迭代更新W,H。首先通過Spark函數(shù)filter()根據(jù)main_key篩選出一個(gè)模式所需數(shù)據(jù)集RDD_MAIN,然后根據(jù)sub_key值,使用Spark函數(shù)partitionBy(),將篩選出的數(shù)據(jù)集劃分為S塊,生成數(shù)據(jù)集RDD_SUB,最后通過Spark函數(shù)mapPartitions()將任務(wù)分發(fā)到S個(gè)計(jì)算節(jié)點(diǎn),使用S個(gè)計(jì)算節(jié)點(diǎn)同時(shí)對S塊數(shù)據(jù)進(jìn)行處理。迭代執(zhí)行T次,每次采用SGD算法,同時(shí)加入非負(fù)控制迭代更新代W,H中的元素wi和hj。具體單次循環(huán)執(zhí)行過程如下:根據(jù)已處理數(shù)據(jù)量更新步長決定2s個(gè)模式的處理順序或者隨機(jī)處理,根據(jù)main_key值區(qū)分模式迭代跟新采用的公式是增加了非負(fù)控制的SGD公式:wi=max(0,wi+γ×[ei,jhj-λwwi])hj=max(0,hj+γ×[ei,jwi-λhhj])ei,j=xi,j-wiThj]]>為實(shí)際值與預(yù)測值之間的差值,γ是步長(學(xué)習(xí)速率),λw和λh為正則化參數(shù)。這里γ我們采用動(dòng)態(tài)歩長,隨著迭代次數(shù)增加不斷地縮小,使得算法在初始階段步長大,加大解收斂速度,隨著迭代的增加,則縮小步長,獲得精確解。其動(dòng)態(tài)步長的計(jì)算公式為:γ=1/(θ×N×iter)α其中:θ主要用來控制初始步長大小,α為控制步長變化速度。N為矩陣包含的非零元素個(gè)數(shù),iter為算法的迭代次數(shù)。步驟6:每次更新后,計(jì)算RMSE值。RMSE=1NΣ(u,v)∈X(xu,v-x^u,v)2]]>其中X是待分解矩陣,xu,v是原始矩陣X中一個(gè)數(shù)據(jù),是預(yù)測數(shù)據(jù),即W*H后得到的預(yù)測結(jié)果,N為X矩陣中的非零元素個(gè)數(shù)。步驟7:我們采用了2個(gè)數(shù)據(jù)集來驗(yàn)證我們的算法:Cloud數(shù)據(jù)集和MovieLens數(shù)據(jù)集。表3列出了數(shù)據(jù)集的詳細(xì)信息,m為最大行數(shù),n為最大行數(shù)。表4是對不同的數(shù)據(jù)集設(shè)置的算法參數(shù)。表3數(shù)據(jù)集的詳細(xì)信息表4各類參數(shù)的設(shè)置步驟8:我們將在這2個(gè)數(shù)據(jù)集上比較傳統(tǒng)的矩陣分解DSGD算法和我們改進(jìn)后的算法進(jìn)行比較,驗(yàn)證改進(jìn)策略的有效性。比較步驟分為3步:第一步將我們在DSGD基礎(chǔ)上改進(jìn)調(diào)度策略的算法(我們簡稱為:D-DSGD)與傳統(tǒng)的分布式矩陣分解算法DSGD進(jìn)行時(shí)間比較,對比算法在時(shí)間上的消耗;第二步將我們在DSGD基礎(chǔ)上改進(jìn)調(diào)度策略和動(dòng)態(tài)步長的算法(我們簡稱為:D-DSGD+),在DSGD基礎(chǔ)上改進(jìn)調(diào)度策略的算法(我們簡稱為:D-DSGD)與傳統(tǒng)的分布式矩陣分解算法DSGD進(jìn)行時(shí)間比較,對比各算法的收斂速度和收斂效果。第三步將我們在DSGD基礎(chǔ)上改進(jìn)調(diào)度策略和動(dòng)態(tài)步長,并且增加步長的算法(簡稱為:D-NMF)與已有的分布式非負(fù)矩陣分解算法Cloud-NMF進(jìn)行比較,驗(yàn)證我們算法的性能比較。由于D-DSGD算法和D-DSGD+的都有區(qū)別在動(dòng)態(tài)步長,都有新調(diào)度方法中的數(shù)據(jù)預(yù)分配,且單次循環(huán)執(zhí)行復(fù)雜度一樣,故在相同迭代次數(shù)的情況下,運(yùn)行時(shí)間相差不大,所以這里沒有將D-DSGD+用來比較時(shí)間。第一步的實(shí)驗(yàn)結(jié)果展示在圖3中。從圖3看出來:在迭代剛開始的1次迭代兩算法耗時(shí)基本相同,因?yàn)榇藭r(shí)算法在進(jìn)行數(shù)據(jù)準(zhǔn)備,從hdfs文件系統(tǒng)讀取文件,同時(shí)D-DSGD需要進(jìn)行數(shù)據(jù)的預(yù)分配,所以時(shí)間差別不大,且D-DSGD耗時(shí)相對較多。但是在隨后的迭代中,由于D-DSGD具有降低鎖定等待的策略,可以有效減少分布式執(zhí)行過程中數(shù)據(jù)分配的不平衡,減少節(jié)點(diǎn)的無意義等待的時(shí)間,所以每次迭代耗時(shí)比DSGD要少。第二步的實(shí)驗(yàn)結(jié)果展示在圖4中。從圖4看出來:由圖4可以看出在相同的迭代次數(shù)時(shí)D-DSGD的RMSE值比DSGD的值基本相同,鎖定等待策略對算法的收斂性影響較小。對比DSGD+(使用了動(dòng)態(tài)步長的D-DSGD)與DSGD,可以看出DSGD+收斂速度較快,具有更好的收斂性,說明本文所使用的動(dòng)態(tài)步長策略可以加快算法的收斂性。同時(shí)從圖3也可以看出DSGD+的RMSE值最小,表明DSGD+的矩陣分解效果最佳。第三步的實(shí)驗(yàn)結(jié)果展示在圖5中。由圖5(a)和(b)可以看出在相同的迭代次數(shù)時(shí)D-NMF方法的RMSE值要比Cloud-NMF方法的RMSE值小,D-NMF具有更好的收斂性,分解的效果要比Cloud-NMF算法好。由于D-NMF在Spark上實(shí)現(xiàn),Cloud-NMF算法在Mapreduce平臺(tái)上實(shí)現(xiàn),由于實(shí)現(xiàn)平臺(tái)不同,算法單次迭代的速度差異過大。這里僅比較隨著迭代次數(shù)的增加,評估值RMSE的變化情況。因此,從實(shí)驗(yàn)結(jié)果我們可以看出:由于采用了新的分塊調(diào)度方法,使得分配到各計(jì)算節(jié)點(diǎn)的數(shù)據(jù)塊的數(shù)據(jù)量較均衡,使得節(jié)點(diǎn)間相互等待時(shí)間不會(huì)過長。同時(shí)由于采用了動(dòng)態(tài)步長,收斂速度也明顯加快。并且從實(shí)驗(yàn)上我們可以看出,盡管采用了非負(fù)控制、新的分塊調(diào)度方法和動(dòng)態(tài)步長的新算法,矩陣分解效果最好,RMSE的值最小,比傳統(tǒng)的非負(fù)矩陣分解算法效果好,特別是在movielens這種實(shí)際的推薦算法的測試集上也獲得了很好的效果。當(dāng)前第1頁1 2 3 
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
水富县| 博野县| 宁明县| 晋宁县| 香港| 石景山区| 松原市| 贺州市| 时尚| 龙岩市| 黔西县| 星座| 呼图壁县| 瓦房店市| 绥滨县| 安泽县| 得荣县| 色达县| 甘德县| 广东省| 新丰县| 白城市| 平江县| 江华| 新丰县| 清河县| 旬阳县| 邵武市| 南溪县| 富宁县| 溧水县| 定陶县| 鲁山县| 宁陵县| 泰和县| 精河县| 休宁县| 华蓥市| 崇信县| 万盛区| 彩票|