1. 程式人生 > >R教材10 聚類分析

R教材10 聚類分析

  1. 營銷研究人員根據消費者的人口統計特徵和購買行為的相似性制定客戶細分戰略
  2. 聚類的一般步驟:
    1. 選擇對聚類結果有效的資料
    2. 對每個變數標準化:z分數scale(),分位數或(x-μ)/平均絕對偏差;變數間數值差距較大時必須標準化
    3. 尋找異常點並去除(或研究):
      1. outliers包中有篩選單變數離群點的函式
      2. mvoutlier包中有篩選多元變數離群點的函式
    4. 計算距離?dist,預設用歐式距離
    5. 選擇聚類演算法
      1. 層次聚類適合小樣本(n<150)
      2. 劃分聚類適合大量的資料,但要事先確定聚類的個數
    6. 確定聚類方法
    7. 確定類的數目NbClust()
    8. 獲取最終聚類方案
    9. 結果視覺化
    10. 解讀類:類中的相似和類間的不同
    11. 驗證聚類:結果具有實際意義
  3. 計算距離
    1. dist(x,method = )計算矩陣matrix或資料框data.frame所有行之間的距離
      1. as.matrix(d)[1:x,1:x]將距離結果用矩陣表示
      2. 適用連續型資料
    2. 存在分類資料時,cluster::daisy()獲得相異矩陣
  4. 常見的聚類演算法有:
    1. 用到的包:cluster,NbClust,flexclust,fMultivar,ggplot2,rattle
    2. 層次聚類
      1. 將每個行當做一個類
      2. 計算每個類兩兩之間的距離
      3. 將最短的兩類合為一類
      4. 重複2和3步驟直到只剩一個類
    3. 劃分聚類
      1. k均值:適合大資料集,但是所有變數要求是連續的,並且較敏感,在非凸聚類的情況下會變差;這種處理導致觀測值到結果的聚類中心的平方的總和為最小
        1. 選擇k箇中心點,隨機選擇k行
        2. 將每個資料點分配到最近的中心點
        3. 重新計算每類的中心點
        4. 分配每個資料到其最近的中心點
        5. 重複直到聚類不再變化或最大迭代次數(10次)
    4. 兩類之間的距離定義
      1. 單聯動,單鏈single:簇的鄰近度為不同簇的兩個最近的點之間的鄰近度;發現鏈條式的類
      2. 全聯動,全鏈complete:簇的鄰近度為不同簇的兩個最遠的點之間的鄰近度;發現大致相等的直徑緊湊類,對異常值敏感
      3. 平均聯動,組平均average:簇間的所有點對的組合的鄰近度的平均;鏈式方法的折中
      4. 質心法centroid:計算簇的質心之間的距離來計算簇的鄰近度(合併的兩個簇可能比前一步合併的簇對更相似,而其他方法被合併簇之間的距離隨層次聚類進展單調增加);質心即變數均值向量;較穩健,但是上下兩種方法表現得好
      5. Ward法ward:簇的鄰近度的定義為兩個簇合並時導致的平方誤差的增量(最小);傾向將少量觀測值的類聚合在一起,異常值敏感
  5. R中的層次聚類方法實現:
    1. 層次聚類hclust(d,method = ),d是距離矩陣
    2. NbClust(matrix/data.frame,method=,distance=,min.nc,max.nc)返回聚類指數,顯示聚類個數的投票,從而輸出建議聚類的最佳數目
    3. cutree(fit,k=)將樹狀圖分為k類
      1. table(cutree)檢視分類後的物件個數
    4. aggregate(data.frame,by=list(cluster=cutree),median),資料框分類依據cutree分類後獲取每類的中位數(找到中心)
    5. rect.hclust(fit,k=)作圖後疊加分類後的影象
  6. R中的劃分聚類方法實現:
    1. 隨機種子set.seed(1234)
    2. k均值聚類:kmeans(matrix/data.frame,centers)
      1. 均值的使用說明所有的變數必須是連續的,並且會受到異常值的影響,在非凸聚類中表現很差
      2. 資料標準化scale(dataframe)
      3. 計算類個數NbCluster::NbCluster(dataframe,min.nc,max.nc,method),method方法根據當前的聚類方法的選擇計算可用的類個數
        1. table(nc$Best.n[1,])檢視具體投票情況
      4. kmeans(dataframe,k,nstart),nstart初始聚類中心選擇次數,一般為20
      5. aggregate(原資料,by=list(cluster=fit$cluster),mean),統計原資料的中心點
    3. 圍繞中心點的劃分:pam(dataframe,k,metric="euclidean",stand=T)
      1. stand即是否標準化
      2. clusplot(fit)結果的影象可用因子分析發現實際的變數物件
  7. 聚類檢驗:避免不存在的類
    1. 立方聚類規則CCC發現不存在的結構,當CCC值為負且隨著類數的增加而遞減時,說明是單調變差的,這和聚類的定義相悖
      1. plot(NbCluster$All.index[,4],type="o")CCC曲線
  8. 拓展
    1. https://cran.r-project.org/web/views/Cluster.html
    2. https://www-users.cs.umn.edu/~kumar001/dmbook/index.php資料探勘演算法,英文原版最新