0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何選擇適合的聚類算法?聚類分析時需要使用什么變量?

資治通信 ? 來源:lp ? 2019-04-01 17:19 ? 次閱讀

聚類分析(cluster analysis)是常見的數(shù)據(jù)挖掘手段,其主要假設(shè)是數(shù)據(jù)間存在相似性。而相似性是有價值的,因此可以被用于探索數(shù)據(jù)中的特性以產(chǎn)生價值。常見應(yīng)用包括:

用戶分割:將用戶劃分到不同的組別中,并根據(jù)簇的特性而推送不同的廣告欺詐檢測:發(fā)現(xiàn)正常與異常的用戶數(shù)據(jù),識別其中的欺詐行為

如上圖,數(shù)據(jù)可以被分到紅藍(lán)綠三個不同的簇(cluster)中,每個簇應(yīng)有其特有的性質(zhì)。顯然,聚類分析是一種無監(jiān)督學(xué)習(xí),是在缺乏標(biāo)簽的前提下的一種分類模型。當(dāng)我們對數(shù)據(jù)進(jìn)行聚類后并得到簇后,一般會單獨(dú)對每個簇進(jìn)行深入分析,從而得到更加細(xì)致的結(jié)果。

常見的聚類方法有不少,比如K均值(K-Means),譜聚類(Spectral Clustering),層次聚類(Hierarchical Clustering),大部分機(jī)器學(xué)習(xí)參考書上都有介紹,此處不再贅述。今天主要探討實(shí)際聚類分析時的一些技巧。

01 如何選擇適合的聚類算法

聚類算法的運(yùn)算開銷往往很高,所以最重要的選擇標(biāo)準(zhǔn)往往是數(shù)據(jù)量。

但數(shù)據(jù)量上升到一定程度時,如大于10萬條數(shù)據(jù),那么大部分聚類算法都不能使用。最近讀到的一篇對比不同算法性能隨數(shù)據(jù)量的變化[1]很有意思。在作者的數(shù)據(jù)集上,當(dāng)數(shù)據(jù)量超過一定程度時僅K均值和HDBSCAN可用。

我的經(jīng)驗(yàn)也是,當(dāng)數(shù)據(jù)量超過5萬條數(shù)據(jù)以后,K均值可能是比較實(shí)際的算法。但值得注意的是,K均值的效果往往不是非常好,我曾在如何正確使用「K均值聚類」?中對K均值進(jìn)行過總結(jié):

因此不難看出,K均值算法最大的優(yōu)點(diǎn)就是運(yùn)行速度快,能夠處理的數(shù)據(jù)量大,且易于理解。但缺點(diǎn)也很明顯,就是算法性能有限,在高維上可能不是最佳選項(xiàng)。

一個比較粗淺的結(jié)論是,在數(shù)據(jù)量不大時,可以優(yōu)先嘗試其他算法。當(dāng)數(shù)據(jù)量過大時,可以試試HDBSCAN。僅當(dāng)數(shù)據(jù)量巨大,且無法降維或者降低數(shù)量時,再嘗試使用K均值。

一個顯著的問題信號是,如果多次運(yùn)行K均值的結(jié)果都有很大差異,那么有很高的概率K均值不適合當(dāng)前數(shù)據(jù),要對結(jié)果謹(jǐn)慎的分析。

另一種替代方法是對原始數(shù)據(jù)進(jìn)行多次隨機(jī)采樣得到多個小樣本,并在小樣本上聚類,并融合結(jié)果。比如原始數(shù)據(jù)是100萬,那么從中隨機(jī)采樣出100個數(shù)據(jù)量等于1萬的樣本,并在100個小數(shù)據(jù)集上用更為復(fù)雜的算法進(jìn)行聚類,并最終融合結(jié)果。

此處需要注意幾點(diǎn)問題:

隨機(jī)采樣的樣本大小很重要,也不能過小。需要足夠有代表性,即小樣本依然可以代表總體的數(shù)據(jù)分布。如果最終需要劃分很多個簇,那么要非常小心,因?yàn)樾颖究赡軣o法體現(xiàn)體量很小的簇。

在融合過程中要關(guān)注樣本上的聚類結(jié)果是否穩(wěn)定,隨機(jī)性是否過大。要特別注意不同樣本上的簇標(biāo)號是否統(tǒng)一,如何證明不同樣本上的簇結(jié)果是一致的。

因此我的經(jīng)驗(yàn)是,當(dāng)數(shù)據(jù)量非常大時,可以優(yōu)先試試K均值聚類,得到初步的結(jié)果。如果效果不好,再通過隨機(jī)采樣的方法構(gòu)建更多小樣本,手動融合模型提升聚類結(jié)果,進(jìn)一步優(yōu)化模型。

02 聚類分析時需要使用什么變量?

這個是一個非常難回答的問題,而且充滿了迷惑性,不少人都做錯了。舉個簡單的例子,我們現(xiàn)在有很多客戶的商品購買信息,以及他們的個人信息,是否該用購買信息+個人信息來進(jìn)行聚類呢?

未必,我們需要首先回答最重要的一個問題:我們要解決什么問題?

如果我們用個人信息,如性別、年齡進(jìn)行聚類,那么結(jié)果會被這些變量所影響,而變成了對性別和年齡的聚類。所以我們應(yīng)該先問自己,“客戶購物習(xí)慣”更重要還是“客戶的個人信息”更重要?

如果我們最在意的是客戶怎么花錢,以及購物特征,那就應(yīng)該完全排除客戶的個人信息(如年齡性別家庭住址),僅使用購買相關(guān)的數(shù)據(jù)進(jìn)行聚類。這樣的聚類結(jié)果才是完全由購買情況所驅(qū)動的,而不會受到用戶個人信息的影響。

那該如何更好的利用客戶的個人信息呢?這個應(yīng)該被用在聚類之后。當(dāng)我們得到聚類結(jié)果后,可以對每個簇進(jìn)行分析,分析簇中用戶的個人情況,比如高凈值客戶的平均年齡、居住區(qū)域、開什么車。無關(guān)變量不應(yīng)該作為輸入,而應(yīng)該得到聚類結(jié)果后作為分析變量。

一般情況下,我們先要問自己,這個項(xiàng)目在意的是什么?很多時候個人信息被錯誤的使用在了聚類當(dāng)中,聚類結(jié)果完全由個人信息所決定(比如男性和女性被分到了兩個簇中),對于商業(yè)決策的意義就不大了。一般來說,應(yīng)該由商業(yè)數(shù)據(jù)驅(qū)動,得到聚類結(jié)果后再對每個簇中的用戶個人信息進(jìn)行整合分析。

但值得注意的是,這個方法不是絕對的。在聚類中有時候也會適當(dāng)引入個人信息,也可以通過調(diào)整不同變量的權(quán)重來調(diào)整每個變量的影響。

03 如何分析變量的重要性?

首先變量選擇是主觀的,完全依賴于建模者對于問題的理解,而且往往都是想到什么用什么。因?yàn)榫垲愂菬o監(jiān)督學(xué)習(xí),因此很難評估變量的重要性。介紹兩種思考方法:

考慮變量的內(nèi)在變化度與變量間的關(guān)聯(lián)性:一個變量本身方差很小,那么不易對聚類起到很大的影響。如果變量間的相關(guān)性很高,那么高相關(guān)性間的變量應(yīng)該被合并處理。直接采用算法來對變量重要性進(jìn)行排序:比如 Principal Feature Analysis [2],網(wǎng)上有現(xiàn)成的代碼 [3]。

另一個雞生蛋蛋生雞的問題是,如果我用算法找到了重要特征,那么僅用重要特征建??梢詥??這個依然不好說,我覺得最需要去除的是高相關(guān)性的變量,因?yàn)楹芏嗑垲愃惴o法識別高相關(guān)性,會重復(fù)計(jì)算高相關(guān)性特征,并夸大了其影響,比如K均值。

04 如何證明聚類的結(jié)果有意義?如何決定簇的數(shù)量?

聚類分析是無監(jiān)督學(xué)習(xí),因此沒有具體的標(biāo)準(zhǔn)來證明結(jié)果是對的或者錯的。一般的判斷方法無外乎三種:

人為驗(yàn)證聚類結(jié)果符合商業(yè)邏輯。比如我們對彩票客戶進(jìn)行聚類,最終得到4個簇,其中分為:

“高購買力忠實(shí)客戶”:花了很多錢的忠實(shí)客戶,他們可能常年購買且花費(fèi)不菲

“普通忠實(shí)客戶”:常年購買,但每次的購買額度都不大

“刺激性消費(fèi)單次購買者”:只購買了幾次,但是一擲千金

“謹(jǐn)慎的單次購買者”:只購買了幾次,每次買的都很謹(jǐn)慎

我們可以用通過商業(yè)邏輯來解釋聚類結(jié)果,結(jié)果應(yīng)該大致符合行業(yè)專家的看法。最終你的聚類結(jié)果需要回歸到現(xiàn)實(shí)的商業(yè)邏輯上去,這樣才有意義。

預(yù)先設(shè)定一些評估標(biāo)準(zhǔn),比如簇內(nèi)的緊湊度和簇間的疏離度,或者定義好的函數(shù)如Silhouette Coefficient。一般來說設(shè)定一個好的評估標(biāo)準(zhǔn)并不容易,所以不能死板的單純依賴評估函數(shù)。

通過可視化來證明不同簇之間的差異性。因?yàn)槲覀円话阌谐^兩個變量,所以會需要先對數(shù)據(jù)進(jìn)行壓縮,比如很多流形學(xué)習(xí)的方法多維縮放(multi-dimensional scaling)。

以下圖為例,我把數(shù)據(jù)分成了四個簇,并用T-SNE壓縮到二維并繪制出來。從直觀上看,不同簇間有了一定區(qū)別。類似的可視化也可以在變量間兩兩繪制,或者直接畫pairplot。

所以如何定義一個好的聚類結(jié)果?我認(rèn)為應(yīng)該符合幾個基本標(biāo)準(zhǔn):

符合商業(yè)常識,大致方向上可以被領(lǐng)域?qū)<宜?yàn)證可視化后有一定的區(qū)別,而并非完全隨機(jī)且交織在一起如果有預(yù)先設(shè)定的評估函數(shù),評估結(jié)果較為優(yōu)秀

因此決定簇的數(shù)量也應(yīng)該遵循這個邏輯,適當(dāng)?shù)臄?shù)量應(yīng)該滿足以上三點(diǎn)條件。如果某個簇的數(shù)量過大或者過小,那可以考慮分裂或者合并簇。

當(dāng)然,聚類作為無監(jiān)督學(xué)習(xí),有很多模棱兩可的地方。但應(yīng)時時牢記的是,機(jī)器學(xué)習(xí)模型應(yīng)服務(wù)商業(yè)決策,脫離問題空談模型是沒有意義的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)挖掘
    +關(guān)注

    關(guān)注

    1

    文章

    406

    瀏覽量

    24189
  • 聚類算法
    +關(guān)注

    關(guān)注

    2

    文章

    118

    瀏覽量

    12113
  • 聚類分析
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    7403

原文標(biāo)題:【集客經(jīng)營】干貨:如何對用戶進(jìn)行「聚類分析」?

文章出處:【微信號:xiacoinfo,微信公眾號:資治通信】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    一種基于GiST的層次算法

    層次方法是聚類分析的一個重要方法。該文利用通用搜索樹實(shí)現(xiàn)了一種新的層次算法,可以把整個
    發(fā)表于 04-23 10:10 ?24次下載

    算法研究

    算法研究:對近年來算法的研究現(xiàn)狀與新進(jìn)展進(jìn)行歸納總結(jié).一方面對近年來提出的較有代表性的
    發(fā)表于 10-31 08:57 ?18次下載

    基于PLSA模型的用戶興趣算法研究

    對用戶訪問日志數(shù)據(jù)進(jìn)行分析,構(gòu)造會話-類型矩陣,利用概率潛在語義分析模型建立合適的用戶興趣聚類分析算法,提高用戶興趣
    發(fā)表于 01-27 15:39 ?19次下載

    算法融合算法研究

    算法融合算法研究首先對
    發(fā)表于 08-10 15:08 ?33次下載
    <b class='flag-5'>聚</b><b class='flag-5'>類</b><b class='flag-5'>算法</b>及<b class='flag-5'>聚</b><b class='flag-5'>類</b>融合<b class='flag-5'>算法</b>研究

    一種擬人算法在PHM聚類分析中的應(yīng)用

    一種擬人算法在PHM聚類分析中的應(yīng)用_賀呈磊
    發(fā)表于 01-07 21:39 ?0次下載

    基于C均值的定位算法

    為了提高WSN節(jié)點(diǎn)定位精度,針對測距誤差對定位結(jié)果的影響,提出基于模糊C均值的定位算法。算法首先利用多邊定位算法得到若干個定位結(jié)果,利用
    發(fā)表于 11-09 17:47 ?10次下載

    聚類分析的簡單案例

    聚類分析經(jīng)常和有監(jiān)督分類相混淆,有監(jiān)督分類是為定義的分類響應(yīng)變量預(yù)測分組或者類別關(guān)系。而聚類分析,從另一方面考慮,它是一種無監(jiān)督分類技術(shù)。它能夠在所有輸入變量的基礎(chǔ)上識別出數(shù)據(jù)集中的分
    的頭像 發(fā)表于 02-23 10:00 ?7.5w次閱讀
    <b class='flag-5'>聚類分析</b>的簡單案例

    淺談Matlab中的聚類分析 Matlab程序的設(shè)計(jì)

    Matlab 提供系列函數(shù)用于聚類分析,歸納起來具體方法有如下: 方法一:直接,利用 clusterdata 函數(shù)對樣本數(shù)據(jù)進(jìn)行一次
    發(fā)表于 05-18 15:04 ?7298次閱讀

    如何使用K-Means算法改進(jìn)的特征加權(quán)算法詳細(xì)資料概述

    聚類分析是將研究對象分為相對同質(zhì)的群組的統(tǒng)計(jì)分析技術(shù),聚類分析的核心就是發(fā)現(xiàn)有用的對象簇。K-means
    發(fā)表于 12-20 10:28 ?10次下載

    正確選擇算法的建議

    算法十分容易上手,但是選擇恰當(dāng)?shù)?b class='flag-5'>聚算法并不是一
    的頭像 發(fā)表于 03-15 17:10 ?2100次閱讀

    如何在python中安裝和使用頂級算法?

    聚類分析是無監(jiān)督學(xué)習(xí)問題。它通常被用作數(shù)據(jù)分析技術(shù),用于發(fā)現(xiàn)數(shù)據(jù)中的有趣模式,例如基于其行為的客戶群。有許多
    的頭像 發(fā)表于 03-12 18:23 ?2196次閱讀

    10種算法和Python代碼1

    分享一篇關(guān)于的文章: **10種算法和Python代碼** 。文末提供`jupyter notebook`
    的頭像 發(fā)表于 02-20 13:57 ?812次閱讀
    10種<b class='flag-5'>聚</b><b class='flag-5'>類</b><b class='flag-5'>算法</b>和Python代碼1

    10種算法和Python代碼2

    分享一篇關(guān)于的文章: **10種算法和Python代碼** 。文末提供`jupyter notebook`
    的頭像 發(fā)表于 02-20 13:57 ?958次閱讀
    10種<b class='flag-5'>聚</b><b class='flag-5'>類</b><b class='flag-5'>算法</b>和Python代碼2

    10種算法和Python代碼3

    分享一篇關(guān)于的文章: **10種算法和Python代碼** 。文末提供`jupyter notebook`
    的頭像 發(fā)表于 02-20 13:57 ?1097次閱讀
    10種<b class='flag-5'>聚</b><b class='flag-5'>類</b><b class='flag-5'>算法</b>和Python代碼3

    10種算法和Python代碼4

    分享一篇關(guān)于的文章: **10種算法和Python代碼** 。文末提供`jupyter notebook`
    的頭像 發(fā)表于 02-20 13:57 ?1258次閱讀
    10種<b class='flag-5'>聚</b><b class='flag-5'>類</b><b class='flag-5'>算法</b>和Python代碼4