आप k- साधनों के कार्यान्वयन का परीक्षण कैसे करते हैं?


11

डिस्क्लेमर: मैंने इस सवाल को स्टैकओवरफ़्लो पर पोस्ट किया है, लेकिन मुझे लगा कि शायद यह इस प्लेटफॉर्म के लिए बेहतर है।

आप बहुआयामी डेटा सेट के लिए अपने स्वयं के k- साधन कार्यान्वयन का परीक्षण कैसे करते हैं?

मैं डेटा पर पहले से ही लागू कार्यान्वयन (यानी, मैटलैब) को चलाने के बारे में सोच रहा था और अपने एल्गोरिथ्म के साथ परिणामों की तुलना कर रहा था। लेकिन इसके लिए दोनों एल्गोरिदम को लगभग समान रूप से अधिक काम करना होगा, और दो परिणामों के बीच मानचित्रण शायद केक का कोई टुकड़ा नहीं है।

क्या आपके पास एक बेहतर विचार है?

जवाबों:


10

के-साधनों में एक स्टोकेस्टिक घटक शामिल है, इसलिए यह बहुत संभावना नहीं है कि आपको एक ही परिणाम मिलेगा जब तक कि आपके पास बिल्कुल समान कार्यान्वयन न हो और एक ही शुरुआती कॉन्फ़िगरेशन का उपयोग करें। हालाँकि, आप देख सकते हैं कि आपके परिणाम जाने-माने कार्यान्वयनों के साथ हैं (मतलाब के बारे में नहीं जानते हैं, लेकिन R में k- साधन एल्गोरिथ्म के कार्यान्वयन को अच्छी तरह से समझाया गया है, हार्टिगन और वोंग, 1979 देखें )।

परिणामों की दो श्रृंखलाओं की तुलना करने के लिए, लेबल स्विचिंग के साथ अभी भी एक समस्या है अगर इसे कई बार चलाना है। फिर से, e1071 आर पैकेज में, एक बहुत ही आसान फ़ंक्शन (? matchClasses()) है , जिसका उपयोग दो-तरफ़ा वर्गीकरण तालिका में दो श्रेणियों के बीच 'सर्वश्रेष्ठ' मैपिंग खोजने के लिए किया जा सकता है। मूल रूप से, विचार यह है कि पंक्तियों को फिर से व्यवस्थित किया जाए ताकि स्तंभों के साथ अपने समझौते को अधिकतम किया जा सके, या एक लालची दृष्टिकोण का उपयोग किया जाए और पंक्तियों और स्तंभों का उपयोग तब तक किया जाए जब तक कि विकर्ण (कच्चा समझौता) का योग अधिकतम न हो। कप्पा सांख्यिकी जैसे समझौते का गुणांक भी प्रदान किया गया है।

अंत में, अपने कार्यान्वयन को कैसे निर्धारित किया जाए, इसके बारे में बहुत सारे स्वतंत्र रूप से उपलब्ध डेटा हैं, या आप एक समर्पित डेटा सेट का अनुकरण कर सकते हैं (जैसे, एक परिमित मिश्रण मॉडल के माध्यम से, मिक्सिम पैकेज देखें )।


हाय ची, उत्तर के लिए धन्यवाद। जब आप चाहते हैं कि आप भी एसओ के समान प्रश्न का उत्तर दे सकते हैं और मैं इसे वहां भी स्वीकार करूंगा। => stackoverflow.com/questions/4280371/…
Framester

(+1) पहला पैराग्राफ जल्दी से मामले के दिल में पहुँच जाता है।
व्हिबर

6

परिणामों के दो सेटों के बीच मानचित्रण की गणना करना आसान है, क्योंकि एक परीक्षण में प्राप्त जानकारी को तीन-टुपल्स के एक सेट के रूप में दर्शाया जा सकता है: पहला घटक एक (बहुआयामी) बिंदु है, दूसरा एक (मनमाना) क्लस्टर लेबल है आपके एल्गोरिथ्म द्वारा आपूर्ति की गई है, और तीसरा एक (मनमाना) क्लस्टर लेबल है जो एक संदर्भ एल्गोरिथ्म द्वारा आपूर्ति किया गया है। का निर्माण सेलेबल जोड़े के लिए वर्गीकरण तालिका: यदि परिणाम सहमत हैं, तो यह एक क्रमपरिवर्तन मैट्रिक्स का एक बहु होगा। यही है, प्रत्येक पंक्ति और प्रत्येक कॉलम में बिल्कुल एक नॉनज़रो सेल होना चाहिए। यह एक साधारण कार्यक्रम की जाँच है। इस आदर्श को अलग-अलग डेटा बिंदुओं से छोटे विचलन को ट्रैक करना भी सरल है ताकि आप ठीक से देख सकें कि यदि वे बिल्कुल अलग हैं तो दोनों उत्तर कैसे भिन्न होंगे। मैं समझौते के सांख्यिकीय उपायों की गणना करने के लिए परेशान नहीं होता: या तो सही समझौता (क्रमपरिवर्तन तक) है या नहीं है, और बाद के मामले में आपको असहमति के सभी बिंदुओं को समझने की आवश्यकता है कि वे कैसे होते हैं। परिणाम या तो सहमत हैं या वे नहीं करते हैं; असहमति की किसी भी राशि, यहां तक ​​कि सिर्फ एक बिंदु पर, जाँच की आवश्यकता है।

आप परीक्षण के लिए कई प्रकार के डेटासेट का उपयोग करना चाह सकते हैं: (1) प्रकाशित k- साधन परिणाम के साथ प्रकाशित डेटासेट; (2) स्पष्ट मजबूत समूहों के साथ सिंथेटिक डेटासेट; (3) कोई स्पष्ट क्लस्टरिंग के साथ सिंथेटिक डेटासेट। (1) किसी भी गणित या सांख्यिकी कार्यक्रम को लिखने के लिए उपयोग करने के लिए एक अच्छा अनुशासन है । (2) कई तरह से करना आसान है, जैसे कि कुछ बेतरतीब बिंदुओं को उत्पन्न करके समूहों के केंद्रों के रूप में सेवा करना और फिर क्लस्टर केंद्रों को अपेक्षाकृत कम मात्रा में बेतरतीब ढंग से विस्थापित करके बिंदु बादलों को उत्पन्न करना। (3) कुछ यादृच्छिक जाँच प्रदान करता है जो संभावित रूप से अप्रत्याशित व्यवहार को उजागर करता है; फिर, यह एक अच्छा सामान्य परीक्षण अनुशासन है।

इसके अलावा, डेटासेट्स बनाने पर विचार करें जो चरम समाधान के बीच की सीमाओं पर झूठ बोलकर एल्गोरिदम को तनाव देते हैं। इसके लिए रचनात्मकता और आपके एल्गोरिथ्म की गहरी समझ की आवश्यकता होगी (जो संभवतः आपके पास है!)। एक उदाहरण मैं किसी भी घटना में जांच करना चाहता हूं कि फॉर्म के वैक्टर जहां बिना शून्य घटकों वाला एक वेक्टर है और अनुक्रमिक अभिन्न मूल्यों पर लेता । मैं वैक्टर के सेट पर एल्गोरिथ्म की जांच करना चाहता हूं जो समभुज बहुभुज बनाते हैं। दोनों ही परिस्थितियों में, ऐसे मामलों में जहां है नहीं की एक बहु विशेष रूप से दिलचस्प हैं, जहां सहितमैंvvमैं0,1,2,...,n-1nnहै कम से । इन स्थितियों के लिए सामान्य बात यह है कि (ए) वे समस्या के सभी आयामों का उपयोग करते हैं, फिर भी (बी) सही समाधान ज्यामितीय रूप से स्पष्ट हैं, और (सी) कई सही समाधान हैं।

(दो यादृच्छिक रूप से वैक्टर और को यादृच्छिक पर चुना गया है, शुरू करके आयामों में औपचारिक समबाहु बहुभुज (एक अच्छा तरीका यह है कि उनके घटकों को स्वतंत्र रूप से सामान्य रूप दिया जाए।) Rescale। उनके पास इकाई की लंबाई है; चलो इन x और z को कॉल करें । सूत्र से x घटक को z से निकालें2यूv2एक्सzएक्सz

w=z-(zएक्स)एक्स

प्राप्त rescaling द्वारा डब्ल्यू इकाई लंबाई है। यदि आप चाहें, तो समान रूप से x और y दोनों को अनियमित रूप से पुनर्विक्रय करें । वैक्टर x और y , d आयामों में यादृच्छिक 2D उप-स्थान के लिए एक ऑर्थोगोनल आधार बनाते हैं । की एक समबाहु बहुभुज n कोने के सेट के रूप में प्राप्त किया जाता है क्योंकि ( 2 π कश्मीर / n ) एक्स + पाप ( 2 π कश्मीर / n ) y पूर्णांक के रूप में कश्मीर से लेकर 0 के माध्यम सेywएक्सyएक्सynक्योंकि(2π/n)एक्स+पाप(2π/n)y0 )n-1


(+1) प्रासंगिक सिंथेटिक डेटा उत्पन्न करने के संभावित तरीकों पर आपकी टिप्पणियों का बहुत स्वागत है।
chl

2

एक बहुत ही सरल 'भोली' दृष्टिकोण सरल सिंथेटिक डेटा का उपयोग करना होगा, इसके लिए प्रत्येक कार्यान्वयन को एक ही समूह में परिणाम करना चाहिए।

पायथन में उदाहरण के साथ import numpy as np:

test_data = np.zeros((40000, 4))
test_data[0:10000, :] = 30.0
test_data[10000:20000, :] = 60.0
test_data[20000:30000, :] = 90.0
test_data[30000:, :] = 120.0

इसके लिए n_clusters = 4आपको आपको अनुमति देनी चाहिए[30, 60, 90, 120]


0

चूँकि k-mean में ऐसे फ़ैसले होते हैं जिन्हें बेतरतीब ढंग से चुना जाता है (केवल इनिशियलाइज़ेशन पार्ट), मुझे लगता है कि आपके अल्गोरिदम को आज़माने का सबसे अच्छा तरीका है कि शुरुआती पाइंट्स को सिलेक्ट किया जाए और उन्हें पहले अपने ऐल्गोरिथम में फिक्स किया जाए और उसके बाद अल्गोरिथम का दूसरा सोर्स कोड चुनें और उसी तरह अंक तय करें। फिर आप वास्तविक परिणामों के लिए तुलना कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.