2012-04-21 9 views
10

Tôi đang chơi xung quanh với hồi quy logistic trong Python. Tôi đã thực hiện một phiên bản mà việc giảm thiểu chức năng chi phí được thực hiện thông qua gradient descent, và bây giờ tôi muốn sử dụng thuật toán BFGS từ scipy (scipy.optimize.fmin_bfgs).sử dụng chính xác scipy.optimize.fmin_bfgs

Tôi có một tập hợp dữ liệu (các tính năng trong ma trận X, với một mẫu trong mỗi hàng của X và các nhãn lặp lại trong y vector dọc). Tôi cố gắng để tìm thông số Theta để giảm thiểu:

enter image description here

tôi gặp khó khăn khi tìm hiểu cách fmin_bfgs hoạt động chính xác. Theo như tôi nhận được nó, tôi phải vượt qua một chức năng để được giảm thiểu và một tập hợp các giá trị ban đầu cho Thetas.

tôi làm như sau:

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

nơi computeCost tính toán J (Thetas) như minh họa ở trên. Nhưng tôi nhận được một số lỗi liên quan đến chỉ mục, vì vậy tôi nghĩ rằng tôi không cung cấp những gì fmin_bfgs mong đợi.

Có ai có thể làm sáng tỏ điều này không?

+4

Ah, [gỡ lỗi vịt cao su] (http://en.wikipedia.org/wiki/Rubber_duck_debugging) =) – katrielalex

+0

@katrielalex Đúng vậy !! : D – Cristina

Trả lời

4

Sau khi lãng phí thời gian trên nó, hãy giải quyết một lần nữa bằng cách đăng bài ... Tôi đã định nghĩa computeCost (X, y, Thetas), nhưng Thetas là tham số đích để tối ưu hóa, nó phải là tham số đầu tiên trong Chữ ký. Đã sửa lỗi và hoạt động!

0

tôi không biết toàn bộ mã của bạn, nhưng bạn đã thử

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

? X0 này phải là một vector 1d, tôi nghĩ vậy.

+0

Đó là một vector 1D, bởi vì tham số thứ hai của hình dạng trong numpy.zeros() là 1. Cảm ơn bạn đã dành thời gian để đề xuất nó, mặc dù! – Cristina