मैं GA Package का उपयोग कर रहा हूं और मेरा उद्देश्य के-साधन क्लस्टरिंग एल्गोरिदम के लिए इष्टतम प्रारंभिक सेंट्रॉइड पदों को ढूंढना है। मेरे डेटा TF-आईडीएफ स्कोर में शब्दों का एक विरल-मैट्रिक्स है और डाउनलोड करने योग्य है here. नीचे चरणों मैं लागू कर दिया है में से कुछ हैं:के-साधन: प्रारंभिक केंद्र अलग नहीं हैं
0. पुस्तकालय और डाटासेट
library(clusterSim) ## for index.DB()
library(GA) ## for ga()
corpus <- read.csv("Corpus_EnglishMalay_tfidf.csv") ## a dataset of 5000 x 1168
1. बाइनरी एन्कोडिंग और प्रारंभिक आबादी उत्पन्न करना।
k_min <- 15
initial_population <- function(object) {
## generate a population to turn-on 15 cluster bits
init <- t(replicate([email protected], sample(rep(c(1, 0), c(k_min, [email protected] - k_min))), TRUE))
return(init)
}
2. स्वास्थ्य समारोह कम करता डेविस-Bouldin (DB) सूचकांक। जहां मैं
initial_population
से उत्पन्न प्रत्येक समाधान के लिए डीबीआई का मूल्यांकन करता हूं।
DBI2 <- function(x) {
## x is a vector of solution of nBits
## exclude first column of corpus
initial_centroid <- corpus[x==1, -1]
cl <- kmeans(corpus[-1], initial_centroid)
dbi <- index.DB(corpus[-1], cl=cl$cluster, centrotypes = "centroids")
score <- -dbi$DB
return(score)
}
3. जीए चल रहा है। इन सेटिंग्स के साथ।
g2<- ga(type = "binary",
fitness = DBI2,
population = initial_population,
selection = ga_rwSelection,
crossover = gabin_spCrossover,
pcrossover = 0.8,
pmutation = 0.1,
popSize = 100,
nBits = nrow(corpus),
seed = 123)
4. समस्या। केमन्स में त्रुटि (कॉर्पस [-1], प्रारंभिक_सेंट्रॉइड): प्रारंभिक केंद्र अलग नहीं हैं।
मुझे एक समान समस्या मिली here, जहां उपयोगकर्ता को क्लस्टर का उपयोग करने के लिए गतिशील रूप से पास करने के लिए पैरामीटर का उपयोग करना पड़ा। यह समूहों की संख्या को कड़ी-कोडिंग करके हल किया गया था। हालांकि, मेरे मामले में, मुझे वास्तव में क्लस्टर की संख्या में गतिशील रूप से पास करने की आवश्यकता है, क्योंकि यह यादृच्छिक रूप से जेनरेट किए गए बाइनरी वेक्टर से आ रहा है, जहां 1's
प्रारंभिक सेंट्रॉइड का प्रतिनिधित्व करेगा।
kmeans()
code साथ जाँच हो रही है, मैंने देखा है कि त्रुटि डुप्लिकेट केन्द्रों के कारण होता है:
if(any(duplicated(centers)))
stop("initial centers are not distinct")
मैं trace
साथ kmeans
समारोह संपादित बाहर दोहराया केन्द्रों मुद्रित करने के लिए। उत्पादन:
[1] "206" "520" "564" "1803" "2059" "2163" "2652" "2702" "3195" "3206" "3254" "3362" "3375"
[14] "4063" "4186"
कौन सा में बेतरतीब ढंग से initial_centroids
चयनित कोई दोहराव से पता चलता है और मुझे पता नहीं क्यों इस त्रुटि होने वाली रहती है। क्या कोई और चीज है जो इस त्रुटि का कारण बन जाएगी?
पी/एस: मुझे समझ में आता है कि कुछ सुझाव दे सकते हैं कि GA + K-साधन एक अच्छा विचार नहीं है। लेकिन मैं जो कुछ शुरू कर चुका हूं उसे पूरा करने की आशा करता हूं। इस समस्या को के-साधन समस्या के रूप में देखना बेहतर है (कम से कम initial centers are not distinct
त्रुटि को हल करने में)।
मैं इस विषय में एक कुल शुरुआत कर रहा हूँ, आप "प्रारंभ बीज बहुत ज्यादा बातचीत" के बारे में अधिक व्याख्या कर सकते हैं? क्या इस वजह से 'शुरुआती केंद्र अलग नहीं हैं' समस्या? और खराब गुणसूत्रों को खत्म करने के बारे में आपके सुझाव के लिए धन्यवाद, यह मेरे लिए नया है! –