Das Hauptproblem aller klassischen Algorithmen zur Datenanalyse ist ihre geringe Anwendbarkeit auf praktische Probleme. Dies gilt auch für Clustering-Aufgaben.
In realen (und auch in wissenschaftlichen Problemen) wird es notwendig, Daten gemischten Typs zu gruppieren - zum Beispiel, wenn die Hälfte der Variablen numerisch und die Hälfte der Variablen kategorisch sind.
Unabhängig davon werden diese Aufgaben auf standardmäßige Weise gelöst (z. B. ein Artikel über das hierarchische Clustering rein kategorialer Daten - https://habr.com/ru/company/otus/blog/461741/ ), um jedoch das Problem des Clustering zu lösen gemischte Daten stellen einige Schwierigkeiten dar, die hauptsächlich mit der Komplexität der Berechnung des Abstands zwischen Beobachtungen verbunden sind.
Ein Moment der Theorie
Bestehende Methoden übernehmen die Entfernungsberechnung für Gower mithilfe der Daisy-Funktion (Daisy (Methode = "Gower")) im Cluster-Paket.
Laut den Erstellern des clustMixType- Pakets ist diese Methode jedoch bei der Verarbeitung großer Datenmengen nicht anwendbar, und in ihrem Paket ist eine andere Methode implementiert.
Die theoretischen Grundlagen der implementierten Clustering-Methode wurden bereits 1999 in der Arbeit von Z. Huang entwickelt. Erweiterungen des k-means-Algorithmus zum Clustering großer Datenmengen mit kategorialen Variablen. Data Mining and Knowledge Discovery, 2: 283–304, 1998. doi: 10.1023 / A: 1009769707641. Es wird als k-Prototypen-Methode bezeichnet und basiert auf der folgenden Abstandsformel:
Wo
Tatsächlich wird der Abstand berechnet, indem die Summe der Quadrate der Differenz numerischer Variablen und die Summe der Anzahl nicht übereinstimmender Klassen in kategorialen Variablen kombiniert mit einem Parameter γ kombiniert wird.
Für die erfolgreiche Anwendung dieser Methode sind daher zwei externe Parameter erforderlich: k (Anzahl der Cluster) und γ (Bedeutung kategorialer Variablen; wenn γ = 0, wird der Abstand auf den klassischen euklidischen Abstand reduziert).
Zurück zum Üben
, (CollegeDistance AER). , :
score ( : )
fcollege ( : )
mcollege ( : )
urban ( : )
education ( : )
income ( : 25 000 ?)
#
library(tibble)
library(clustMixType)
library(AER)
data("CollegeDistance")
glimpse(CollegeDistance)
XX<-CollegeDistance[,c(3,4,5,7,10,12,13)] #
–
clus_2<-kproto(XX, k = 2) # k -
RStudio :
, , 0 , γ 84.15475 ( ). clus_2 :
clus_2$cluster # ,
clus_2$centers #
, , –
clus_2$size #
:
library(wesanderson)
par(mfrow=c(4,2))
clprofiles(clus_2, XX, col = wes_palette("Royal1", 2, type = "continuous"))
, :
-
-
-
- .
table(XX$income, clus_2$cluster)
, 482 1790 , – 883 1584 .
– γ ( γ ). lambdaest
lambdaest(XX, num.method = 1, fac.method = 1, outtype = "vector")
– γ
– γ
Es <- numeric(10)
for(i in 1:10){
kpres <- kproto(XX,lambda = c(0.01320599,3.03450559,4.21940823,2.79814318,0.18950893,0.31241193,2.43817959), k = i )
Es[i] <- kpres$tot.withinss
}
plot(1:10, Es, type = "b", ylab = "Objective Function", xlab = "# Clusters",
main = "Scree Plot")
, – 4 ( ; 6 9 – - ). :
Originalartikel der Entwickler des clustMixType-Pakets: https://journal.r-project.org/archive/2018/RJ-2018-048/RJ-2018-048.pdf