K-prototype是處理混合屬性聚類的典型算法。繼承Kmean算法和Kmode算法的思想。並且加入了描述數據簇的原型和混合屬性數據之間的相異度計算公式。
常規定義:X={X1,X2,X3………Xn}表示數據集(含有n個數據),其中數據有m個屬性。
數據Xi={X11,X12,X13……….X1m}
Aj表示屬性j
dom(Aj) 表示屬性j的值域: 對於數值屬性,值域dom(Aj)表示是取值范圍;對於分類屬性,值域dom(Aj)表示集合
Xij 表示數據I 的第j個屬性。
同樣,數據Xi也可表示為

數據總共有m個屬性,不妨設前p個屬性為數值屬性(r代表),后m-r個屬性為分類屬性(c代表)
K-prototype算法是設定了一個目標函數,類似於kmean的SSE(誤差平方和),不斷迭代,直到目標函數值不變。
同時,K-prototype算法提出了混合屬性簇的原型,我們可以理解原型就是數值屬性聚類的質心。混合屬性中存在數值屬性和分類屬性,其原型的定義是數值屬性原型用屬性中所有屬性取值值的均值,分列屬性原型是分類屬性中選取屬性值取值頻率最高的屬性。合起來就是原型。
相異度距離: 一般來說,數值屬性的相異度一般選用歐式距離,在K-prototype算法中混合屬性的相異度分為屬性屬性和分類屬性分開求,然后相加。
對於分類屬性:我們使用海明威距離,即屬性值相同,為0 ;屬性值不同,為1。
對於分類屬性:
對於數值屬性:
計算數值屬性對應的歐式距離
則數據 和簇的距離(相異度)為:

其中 前P個數值屬性,后m個是分類屬性, 是簇Q的原型的j屬性 ,u是分類屬性的權重因子
其K-prototype的目標函數是:
目標函數這個定義對於算法來說很重要,都是作者自己想出來的。然后進行實驗驗證的。看論文最難學的就是目標函數。人家想出來的很牛,但是自己卻沒有能力想出來,還是得多看論文。
有了相異度和原型的定義。
算法的步驟是:
輸入:聚類簇的個數k, 權重因子
輸出:產生好的聚類。
步驟:從數據集中隨機選取k個對象作為初始的k個簇的原型
遍歷數據集中的每一個數據,計算數據與k個簇的相異度。然后將該數據分配到相異度最小的對應的簇中,每次分配完畢后,更新簇的原型
然后計算目標函數,然后對比目標函數值是否改變,循環直到目標函數值不在變化為止。
