से आउटलायर को हटा रहा है मेरे पास 10 XY निर्देशांक वाले छोटे डेटा सेट हैं। मैं एक केंद्र प्राप्त करने के लिए Matlab (R2012a) और के-साधन का उपयोग कर रहा हूँ। कुछ क्लस्टर में (नीचे चित्र देखें) मैं कुछ चरम बिंदु देख सकता हूं, मेरे डेटासेट को जितना छोटा हो उतना छोटा हो, एक आउटलाइनर मेरे सेंट्रॉइड के मूल्य को नष्ट कर देता है। क्या इन बिंदुओं को दूर करने का कोई आसान तरीका है? मान लीजिए मैटलैब में 'आउटलेटर्स बहिष्कृत' फ़ंक्शन है लेकिन मैं इसे टूल मेनू में कहीं भी नहीं देख सकता .. आपकी मदद के लिए धन्यवाद! (और हाँ मैं इस :-) करने के लिए नया हूँएक के-माध्य क्लस्टर
उत्तर
के-साधन आपके डेटा सेट में आउटलाइन के लिए काफी संवेदनशील हो सकते हैं। कारण यह है कि के-साधन वर्गों के योग को अनुकूलित करने का प्रयास करता है। और इस प्रकार एक बड़ा विचलन (जैसे बाहरी के रूप में) बहुत अधिक वजन मिलता है।
यदि आपके पास आउटलाइंस के साथ शोर डेटा सेट है, तो आप एक एल्गोरिदम का उपयोग करना बेहतर हो सकते हैं जिसमें विशेष शोर हैंडलिंग जैसे DBSCAN (Density-Based Spatial Clustering of Applications with Noise) है। संक्षेप में "एन" पर ध्यान दें: शोर। उदा। इसके विपरीत के-साधन, लेकिन कई अन्य क्लस्टरिंग एल्गोरिदम भी, डीबीएससीएएन क्लस्टर ऑब्जेक्ट्स जो कम घनत्व वाले क्षेत्रों में हैं, का निर्णय ले सकते हैं।
आप की तरह "बाहरी हटाने" कुछ के लिए देख रहे हैं और के रूप में दूसरों के ऊपर से जुड़ा हुआ है, "वहाँ क्या एक गठन के लिए कोई सख्त गणितीय परिभाषा है बाहरी "- http://en.wikipedia.org/wiki/Outlier#Identifying_outliers।
जब आप अपरिवर्तित क्लस्टरिंग कर रहे हैं तो बाहरी पहचान अधिक कठिन होती है क्योंकि आप दोनों सीखने की कोशिश कर रहे हैं कि क्लस्टर क्या हैं, और कौन से डेटा बिंदु "नहीं" क्लस्टर से मेल खाते हैं।
एक साधारण परिभाषा उन सभी डेटा बिंदुओं पर विचार करना है जो एक दूसरे के रूप में हर दूसरे डेटा बिंदु से "दूर" हैं। जैसे, यदि आप किसी अन्य बात करने के लिए अधिक से अधिक छोटी से छोटी दूरी के साथ बिंदु को हटाने पर विचार कर सकता है:
x = randn(100,2);
x(101,:) = [10 10]; %a clear outlier
nSamples = size(x,1);
pointToPointDistVec = pdist(x);
pointToPointDist = squareform(pointToPointDistVec);
pointToPointDist = pointToPointDist + diag(inf(nSamples,1)); %remove self-distances; set to inf
smallestDist = min(pointToPointDist,[],2);
[maxSmallestDist,outlierInd] = max(smallestDist);
आप कुछ समय के ऊपर iteratively अंक दूर करने के लिए पुनरावृति कर सकते हैं। ध्यान दें कि इससे कम से कम एक पड़ोसी पड़ोसी होने वाले बहिष्कारों को नहीं हटाया जाएगा। यदि आप WIKI पृष्ठ पढ़ते हैं, और एक एल्गोरिदम देखते हैं जो अधिक सहायक हो सकता है, तो इसे आजमाएं और कार्यान्वित करें और उस विशिष्ट दृष्टिकोण के बारे में पूछें।
मुझे लगता है कि आप जो शब्द खोज रहे हैं वह बाहरी है (http://en.wikipedia.org/wiki/Outlier), आउटलाइनर नहीं। शायद यह आपको समाधान को अधिक आसानी से ढूंढने में मदद करेगा। – Medo42
यह भी एक अच्छा विचार होगा कि आप किस सॉफ्टवेयर का उपयोग कर रहे हैं और तदनुसार टैग करें। – kotekzot
क्षमा करें, मैंने गलती से आउटलाइनर लिखे हैं; (मैंने खोज करने के लिए थोड़ा सा काम किया है, लेकिन मैं मैटलैब में एक नौसिखिया हूं और अब तक जिन कोडों का सामना करना पड़ा है वे बहुत भारी हैं। ओआरसी और ओडीआईएन पर देखा गया, लेकिन मैटलैब सहायता के अनुसार वहां काम करता है टूलबार में 'बहिष्कृत बहिष्कार' नामक कुछ होना चाहिए, लेकिन मुझे यह नहीं मिल रहा है, मैं R2012a का उपयोग कर रहा हूं। – carro