5

Tôi đang làm việc với một vấn đề mà tôi phải giải quyết hồi qui logistic L2-regularized hoặc vấn đề SVM tuyến tính L2-reg, ở đó tôi có thêm một thuật ngữ affine.Thêm một thuật ngữ afine vào hàm mục tiêu hồi quy SVM/logistic tuyến tính

Vì vậy, vấn đề của tôi ví dụ là:

min_ w {C*sum_i max(1-w*x_i*y_i,0) + 0.5*||w||^2_2 + w * v } 

trong đó v là một vector không đổi. Tất nhiên đây là vấn đề lồi và có thể được giải quyết bằng các phương pháp thông thường, nhưng tôi phải giải quyết nhiều vấn đề lớn của loại này, vì vậy tôi rất muốn sử dụng thư viện chuẩn như liblinear.

Câu hỏi của tôi là có cách chuyển đổi dữ liệu x, nhãn y hoặc hệ số cân C (có thể vào C_i khác cho từng trường hợp), sao cho vấn đề này sẽ tương đương với bản lề chuẩn- mất SVM hoặc vấn đề hồi quy logistic?

Trả lời

5

Tôi không thể nghĩ ra một cách để biến nó thành thứ gì đó có thể được xử lý bởi một cái gì đó như liblinear. Tuy nhiên, bạn có thể dễ dàng giải quyết vấn đề tối ưu hóa này với một trong các thư viện tối ưu hóa máy bay cắt mục đích chung. Tất cả bạn phải làm là viết mã để tính toán một phần tử của subgradient (chỉ là w + v - C sum_i x_i y_i trong trường hợp của bạn) và giá trị của mục tiêu. Sau đó, một thói quen máy bay cắt có thể tìm thấy w tối ưu.

Có trình tối ưu hóa CPA trong Shogun và cũng có một trong số dlib. Tôi đã không sử dụng phiên bản của Shogun nhưng tôi đã sử dụng một trong dlib cho rất nhiều vấn đề (tôi cũng là tác giả của dlib).

0

Có thể nếu thuật toán đào tạo off-the-shelf của bạn cho phép bạn thiên vị mất bản lề hoặc hồi quy logistic cho mỗi điểm dữ liệu. Đây là cách làm.

Hoàn thành vuông trên hai nhiệm kỳ cuối cùng:

0.5 ||w||^2 + w'v 
= 0.5 ||w+v/2||^2 - v'v/2 

sau đó giới thiệu sự thay đổi của biến

u = w+v/2 

tối ưu hóa của bạn là sau đó tương đương với

min_u C*sum_i max(1-(u-v/2)*x_i*y_i,0) + 0.5*||u||^2_2 

đó, với b_i = 1 + v'x_i * y_i/2, tương đương với

min_u C*sum_i max(b_i - u*x_i*y_i ,0) + 0.5*||u||^2_2 

Vì vậy, nếu thuật toán đào tạo của bạn cho phép bạn thay thế 1 bằng b_i bạn chọn cho mỗi điểm dữ liệu, nó có thể giải quyết vấn đề này.

Hầu như mọi gói sẽ chứa b_i theo cách này hay cách khác. Ví dụ: ở trên tương đương với

min_u C*sum_i b_i max(1 - u*x_i*y_i/b_i ,0) + 0.5*||u||^2_2 

(giả sử b_i> 0) vì vậy nếu gói của bạn cho phép bạn cân trọng lượng từng điểm khác nhau, bạn có thể giải quyết vấn đề trên.

Các vấn đề liên quan