2016-01-05 6 views
13

मैं लगभग 100 रिकॉर्ड (अनलॉक) का नमूना क्लस्टर कर रहा हूं और विभिन्न हाइपरपेरामीटरों के साथ क्लस्टरिंग एल्गोरिदम का मूल्यांकन करने के लिए ग्रिड_सार्च का उपयोग करने की कोशिश कर रहा हूं। मैं silhouette_score का उपयोग कर स्कोरिंग कर रहा हूं जो ठीक काम करता है।विज्ञान-सीखने में क्लस्टरिंग के हाइपरपेरामीटर मूल्यांकन के लिए ग्रिड खोज

मेरे यहाँ समस्या यह है कि मैं GridSearchCV/RandomizedSearchCV के पार सत्यापन पहलू का उपयोग करने की जरूरत नहीं है, लेकिन मैं एक साधारण GridSearch/RandomizedSearch नहीं मिल रहा। मैं अपना खुद का लिख ​​सकता हूं लेकिन ParameterSampler और ParameterGrid ऑब्जेक्ट्स बहुत उपयोगी हैं।

मेरे अगले कदम BaseSearchCV उपवर्ग और अपने _fit() विधि लागू करने के लिए होगा, लेकिन सोचा था कि यह वहाँ cv पैरामीटर के लिए कुछ पारित करके उदाहरण के लिए यह करने के लिए, एक सरल तरीका है पूछ लायक था?

def silhouette_score(estimator, X): 
    clusters = estimator.fit_predict(X) 
    score = metrics.silhouette_score(distance_matrix, clusters, metric='precomputed') 
    return score 

ca = KMeans() 
param_grid = {"n_clusters": range(2, 11)} 

# run randomized search 
search = GridSearchCV(
    ca, 
    param_distributions=param_dist, 
    n_iter=n_iter_search, 
    scoring=silhouette_score, 
    cv= # can I pass something here to only use a single fold? 
    ) 
search.fit(distance_matrix) 
+0

आप में पार सत्यापन (या ग्रिड-सर्च) नहीं करते में की जरूरत है * असुरक्षित * डेटा खनन। बस के-साधनों के 10 रनों की गणना करें, और सर्वोत्तम का उपयोग करें। –

+1

स्पष्ट रूप से आप क्रॉस-सत्यापन नहीं करते हैं, लेकिन ग्रिड खोज को उचित स्कोरिंग मीट्रिक क्यों नहीं दिया जाता है जैसे सिल्हूट स्कोर? –

+0

इसके अलावा, केमन्स यहां सिर्फ एक उदाहरण है। मैं कई अलग-अलग एल्गोरिदम और उनके हाइपरपेरामीटरों का परीक्षण करना चाहता हूं। –

उत्तर

1

हाल ही में मैं इसी तरह की समस्या में भाग गया। मैंने कस्टम इटेरिएबल cv_custom परिभाषित किया है जो विभाजन रणनीति को परिभाषित करता है और क्रॉस सत्यापन पैरामीटर cv के लिए एक इनपुट है। इस पुनरावृत्त में प्रत्येक सूचकांक के लिए एक जोड़े को उनके सूचकांक द्वारा पहचाने गए नमूनों के साथ होना चाहिए, उदा। ([fold1_train_ids], [fold1_test_ids]), ([fold2_train_ids], [fold2_test_ids]), ... हमारे मामले में, हम सिर्फ एक ट्रेन में सभी उदाहरण के सूचकांक के साथ एक गुना के लिए जोड़े को और भी परीक्षण हिस्सा ([train_ids], [test_ids])

N = len(distance_matrix) 
cv_custom = [(range(0,N), range(0,N))] 
scores = cross_val_score(clf, X, y, cv=cv_custom) 
संबंधित मुद्दे