原理篇
定義
聚類分析也稱群分析或點群分析奋救,它是研究多要素事物分類問題的數(shù)量方法紧憾,是一種新興的多元統(tǒng)計方法,是當代分類學與多元分析的結(jié)合签夭。
聚類分析的基本原理是,根據(jù)樣本的屬性,使用某種算法計算相似性或者差異性指標伐憾,以確定每個個案之間的親疏關系般眉,最終將所有個案分為多個相似組(即聚類),同一聚類的個案彼此相同慎宾,不同聚類中的個案彼此不同丐吓。常見的聚類方法有K均值聚類法、系統(tǒng)聚類法(也叫層次聚類法)等璧诵。
簡而言之汰蜘,聚類分析根據(jù)樣本的多個屬性,將相似的對象聚為一類之宿,使同類之間盡量同質(zhì)族操、不同類之間盡量異質(zhì)。
聚類分析常用于對市場進行分群,在用戶體驗研究中色难,常用來根據(jù)用戶的多種屬性進行用戶分群泼舱。
特征
- 聚類分析簡單、直觀枷莉。
- 聚類分析主要應用于探索性的研究娇昙,其分析的結(jié)果可以提供多個可能的解,選擇最終的解需要研究者的主觀判斷和后續(xù)的分析笤妙。
- 不管實際數(shù)據(jù)中是否真正存在不同的類別冒掌,利用聚類分析都能得到分成若干類別的解。
- 聚類分析的解完全依賴于研究者所選擇的聚類變量蹲盘,增加或刪除一些變量對最終的解都可能產(chǎn)生實質(zhì)性的影響股毫。
- 異常值和特殊的變量對聚類有較大影響,當分類變量的測量尺度不一致時召衔,需要事先做標準化處理铃诬。
K-means算法
K均值算法比較簡單,在SPSS中也被成為快速聚類苍凛,K均值算法中的每個類都是使用對象的平均值來表示趣席。
步驟:
- 將所有對象隨機分配到k個非空的類中。
- 計算每個類中所有對象的平均值醇蝴,表示類的中心點宣肚。
- 根據(jù)每個對象與各個類中心的距離,分配給最近的類哑蔫。
- 若滿足【終止條件】钉寝,則結(jié)束聚類;否則闸迷,轉(zhuǎn)到步驟2嵌纲。
終止條件可以是:
- 沒有(或者小于某個數(shù)值的)對象被重新分配給不同的類;
- 沒有(或者小于某個數(shù)值的)類中心發(fā)生變化腥沽;
- 誤差平方和(SSE)達到局部最写摺;
- 達到指定的迭代次數(shù)今阳。
K均值算法必須在平均值有意義的情況下才能使用师溅,因此不適用于分類變量。需要給定聚類數(shù)目盾舌,并且對異常數(shù)據(jù)和數(shù)據(jù)噪聲比較敏感墓臭。
系統(tǒng)聚類算法
系統(tǒng)聚類有兩種類型:聚合的(自下而上的)或者分解的(自上而下的)。
聚合的系統(tǒng)聚類法將每個對象都看做獨立的一類妖谴,每一次通過合并最相似的聚類來形成上一層次中的聚類窿锉,整個當全部數(shù)據(jù)點都合并到一個聚類的時候停止或者達到某個終止條件而結(jié)束——這是大部分系統(tǒng)聚類所采取的方式酌摇。
分解的系統(tǒng)聚類法首先將所有對象看成一類,然后把根節(jié)點分裂為一些子聚類嗡载,每個子聚類再遞歸地繼續(xù)往下分裂窑多,直到出現(xiàn)只包含一個數(shù)據(jù)點的單節(jié)點聚類出現(xiàn),即每個聚類中僅包含一個數(shù)據(jù)點洼滚。
系統(tǒng)聚類算法的好處是分析者可以對比不同聚類數(shù)量的結(jié)果埂息,從中選擇更感興趣(更有解釋力)的結(jié)果,這種對比可以通過生成的聚類樹進行遥巴。
實踐篇——使用模擬數(shù)據(jù)進行K均值聚類
用R生成模擬數(shù)據(jù)
為什么不使用現(xiàn)成的數(shù)據(jù)千康,而要用R來生成數(shù)據(jù)呢?
主要是因為在自己生成的數(shù)據(jù)中挪哄,我們可以預先定義存在哪些類型的用戶群吧秕、每個用戶群的屬性是怎樣的。
通過這種方式我們得以知道“客觀現(xiàn)實”是怎樣的迹炼,后面用SPSS做聚類分析時,可以將分析得出的結(jié)果與我們預設的“現(xiàn)實”做對比颠毙,看一下效果如何——聚類分析得出的類對我們預設的類的還原度有多高斯入。
假設我們要做的是一款企業(yè)管理軟件A的用戶畫像,所得數(shù)據(jù)中一共有1200個有效樣本蛀蜜,其中存在三類用戶:
- 第一類用戶是“典型管理者”刻两,年齡大約在30-40歲之間,對使用A軟件態(tài)度相對較積極滴某,認為公司的管理是很自由的磅摹。其樣本共有200人。
- 第二類用戶是“個性型員工”霎奢,年齡大約在20-25歲户誓,對使用A軟件態(tài)度波動較大,認為公司的管理很不自由幕侠。其樣本共有400人帝美。
- 第三類用戶是“安穩(wěn)型員工”,年齡大約在25-30歲晤硕,對使用A軟件態(tài)度比較消極悼潭,覺得公司的管理是相對自由的。其樣本共有600人舞箍。
接下來使用R來生成以上描述的三類用戶的數(shù)據(jù)舰褪,代碼如下(對代碼沒興趣的同學可以直接跳過):
#定義每類的數(shù)據(jù)量
n1=200
n2=400
n3=600
#畫像1的數(shù)據(jù)
set.seed(1000)
age1=rnorm(n1,mean=35,sd=3)
set.seed(1100)
attitude1=rnorm(n1,mean=8,sd=1.5)
set.seed(1200)
dof1=rnorm(n1,mean=8,sd=1)
#畫像2的數(shù)據(jù)
set.seed(2000)
age2=rnorm(n2,mean=23,sd=2)
set.seed(2100)
attitude2=rnorm(n2,mean=5,sd=2)
set.seed(2200)
dof2=rnorm(n2,mean=4,sd=1.5)
#畫像3的數(shù)據(jù)
set.seed(3000)
age3=rnorm(n3,mean=28,sd=2)
set.seed(3100)
attitude3=rnorm(n3,mean=3,sd=1.5)
set.seed(3200)
dof3=rnorm(n3,mean=7,sd=1.5)
#合并所有數(shù)據(jù)
age=c(age1,age2,age3)
attitude=c(attitude1,attitude2,attitude3)
dof=c(dof1,dof2,dof3)
orig_type=c(rep(1,n1),rep(2,n2),rep(3,n3))
data=data.frame(age,attitude,dof,orig_type)
#輸出到表格
write.csv(data,"F:/R/R-cluster.csv")
簡而言之,三類用戶的特征是這樣的:
類別 | 年齡 | 對A的態(tài)度 | 公司管理自由度 | 樣本數(shù) |
---|---|---|---|---|
第一類 | N(35,3) | N(8,1.5) | N(8,1) | 200 |
第二類 | N(23,2) | N(5,2) | N(4,1.5) | 400 |
第三類 | N(28,2) | N(3,1.5) | N(7,1.5) | 600 |
用SPSS做K均值聚類
接下來使用R生成的數(shù)據(jù)進行K均值聚類疏橄,看看分析得出的結(jié)果與我們預設的類別的關系占拍。
1、先看看三個變量的相關性矩陣:
我們發(fā)現(xiàn)幾個變量之間相關性都不高,因此可以全部作為聚類的變量進入后續(xù)分析過程刷喜。
2残制、接下來對三個變量進行標準化:
SPSS操作:分析-描述統(tǒng)計-描述-勾選“將標準化得分另存為變量”
3、K均值聚類:
SPSS操作:分析-分類-K均值聚類
填寫聚類數(shù):3
“保存”:勾選聚類成員掖疮、與聚類中心的距離
“選項”:勾選ANOVA表
4初茶、查看方差分析結(jié)果:
聚類分析得出的類別在三個變量上都呈現(xiàn)出了顯著差異,可見三個變量在聚類分析中都起到了作用浊闪,當前聚類分析結(jié)果可以保留恼布。
預設類別與聚類結(jié)果對比
先看看聚類得出的結(jié)果:
跟我們最初定義的用戶特征對比(詳見上面的表格),發(fā)現(xiàn)聚類分析對用戶類別的還原度非常高搁宾!聚類得出的幾個類別和最初定義的類別在三個變量的均值和類別樣本數(shù)上差異都很姓酃(注意類別的順序不同)。
我們再用一個交叉表盖腿,看看樣本的分布情況:
SPSS操作:分析-描述統(tǒng)計-交叉表爽待,將原始數(shù)據(jù)定義的類別和K均值聚類得出的類別分別放在行和列變量中。
勾選“顯示復式條形圖”翩腐。
橫軸表示我們預設的類別鸟款,縱軸表示聚類分析得出的類別∶裕可以看出非常明顯的對應關系何什,我們定義的第一類用戶大部分被聚類為類別3,第二類用戶大部分被聚類為類別1等龙,第三類用戶大部分被聚類為類別2——聚類分析定義出來的用戶群體处渣,不僅僅在屬性上與預設的一致,連用戶構(gòu)成都很一致蛛砰。