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個簇的相異度。然後将該資料配置設定到相異度最小的對應的簇中,每次配置設定完畢後,更新簇的原型
然後計算目标函數,然後對比目标函數值是否改變,循環直到目标函數值不在變化為止。