99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀手中無y,心中有y——聚類算法的正確建模方式
手中無y,心中有y——聚類算法的正確建模方式
2021-12-10
收藏
手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

CDA數(shù)據(jù)分析師 出品

作者:CDA教研組

編輯:JYD

聚類算法是屬于無監(jiān)督機器學(xué)習(xí)方法;機器學(xué)習(xí)里把算法分為有監(jiān)督無監(jiān)督的算法,所謂有監(jiān)督,即我想研究的數(shù)據(jù)集有目標數(shù)據(jù),白話點就是建模里大家常說的那個y,如我想基于公司數(shù)據(jù)庫已經(jīng)有的相關(guān)數(shù)據(jù)集訓(xùn)練一個模型,用來預(yù)測客戶是否會流失,從數(shù)據(jù)庫中得到的數(shù)據(jù)集里是有一個特征(一列)是客戶是否流失的,可能1代表流失,0代表不會流失;但業(yè)務(wù)的初期或者數(shù)據(jù)庫中沒有該特征,即手中無y,那該怎么辦?如對客戶進行價值分群,此時對于這種目標明確,但確實缺少y這一列這種分析需求,可考慮聚類算法來實現(xiàn)。

首先簡單闡述一下聚類算法的思想,其邏輯是計算觀測值之間的距離,然后根據(jù)距離來進行分組(簇),目的是組內(nèi)之間的距離盡可能小,而組與組之間的距離大(即差異大)來達到分類(分組)的目的,得到的結(jié)果可以用來做數(shù)據(jù)挖掘。

回到我們的標題,我們說聚類算法是無監(jiān)督機器學(xué)習(xí),沒有y,那怎么還說心中要有y呢?我們看下面的一個例子。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖1

如圖1給出一些彈珠,我們的需求是將這些不同差異的彈珠做聚類分析,可這些彈珠不同的差異太多了在不同的角度上,如果你心里沒有目的,是很難將這些彈珠做好聚類分群的。

如果我們的目的是根據(jù)彈珠的體積大小這個目的進行分群的話,可能會聚成三類,即圖2里的大中小三種體積;

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖2

如果我們的需求是根據(jù)彈珠的透明程度,可能會分成圖3所示的2類:透明的一類和不透明的一類;

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖3

那如果我們的關(guān)注點是彈珠的顏色,可能會成為圖4所示的幾類,紅色系、黃色系、藍色系和紫色系等;

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖4

上面的例子我們可以看到,即使對于同一筆資料,根據(jù)需求的不同,聚類分群的結(jié)果也不太一樣,如果一個商業(yè)需求,分析師沒有目的或者會錯需求的話,那挖掘出來的結(jié)果大概率是不會滿意的。

聚類算法要解決三個問題:

1.如何表示觀測值之間的相似性

2.如何根據(jù)這些相似性將類似的觀測值分到同一個類

3.對所有的觀測值分好類之后,如何對每一個類(群、組、簇這些說法都可)進行特征描述

對于第一個問題,怎么計算觀測值之間的相似性呢,計算距離,常見的計算距離方法有曼哈頓距離、歐式距離。

圖5是曼哈頓距離的公式和演示

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖5

曼哈頓距離,即算直角距離,如圖5中object1和object2兩個觀測點的虛線(直角)距離就是曼哈頓距離,R是指相應(yīng)特征的范圍;圖6是一個計算的例子。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖6

兩個觀測值,分別有年紀和收入兩個維度,對其使用曼哈頓距離計算其距離為0.4。

下面要講的另外一種距離是歐式距離,歐式距離我們很早就接觸過,比如兩個點在二維坐標軸上x(x1,x2)和y(y1,y2)他們的歐式距離平方就是(x1-y1)^2+(x2-y2)^2;

圖7是歐式距離的公式,歐式距離是Minkowski距離的一種推廣。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖7

這就是使用計算距離的公式來表示觀察與觀察之間的相似性。

那么第二個問題:如何根據(jù)這些相似性將類似的觀測值分到同一個類?這就是涉及到聚類的算法。

聚類算法根據(jù)樣本的不同處理會有很多種方法,這里會介紹層次聚類和基于劃分聚類里的kmeans聚類(該兩種聚類商業(yè)上經(jīng)常用)。

層次聚類,也有譯成系統(tǒng)聚類,指的是形成類相似度層次圖譜,便于直觀的確定類之間的劃分。該方法可以得到較理想的分類,但是難以處理大量樣本。

層次聚類的算法步驟是:

1.計算點與點之間的距離

2.將最近的兩個觀測點聚為一類,將其看做一個整體(類)計算與其他類之前的距離

3.一直重復(fù)上述過程,直至所有的觀測被聚為一類

如圖8是系統(tǒng)聚類的一個聚類過程演示:首先計算點與點之間的距離,如我們計算點1和點3之間的距離,發(fā)現(xiàn)其兩個點相對來說較近,我們把該兩個點化為一類叫類1,我們發(fā)現(xiàn)點2和點5距離第二近,所以也合并起來歸為一個類2,接著計算發(fā)現(xiàn),點4與點5較為近,但是點5已經(jīng)和點2合并了,所以呢點4、點2和點5合并成類3,接著點與點的距離矩陣告訴我們點1和點2的距離為第四近,但是點2、5、4已經(jīng)是類3了,點1也屬于類1,所以類1和類3合并成類4,類4再和點6合并為最后的類5。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖8

分層聚類到底分幾個類呢,往往是通過層次樹(樹形圖)來結(jié)合業(yè)務(wù)來決定的,圖9是上面演示聚類結(jié)果的層次樹。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖9

層次樹的x軸是觀測點,y軸是距離,聚類分析的目的是組內(nèi)之間的距離小,組與組之間的距離盡可能大(差異明顯),從y軸畫一條平行于x軸的直線,如我在y軸0.1到0.15之間畫一條平行x軸的直線,與層次圖有4個交點,意思是說分成了4個類(組),且這時組間距離是最大的(有4個交點的上平行線和下平行線之間的距離),1和3分成一組,2和5分成1組,4,6單獨一個組,這時算法角度給出的最優(yōu)分組,但是也要結(jié)合業(yè)務(wù)場景,比如算法角度給出分成20組組間差異最大,但是分成20個群進行針對性營銷顯然大部分業(yè)務(wù)是不合適的。

我們剛才說,近的點劃分到一個類,那么怎么計算類與類之間的距離?如果把各觀測點圈在一個橢圓里的話,即怎么去計算兩個橢圓的距離?

計算類與類之間的距離方法也有很多,如平均鏈接法、重心法、Ward最小方差法;下面只介紹用的頻率高的Ward最小方差法。

所謂Ward最小方差法,是思想是使各個觀測之間的離差平方和最小。

圖10是該方法的計算公式,其特點是較少受到異常值的影響,適用范圍廣。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖10

圖11數(shù)據(jù)演示怎么計算各觀測之間的離差平方和

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖11

以上圖為例,一開始如果將AB合成一組,那么此時SS的值是

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

如果將CD合成一個組,其SS值是

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

當合并成3組時,如果是AB、CD和E的組合,那么SS的值是1+4+0=5,以同樣的計算方式,可以得到不同的分組情況和相應(yīng)的SS值,如下圖。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式
手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

我們找出SS值最小的分組,上圖看到分成4群即AB分成一類,C、D、E單獨一類離差平方和最小(為1),分成3群時最小的SS值是3.5,其他情況下的分群數(shù)量最小SS值也可看出。

接下來我們講層次聚類的建模流程。

1. 針對業(yè)務(wù)需求,我們select到相關(guān)的數(shù)據(jù)集,通常要經(jīng)過處理才能進行分析:

a) 缺失值

b) 異常值(極大或極?。?/span>

c) 分類變量需要轉(zhuǎn)化為啞變量(0/1數(shù)值)

d) 分類變量類別過多

當然有些算法允許有缺失值、異常值等資料,如決策樹,但聚類不支持這些情況,所以要處理。

2.要做變量標準化

變量的量綱的不一樣引起計算距離的偏差,因此要統(tǒng)一,統(tǒng)一的方式有兩種方法:

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

3.不同維度的變量,相關(guān)性盡量低

圖12演示了大部分公司業(yè)務(wù)普遍性的變量分類模式,如圖12,將數(shù)據(jù)分成購買記錄數(shù)據(jù)(如消費頻率、消費的間隔周期等)、消費習(xí)慣行為等數(shù)據(jù)(如消費的區(qū)域)、第三方行為數(shù)據(jù)(如網(wǎng)絡(luò)瀏覽偏好等)。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖12

4.層次聚類演示和確定聚類數(shù)

層次聚類的一大優(yōu)點是可以結(jié)合聚類可視化來對聚類結(jié)果進行業(yè)務(wù)上的理解和驗證,圖13是幾個省份的經(jīng)濟數(shù)據(jù)聚類結(jié)果,肉眼觀察,如果你分成4的話,那上海、廣東是單獨一類,天津、廣西、福建、遼寧、河北是另外一類,浙江、江蘇、山東、是第四類,那么現(xiàn)在看看算法的聚類跟我看左圖的肉眼觀察是否一致,如果一致,那說明算法在解釋上也是很好的;

不過看右邊的樹形圖展示,其兩類是建議的,即福建、遼寧、河北、天津、廣西是一類,其他省份為另外一類,因為這樣劃分類與類之間的距離最長(差異最大),這里根據(jù)你的聚類觀察結(jié)合業(yè)務(wù)需求分成4類,或者根據(jù)算法的建議分成2類且能在商業(yè)情景下能夠得到解釋也可(這里根據(jù)當時各省的情況,上海跟山東劃分一類應(yīng)該不合理的,上海是一線城市,這里分成4類合適點)。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖13

值得一提的是層次分類可以得到較為理想的分類數(shù)量,但是難處理大量樣本數(shù)據(jù)。所以我們需要講另外一種聚類方法。

第二種要講的聚類是叫kmeans聚類,也就是我們常說的k均值聚類。

Kmeans聚類的算法步驟:

1.選擇數(shù)據(jù),初始化中心點

2.將離中心點較近的點劃分到相應(yīng)的類

3.更新類的中心

4.重新將離數(shù)據(jù)近的點劃分到相應(yīng)的類

5.反復(fù)進行上面3,4步驟,直到分類的結(jié)果不再變化

圖14是該算法一個簡單的演示。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖14

首先在我需要分類的數(shù)據(jù)上隨機選5個中心點(即K=5),然后計算觀測點與中心點的距離,劃分到相應(yīng)的中心點所屬的群里,接著不用第一次設(shè)置的中心點,現(xiàn)在重新設(shè)置5個中心點的位置,繼續(xù)計算觀測點與現(xiàn)在中心點的位置,基于遠近劃分到相應(yīng)的5個不同群中,反復(fù)重復(fù)這種設(shè)置中心點,劃分數(shù)據(jù)這種操作,直到數(shù)據(jù)的劃分情況不再發(fā)生變動。

Kmeans聚類的建模流程同層次聚類一樣,即

1.預(yù)先處理變量的缺失值、異常值

2.變量標準化

3.不同維度的變量,相關(guān)性盡量低

4.確定合適的分群個數(shù)

不過在K值選擇上主要推薦輪廓系數(shù)(Silhouette Coefficient),并結(jié)合以下注意事項:

  • 分群結(jié)果的穩(wěn)定性
  • 重復(fù)多次分群,看結(jié)果是否穩(wěn)定
  • 分群結(jié)果是否有好解釋的商業(yè)意義

圖15是輪廓系數(shù)的公式

樣本輪廓系數(shù)

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

整體輪廓系數(shù)

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖15

其中a(i)表示觀測i到同一類內(nèi)觀測點距離的均值,b(i)表示觀測點i到不同類內(nèi)所有點距離的均值的最小值,S(i)表示觀測i的輪廓系數(shù),若a(i)小于b(i)則說明該觀測點在聚類的類中是合理的,此時a(i)/b(i)的值趨向于0,那么S(i)越接近1,聚類的效果越好;若a(i)大于b(i),說明觀測點還不如在別的類中,聚類的效果不好,此時b(i)/a(i)的值趨向于0,從而S(i)趨向于-1,若a(i)=b(i),則不能判斷觀測點i在哪個類效果中較好,此時S(i)為0,S(i)的值域-1到1,其值越小表示聚類的效果越差,其值越大代表聚類效果好,將所以觀測點的輪廓系數(shù)值相加求均值,就可以得到整個已聚類數(shù)據(jù)集的輪廓系數(shù),同樣,衡量其聚類好壞的標準與單個觀測點的輪廓系數(shù)的衡量方式是一致的。

不過這里還需注意一下,Kmeans處理大量樣本聚類有優(yōu)勢,但聚類的結(jié)果展示上不如層次聚類有好理解和可解釋性,所以使用kmeans聚類后,所做的聚類事后分析,往往要借助決策樹形圖來輔助理解。

5.聚類事后分析

聚類分好后需要拿來給營銷相關(guān)人員看,這就需要分類的結(jié)果可解釋性好:里面到底是怎么根據(jù)不同維度來將數(shù)據(jù)分群的,然后跟業(yè)務(wù)經(jīng)驗得到驗證;這里借助決策樹的可視化(決策樹圖)來實現(xiàn),我們知道決策樹有監(jiān)督的學(xué)習(xí)方法,這里的處理就是把上面聚類算法得到的類別看成目標y,根據(jù)之前的各維度特征來使用決策樹算法。如圖16是一個先聚類后再用決策樹的一個可視化結(jié)果展示。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖16

怎么看決策樹的可視化圖呢,從上到下,最上面的叫根節(jié)點,其中value是一個含四個元素的列表,意思是分成4類,往下的剪頭叫拆分,直到不能再拆分的每個“矩形”叫葉子節(jié)點,中間銜接的“矩形”叫決策節(jié)點;

那怎么從決策樹形圖看出分類結(jié)果的好壞以及對每個群進行描述達到可解釋的目的?

我們看value里是否其中一個元素的數(shù)值要遠遠大于其他的,如在第三層,value=18750遠遠大于47,1060,29,意思是說有18750個點被劃分到了class為2的類里,這一層其他class類的劃分情況也是很“干凈”的,所以決策樹在第三層的時候(劃分4類)分類效果就很好了;

那么怎么解讀呢,比如class2的用戶群特點是:不用柜臺(TBM<-0.07)、也不用ATM POS機(ATM POS<=-0.374),那么顯然這類客戶什么都不用,說明在該銀行業(yè)務(wù)當中,class2這類群體是流失客戶,再看看class0這類群體特征:不用柜臺,但是用POS機,很可能是這些喜歡方便,取款金額頻繁,取款金融少等這些特點的人群,其他兩個類同樣可以根據(jù)這種樹形圖來解釋。

回答第三個問題,對所有的觀測值分好類之后,如何對每一個類進行特征描述?

聚類的結(jié)果要詳細的作描述性統(tǒng)計,甚至作抽樣的客戶訪談,以了解客戶的真實情況,因此讓業(yè)務(wù)人員滿足客戶管理的目標,是聚類的終極目的。

上述建模流程是聚類的一般性流程,其實就應(yīng)用角度來說,快速聚類兩種運用場景是:

1. 發(fā)現(xiàn)異常情況:如果不對數(shù)據(jù)進行任何形式的轉(zhuǎn)換,只是經(jīng)過中心標準化或級差標準化就進行快速聚類,會根據(jù)數(shù)據(jù)分布特征得到聚類結(jié)果。這種聚類會將極端數(shù)據(jù)聚為幾類。這種方法適用于統(tǒng)計分析之前的異常值剔除,對異常行為的挖掘,比如監(jiān)控銀行賬戶是否有洗錢行為、監(jiān)控POS機是有從事套現(xiàn)、監(jiān)控某個終端是否是電話卡養(yǎng)卡客戶等等。

2. 將個案數(shù)據(jù)做劃分:出于客戶細分目的的聚類分析一般希望聚類結(jié)果為大致平均的幾大類,因此需要將數(shù)據(jù)進行轉(zhuǎn)換,這種方法適用場景包括客戶消費行為聚類、客戶積分使用行為聚類等等。

文章的最后,我們再來總結(jié)一下本文的內(nèi)容,就算法角度,講了層次聚類和kmeans聚類,就建模層面來說,通常的流程是:變量歸一化=>分布轉(zhuǎn)換=>主成分=>聚類,歸一化我們是希望剔除掉不同量綱,范圍的影響(因為要計算距離),而分布轉(zhuǎn)換這個步驟是因為我們希望將客戶均勻的分為若干類,在變量上,我們希望不同維度下的變量,相關(guān)性程度較低,對于多維的數(shù)據(jù)集來說,可以使用主成分分析來將變量進行降維;而使用聚類算法得到分群數(shù)量需要進行事后分析,來跟業(yè)務(wù)經(jīng)驗進行驗證,達到可解釋且可進行客戶畫像的目的。

如果應(yīng)用需求是發(fā)現(xiàn)異常情況下的聚類,其流程為變量歸一化=>主成分=>聚類,因為這種需求會根據(jù)數(shù)據(jù)分布特征得到聚類結(jié)果,未分布轉(zhuǎn)換情況下,這種聚類會將極端數(shù)據(jù)聚為幾類,從而幫助我們對異常行為進行挖掘。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }