2012-04-21 3 views
10

का सही उपयोग मैं पाइथन में लॉजिस्टिक रिग्रेशन के साथ खेल रहा हूं। मैंने एक संस्करण लागू किया है जहां लागत समारोह को कम करने के लिए ग्रेडियेंट वंश के माध्यम से किया जाता है, और अब मैं बीएसजीएस एल्गोरिदम का उपयोग scipy (scipy.optimize.fmin_bfgs) से करना चाहता हूं।scipy.optimize.fmin_bfgs

मेरे पास डेटा का एक सेट है (मैट्रिक्स एक्स में विशेषताएं, एक्स की प्रत्येक पंक्ति में एक नमूना के साथ, और ऊर्ध्वाधर वेक्टर वाई में कोर्रेप्सिंग लेबल)। मैं पैरामीटर थीटा कम करने के लिए खोजने की कोशिश कर रहा हूँ:

enter image description here

मैं मुसीबत समझ है कैसे fmin_bfgs वास्तव में काम करता है। जहां तक ​​मुझे यह मिलता है, मुझे कम से कम एक समारोह को पास करना होगा और थेटस के लिए प्रारंभिक मानों का एक सेट होना होगा।

मैं निम्न कार्य करें:

initial_values = numpy.zeros((len(X[0]), 1)) 
myargs = (X, y) 
theta = scipy.optimize.fmin_bfgs(computeCost, x0=initial_values, args=myargs) 

जहां computeCost की गणना करता है जे (Thetas) के रूप में ऊपर सचित्र। लेकिन मुझे कुछ इंडेक्स से संबंधित त्रुटियां मिलती हैं, इसलिए मुझे लगता है कि मैं fmin_bfgs की अपेक्षा नहीं कर रहा हूं।

क्या कोई इस पर कुछ प्रकाश डाल सकता है?

+4

आह, [रबड़ बतख डीबगिंग] (http://en.wikipedia.org/wiki/Rubber_duck_debugging) =) – katrielalex

+0

@ katrielalex तो सच !! : डी – Cristina

उत्तर

4

उस पर घंटों को बर्बाद करने के बाद, पोस्टिंग की शक्ति से फिर से हल किया गया ... मैं computeCost (X, y, Thetas) को परिभाषित कर रहा था, लेकिन जैसे ही थाटा ऑप्टिमाइज़ेशन के लिए लक्ष्य पैरामीटर है, यह पहले पैरामीटर होना चाहिए था हस्ताक्षर। फिक्स्ड और काम करता है!

0

मैं अपने पूरे कोड पता नहीं है, लेकिन आप

initial_values = numpy.zeros(len(X[0])) 

की कोशिश की? यह x0 एक 1 डी वेक्टर होना चाहिए, मुझे लगता है।

+0

यह 1 डी वेक्टर है, क्योंकि numpy.zeros() में आकार का दूसरा पैरामीटर 1 है। हालांकि, सुझाव देने के लिए समय निकालने के लिए धन्यवाद! – Cristina