幾種常見的聚類分析


聚類分析

指將對象的集合分組為由類似的對象組成的多個類的分析過程,目的是在相似的基礎上收集數據來分類。

聚類算法分為:

1)划分聚類:K-means聚類、K-中心點聚類、CLARANS算法

2)層次聚類 :DIANA算法、BIRCH算法、Chameleon算法

3)模糊聚類 :EM算法

4)基於密度聚類:OPTICS算法、DBSCAN算法

K-Means(K均值)聚類

算法步驟:
(1)
首先我們選擇一些類/組,並隨機初始化它們各自的中心點。中心點是與每個數據點向量長度相同的位置。這需要我們提前預知類的數量(即中心點的數量)。
(2)
計算每個數據點到中心點的距離,數據點距離哪個中心點最近就划分到哪一類中。
(3)
計算每一類中中心點作為新的中心點。
(4)
重復以上步驟,直到每一類中心在每次迭代后變化不大為止。也可以多次隨機初始化中心點,然后選擇運行結果最好的一個。

 

 

 

 

K-Modes算法

X-01 為什么要用k-modes算法

傳統的k-means算法只適用於連續屬性的數據集,但對於離散屬性的數據集,計算簇的均值以及點之間的歐式距離就變得不合適了。k-modes作為k-means的一種擴展,適用於離散屬性的數據集。

 

X-02 k-modes算法介紹

假設有N個樣本,M個屬性且全是離散的,簇的個數為k

 

步驟一:隨機確定k個聚類中心C1,C2...CkC1,C2...Ck,CiCi是長度為M的向量,Ci=[C1i,C2i,...,CMi]Ci=[Ci1,Ci2,...,CiM]

 

步驟二:對於樣本xj(j=1,2,...,N)xj(j=1,2,...,N),分別比較其與k個中心之間的距離(這里的距離為不同屬性值的個數,假如x1=[1,2,1,3],C1=[1,2,3,4]那么x1x1與C1C1之間的距離為2)

 

步驟三:將xjxj划分到距離最小的簇,在全部的樣本都被划分完畢之后,重新確定簇中心,向量CiCi中的每一個分量都更新為簇ii中的眾數

 

步驟四:重復步驟二和三,直到總距離(各個簇中樣本與各自簇中心距離之和)不再降低,返回最后的聚類結果。

 

算例

假設有7個樣本,每個樣本有4個屬性,表示為矩陣X

 

隨機確定2個聚類中心C1=[1,5,1,3],C2=[2,5,1,2]

 

划分結果用Y表示

即第1、2、3、5個樣本划分到,第4、6個樣本被划分到C2

接下來更新C1、C2

即第1、2、3、5個樣本被划分到C1,即第4、6個樣本被划分到C2

接下來更新C1和C2

C1=[1,6,0,3],     C2=[2,7,0,4]

不斷重復步驟二和三了

 

安裝k-modes參考官方網站:https://pypi.org/project/kmodes/

安裝kmodes算法遇到的版本兼容問題

from kmodes.kmodes import Kmodes

ImportError: No module named 'kmodes'

Python中K-modes算法

# -*- coding: utf-8 -*-

"""

Created on Fri Oct 12 15:47:15 2018

 

@author: Administrator

"""

 

import numpy as np

 

from kmodes.kmodes import KModes

 

import pandas as pd

 

#反恐數據集

fileAdress = 'E:\\1MyProject\\python\\classificationModel\\data\\fankongData_1.xlsx'

 

data = pd.read_excel(fileAdress)#讀取數據

 

km = KModes(n_clusters=4, init='Huang', n_init=5, verbose=1)

 

clusters = km.fit_predict(data)

 

# Print the cluster centroids

print(km.cluster_centroids_)

 

'''計算正確歸類率'''

score = np.sum(clusters[:int(len(clusters)/2)])+(len(clusters)/2-np.sum(clusters[int(len(clusters)/2):]))

 

score = score/len(clusters)

 

if score >= 0.5:

    print('正確率:'+ str(score))

else:

    print('正確率:'+ str(1-score))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM