8

मुझे स्मृति त्रुटि मिली जब मैं scikit के dbscan एल्गोरिदम चला रहा था। मेरा डेटा लगभग 20000 * 10000 है, यह एक बाइनरी मैट्रिक्स है।विज्ञान-सीखने में, क्या डीबीएससीएएन स्पैर मैट्रिक्स का उपयोग कर सकता है?

(शायद यह नहीं उपयुक्त इस तरह के एक मैट्रिक्स के साथ DBSCAN उपयोग करने के लिए है। मैं मशीन सीखने की शुरुआत कर रहा हूँ। मैं सिर्फ एक क्लस्टर विधि है जो एक प्रारंभिक क्लस्टर नंबर की जरूरत नहीं है पता लगाना चाहते हैं)

वैसे भी मैं स्पैर मैट्रिक्स और विज्ञानकिट की विशेषता निष्कर्षण मिला।

http://scikit-learn.org/dev/modules/feature_extraction.html http://docs.scipy.org/doc/scipy/reference/sparse.html

लेकिन मैं अभी भी पता नहीं है कि यह कैसे उपयोग करने के लिए है। डीबीएससीएएन के विनिर्देशन में, स्पैर मैट्रिक्स का उपयोग करने के बारे में कोई संकेत नहीं है। क्या इसकी अनुमति नहीं है?

यदि कोई जानता है कि डीबीएससीएएन में स्पैर मैट्रिक्स का उपयोग कैसे करें, तो कृपया मुझे बताएं। या आप मुझे एक और उपयुक्त क्लस्टर विधि बता सकते हैं।

+0

की संभावित डुप्लिकेट [scikit सीखने DBSCAN स्मृति उपयोग] (http://stackoverflow.com/questions/16381577/scikit-learn-dbscan-memory-usage) –

उत्तर

0

स्केलेरन डीबीएससीएएन एल्गोरिदम स्पैस सरणी नहीं लेता है। हालांकि, KMeans और Spectral clustering करते हैं, तो आप इनका प्रयास कर सकते हैं। sklearns पर अधिक क्लस्टरिंग विधि: http://scikit-learn.org/stable/modules/clustering.html

+0

जो वास्तव में sklearns गलती है, डीबीएससीएएन नहीं ... –

1

आप DBSCAN करने के लिए एक दूरी मैट्रिक्स पारित कर सकते हैं तो अपने नमूना मैट्रिक्स संभालने X है, निम्न कार्य करना चाहिए:

from sklearn.metrics.pairwise import euclidean_distances 

D = euclidean_distances(X, X) 
db = DBSCAN(metric="precomputed").fit(D) 

हालांकि, मैट्रिक्स D भी हो जाएगा X से बड़ा: n_samples ² प्रविष्टियां। स्पैर मैट्रिस के साथ, के-साधन शायद सबसे अच्छा विकल्प है।

(DBSCAN आकर्षक लग सकता है, क्योंकि यह समूहों के एक पूर्व निर्धारित संख्या की जरूरत नहीं है, लेकिन यह व्यापार है कि दो मापदंडों आप धुन करने के लिए है कि के लिए। यह ज्यादातर सेटिंग्स जहां नमूने अंतरिक्ष में अंक हैं में लागू है और आप जानते हैं कि आप उन बिंदुओं को एक ही क्लस्टर में कितना करीब रखना चाहते हैं, या जब आपके पास ब्लैक बॉक्स दूरी मीट्रिक है जो कि विज्ञान-सीखने का समर्थन नहीं करता है।)

+1

डीबीएससीएएन को दूरी मैट्रिक्स की आवश्यकता नहीं है, यह वर्तमान स्लेरन कार्यान्वयन की सीमा है, एल्गोरिदम की नहीं। इसके अलावा, कई मामलों में, डीबीएससीएएन के ईपीएस और मिनी पैरामीटर दोनों को * के' से अधिक * आसान चुना जा सकता है। उदाहरण के लिए भौगोलिक डेटा का उपयोग करते समय, उपयोगकर्ता यह कहने में सक्षम हो सकता है कि "1 किमी" का त्रिज्या एक अच्छा ईपीएसलॉन है, और इस त्रिज्या के भीतर कम से कम 10 घटनाएं होनी चाहिए। –

+0

@ एनी-मूस: मुझे पता है कि समस्याएं कार्यान्वयन में हैं, न कि एल्गोरिदम। ईपीएस और minpts लेने के लिए, हाँ, कुछ समस्याओं के लिए जो आसान हो सकता है, लेकिन दूसरों के लिए, व्यापक ट्यूनिंग की आवश्यकता हो सकती है। यूक्लिडियन अंतरिक्ष या यहां तक ​​कि पृथ्वी की सतह पर भी सभी समस्याएं नहीं रहती हैं। –

5

scikit डीबीएससीएएन के कार्यान्वयन दुर्भाग्य से, बहुत बेवकूफ। इसे इंडेक्सिंग (बॉल पेड़ इत्यादि) को ध्यान में रखने के लिए फिर से लिखना होगा।

अभी तक, यह स्पष्ट रूप से एक पूर्ण दूरी मैट्रिक्स की गणना करने का आग्रह करेगा, जो स्मृति के लॉट को बर्बाद कर देगा।

क्या मैं सुझाव दे सकता हूं कि आप केवल डीबीएससीएएन को पुनः लागू करें। यह काफी आसान है, वहां अच्छा छद्म कोड है विकिपीडिया और मूल प्रकाशन में। यह केवल कुछ पंक्तियां होनी चाहिए, और फिर आप आसानी से अपने डेटा प्रतिनिधित्व का लाभ उठा सकते हैं। जैसे यदि आपके पास पहले से ही एक समानता ग्राफ में समानता ग्राफ है, तो आमतौर पर "रेंज क्वेरी" करने के लिए यह काफी छोटा होता है (यानी केवल किनारों का उपयोग करें जो आपकी दूरी सीमा को पूरा करते हैं)

यहां एक issue in scikit-learn github है जहां वे कार्यान्वयन में सुधार के बारे में बात करते हैं । उपयोगकर्ता बॉल-पेड़ का उपयोग करके अपने संस्करण की रिपोर्ट करता है 50x तेज (जो मुझे आश्चर्य नहीं करता है, मैंने पहले इंडेक्स के साथ समान गति दिखाई है - यह डेटा सेट आकार को आगे बढ़ाने पर अधिक स्पष्ट हो जाएगा)।

अद्यतन: विज्ञान-शिक्षा में डीबीएससीएएन संस्करण को इस उत्तर के बाद से काफी सुधार हुए हैं।

+2

आपको विज्ञान में रुचि हो सकती है-0.14 सीखें, जहां डीबीएससीएएन वास्तव में गेंद के पेड़ों का उपयोग करने के लिए संशोधित किया गया था। –

+0

भी डीबीएससीएएन अब v0.16 में स्पैस इनपुट का समर्थन करता है – titus

संबंधित मुद्दे