2012-01-21 18 views
5

मैं इस प्रकार एक बड़े (100K 30K द्वारा) और (बहुत) svmlight प्रारूप में विरल डाटासेट जो मैं लोड है:विरल कार्यान्वयन/scikit सीखने

import numpy as np 
from scipy.cluster.vq import kmeans2 
from scipy.spatial.distance import pdist, squareform 
from sklearn.datasets import load_svmlight_file 

X,Y = load_svmlight_file("somefile_svm.txt") 

जो एक विरल scipy रिटर्न सरणी एक्स

मैं बस के रूप में

D = pdist(X) 

दुर्भाग्य से सभी प्रशिक्षण अंक जोड़ो में दूरी की गणना करने की जरूरत है, केवल scipy.spatial.distance काम में दूरी गणना कार्यान्वयन घने matrices के लिए। डाटासेट के आकार के कारण इसे करने के लिए, कहते हैं अव्यवहार्य है, के साथ इस समस्या के संबंध बहुत सराहना की जाएगी विरल मैट्रिक्स दूरी गणना कार्यान्वयन या समाधान के लिए कोई भी संकेत दिए गए के रूप में

D = pdist(X.todense()) 

pdist का उपयोग करें।

बहुत धन्यवाद

उत्तर

4

scikit सीखने में एक sklearn.metrics.euclidean_distances समारोह है कि दोनों विरल मैट्रिक्स और घने NumPy सरणी के लिए काम करता है नहीं है। reference documentation देखें।

हालांकि गैर-यूक्लिडियन दूरी अभी तक स्पैर मैट्रिस के लिए लागू नहीं की गई हैं।

+0

आपके उत्तर के लिए धन्यवाद। सबसे पहले यह मेरी समस्या का समाधान था क्योंकि "euclidean_distances" स्पैस डेटा के साथ काम करता है, हालांकि 'D = euclidean_distances (X, X) 'के साथ भी मुझे स्मृति त्रुटि से बाहर निकलता है। – Nicholas

+0

@ निकोलस: 'euclidean_distances' अनिवार्य रूप से' X.shape [0] '×' X.shape [0] 'घने सरणी देता है, जो आपके मामले में 1e10 है। –

+1

@ निकोलस यदि आप बड़े डेटासेट पर दिशा-के-साधनों को लागू करना चाहते हैं (दिशा में 'एक्स.शिप [0] '), तो आपको' sklearn.cluster.MiniBatchKMeans' क्लास को आजमाएं)। यह छोटे हिस्सों द्वारा इनपुट सेट को क्रमशः संसाधित करता है इसलिए स्मृति उपयोग नियंत्रित होता है। – ogrisel

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