本發(fā)明涉及旅游大數(shù)據(jù)應(yīng)用領(lǐng)域,具體的說是基于MapReduce的旅游大數(shù)據(jù)客戶細(xì)分方法。
背景技術(shù):
在移動互聯(lián)網(wǎng)和Web技術(shù)快速發(fā)展等因素的影響下,國內(nèi)大型旅游OTA的業(yè)務(wù)量以前所未有的速度增長。在黃金周等旅游高峰期,每天的酒店預(yù)訂量可達(dá)到幾十萬間。伴隨著旅游消費產(chǎn)生了大量的過程采集、消費點評和產(chǎn)品推薦等數(shù)據(jù),這些數(shù)據(jù)以各種形式保存到中心服務(wù)器上,包括文本、圖片、聲音、視頻等。分階段地對這些旅游過程中產(chǎn)生的海量數(shù)據(jù)進(jìn)行挖掘和分析是對大型線上旅游企業(yè)提出的迫切挑戰(zhàn)。
目前,我國大型在線旅游企業(yè)數(shù)據(jù)挖掘的數(shù)據(jù)規(guī)模已達(dá)GB級甚至TB級,傳統(tǒng)的分析手段已難以滿足現(xiàn)實的需要,迫切需要一種針對旅游大數(shù)據(jù)的客戶細(xì)分方法,從而可以進(jìn)行有效的旅游客戶細(xì)分、旅游客戶維護(hù)和精準(zhǔn)營銷等商業(yè)活動。因而本發(fā)明提出一種基于MapReduce的旅游大數(shù)據(jù)客戶細(xì)分方法。
所述MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運算。概念"Map(映射)"和"Reduce(歸約)",是它們的主要思想,都是從函數(shù)式編程語言里借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運行在分布式系統(tǒng)上。當(dāng)前的軟件實現(xiàn)是指定一個Map(映射)函數(shù),用來把一組鍵值對映射成一組新的鍵值對,指定并發(fā)的Reduce(歸約)函數(shù),用來保證所有映射的鍵值對中的每一個共享相同的鍵組。
技術(shù)實現(xiàn)要素:
本發(fā)明針對目前技術(shù)發(fā)展的需求和不足之處,提供基于MapReduce的旅游大數(shù)據(jù)客戶細(xì)分方法。
本發(fā)明所述基于MapReduce的旅游大數(shù)據(jù)客戶細(xì)分方法,解決上述技術(shù)問題采用的技術(shù)方案如下:所述基于MapReduce的旅游大數(shù)據(jù)客戶細(xì)分方法,利用K-means算法中各對象到中心點的距離是獨立運算的特點,運用三邊關(guān)系定理的思想改進(jìn)K-means算法對象歸類的過程,并通過構(gòu)造Map函數(shù)、combine函數(shù)與Reduce函數(shù),Map函數(shù)讀取每條客戶數(shù)據(jù)分片并計算聚類中心,Map輸出結(jié)果作為combine函數(shù)輸入,combine函數(shù)計算新聚類中心又作為Reduce函數(shù)的輸入,Reduce函數(shù)后算法收斂則算法結(jié)束,否則Reduce函數(shù)輸出再作為Map函數(shù)輸入進(jìn)行迭代計算,直到算法收斂;最終實現(xiàn)MapReduce算法的旅游大數(shù)據(jù)客戶細(xì)分。
優(yōu)選的,運用三邊關(guān)系定理的思想改進(jìn)K-means算法對象歸類的過程,具體包括如下步驟:
1)給定含有n個對象的數(shù)據(jù)集X,Cl為k 個初始中心,l=1,2,……,k;
2)計算每個聚類中心的距離,其中d(Ci,Cj),其中i,j=1,2,……,k;
3)計算對象Xi與當(dāng)前所在類中心的距離d(Xi,Cm);考察新的聚類中心Cj,若d(Cm,Cj)≥2d(Xi,Cm),說明Cj不是新的中心,可以不用計算d(Xi,Cj);否則,計算d(Xi,Cj),并與d(Xi,Cm)比較;繼續(xù)步驟3,直到將Xi歸屬到最近的聚類中心。
優(yōu)選的,在用改進(jìn)的K-means方法處理前,首先將客戶數(shù)據(jù)以行形式存儲,使得數(shù)據(jù)分片,且各分片之間數(shù)據(jù)不相關(guān),分片過程由Hadoop完成,無需另外編程。
優(yōu)選的,通過Map函數(shù)從特定分片中逐行讀取每條記錄,計算它與k個中心點的距離,并標(biāo)明它所屬的新中心類型。
優(yōu)選的,通過combine函數(shù)對每個Map函數(shù)產(chǎn)生的結(jié)果進(jìn)行本地化預(yù)處理,預(yù)先對本地Map函數(shù)結(jié)果進(jìn)行計算,得出本地結(jié)果中各聚類對象的個數(shù)及各維數(shù)值之和,作為Reduce函數(shù)的輸入。
優(yōu)選的,combine函數(shù)的輸出是Reduce函數(shù)的輸入,key是聚簇ID,value中包含該簇的對象數(shù)num和這些對象的各維數(shù)據(jù)之和;Reduce函數(shù)累加同一key的各num之和,并求各分量的均值,得到新的聚類中心,輸出[key,value]。
優(yōu)選的,每次運用Reduce函數(shù)之后,判斷偏差是否小于給定的閾值,若小于則算法收斂,否則將本輪Reduce結(jié)果作為map函數(shù)的輸入進(jìn)行下一輪的迭代。
本發(fā)明所述基于MapReduce的旅游大數(shù)據(jù)客戶細(xì)分方法與現(xiàn)有技術(shù)相比具有的有益效果是:本發(fā)明通過設(shè)計MapReduce的旅游大數(shù)據(jù)客戶細(xì)分方法,主要解決了旅游大數(shù)據(jù)客戶細(xì)分問題,可以進(jìn)行有效的旅游客戶細(xì)分、旅游客戶維護(hù)和精準(zhǔn)營銷等商業(yè)活動;為旅游主部門或涉旅企業(yè)提供市場決策支撐、加強(qiáng)市場監(jiān)管,協(xié)助其實現(xiàn)市場精細(xì)化營銷,減少營銷投入時間與成本。
附圖說明
附圖1為所述旅游大數(shù)據(jù)客戶細(xì)分方法的流程示意圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,以下結(jié)合具體實施例,對本發(fā)明所述基于MapReduce的旅游大數(shù)據(jù)客戶細(xì)分方法進(jìn)一步詳細(xì)說明。
經(jīng)典K-means算法:設(shè)有n個對象,劃分成K類,講過t此迭代,則經(jīng)典K-means算法的時間復(fù)雜度為O(nkt)??梢姡琄-means算法在處理大數(shù)據(jù)集時相對有效,具有較好的擴(kuò)展性;計算耗時主要集中在兩個環(huán)節(jié)上:一是計算各對象到中心的距離,二是將對象歸類到距離最近的中心點類的過程。在第二環(huán)節(jié)上,若能減少不必要的比較和計算,則能有效節(jié)省時間。
運用(三角形)三邊關(guān)系定理改進(jìn)經(jīng)典K-means算法中對象歸類的過程,即借用三邊關(guān)系定理的思想簡化比較和計算過程,具體包括如下步驟:
1)給定含有n個對象的數(shù)據(jù)集X,Cl為k 個初始中心,l=1,2,……,k;
2)計算每個聚類中心的距離,其中d(Ci,Cj),其中i,j=1,2,……,k;
3)計算對象Xi與當(dāng)前所在類中心的距離d(Xi,Cm);考察新的聚類中心Cj,若d(Cm,Cj)≥2d(Xi,Cm),說明Cj不是新的中心,可以不用計算d(Xi,Cj);否則,計算d(Xi,Cj),并與d(Xi,Cm)比較;繼續(xù)步驟3,直到將Xi歸屬到最近的聚類中心。
改進(jìn)K-means算法的時間復(fù)雜度為O(nβd),其中:1≤β≤k是對象到中心點的計算次數(shù);最好的情況是計算一次,最壞的情況是計算k次,當(dāng)n較大時,能極大提高效率。
本發(fā)明提出基于MapReduce的旅游大數(shù)據(jù)客戶細(xì)分方法,以改進(jìn)的K-means(聚類)方法為基礎(chǔ),將客戶數(shù)據(jù)進(jìn)行細(xì)分分片,通過構(gòu)造Map函數(shù)、combine函數(shù)、Reduce函數(shù)來實現(xiàn)MapReduce算法的客戶數(shù)據(jù)細(xì)分;如附圖1所示,Map函數(shù)讀取每條客戶數(shù)據(jù)分片并計算聚類中心,Map輸出結(jié)果作為combine函數(shù)輸入,combine函數(shù)計算新聚類中心又作為Reduce函數(shù)的輸入,Reduce函數(shù)后算法收斂則算法結(jié)束,否則Reduce函數(shù)輸出再作為Map函數(shù)輸入進(jìn)行迭代計算,直到算法收斂。本發(fā)明不僅可以為大型線上旅游企業(yè)提供決策支持,同時也為旅游主管部門監(jiān)控、管理旅游市場提供了有效方法。
實施例:
本實施例所述基于MapReduce的旅游大數(shù)據(jù)客戶細(xì)分方法,利用K-means算法中各對象到中心點的距離是獨立運算的特點,運用(三角形)三邊關(guān)系定理的思想改進(jìn)K-means算法對象歸類的過程,并通過構(gòu)造Map函數(shù)、combine函數(shù)與Reduce函數(shù),來實現(xiàn)MapReduce算法的旅游大數(shù)據(jù)客戶細(xì)分。
K-means算法中計算各對象到中心點的距離被獨立操作,各對象之間沒有關(guān)聯(lián),K-means算法適用于分布式并行計算。因此用MapReduce處理的數(shù)據(jù)具備以下條件:大的數(shù)據(jù)集可以被分成一個個小數(shù)據(jù)集,而且這些小數(shù)據(jù)集可以獨立地被并行處理,互不影響。
所述旅游大數(shù)據(jù)客戶細(xì)分方法,在用改進(jìn)的K-means(聚類)方法處理前,首先將客戶數(shù)據(jù)以行形式存儲,使得數(shù)據(jù)分片,且各分片之間數(shù)據(jù)不相關(guān),分片過程由Hadoop完成,無需另外編程。
然后,通過Map函數(shù)從特定分片中逐行讀取每條記錄,計算它與k個中心點的距離,并標(biāo)明它所屬的新中心類型。Map函數(shù)的輸入為原始客戶數(shù)據(jù)文件和k個初始中心點。原始客戶數(shù)據(jù)以[key,value]對表示,其中:key為記錄相對于文件起始點的偏移量;value為當(dāng)前記錄各維值組成的字符串。
通過combine函數(shù)對每個Map函數(shù)產(chǎn)生的結(jié)果進(jìn)行本地化預(yù)處理,預(yù)先對本地 Map函數(shù)結(jié)果進(jìn)行計算,得出本地結(jié)果中各聚類對象的個數(shù)及各維數(shù)值之和,作為Reduce函數(shù)的輸入。從而在Reduce時,減少不必要的通信代價,以提高整個MapReduce的運行性能。
通過Reduce函數(shù)統(tǒng)計和計算出各個聚類的新中心,Reduce函數(shù)的輸入是combine函數(shù)的輸出,key是聚簇ID,value中包含該簇的對象數(shù)num和這些對象的各維數(shù)據(jù)之和。Reduce函數(shù)累加同一key的各num之和,并求各分量的均值,得到新的聚類中心,輸出[key,value]。
最后,在每次運用Reduce函數(shù)之后,判斷偏差是否小于給定的閾值,若小于則算法收斂,否則將本輪Reduce結(jié)果作為map函數(shù)的輸入進(jìn)行下一輪的迭代。
上述具體實施方式僅是本發(fā)明的具體個案,本發(fā)明的專利保護(hù)范圍包括但不限于上述具體實施方式,任何符合本發(fā)明的權(quán)利要求書的且任何所屬技術(shù)領(lǐng)域的普通技術(shù)人員對其所做的適當(dāng)變化或替換,皆應(yīng)落入本發(fā)明的專利保護(hù)范圍。