2013-04-09 20 views
12

Theo dõi từ Invalid probability model for large support vector machines using ksvm in R:dòng tìm kiếm thất bại trong việc đào tạo ksvm prob.model

tôi đang đào tạo một SVM sử dụng ksvm từ gói kernlab trong R. Tôi muốn sử dụng mô hình xác suất, nhưng trong quá trình sigmoid phù hợp tôi nhận được thông báo lỗi sau:

line search fails -1.833726 0.5772808 5.844462e-05 5.839508e-05 -1.795008e-08 
-1.794263e-08 -2.096847e-12 

Khi điều này xảy ra, giá trị kết quả của prob.model(m) là một vector của tất cả các xác suất, chứ không phải là thông số mong đợi của một hàm sigmoid trang bị trên các xác suất. Điều gì gây ra lỗi này và làm cách nào để ngăn chặn lỗi này? Tìm kiếm thông báo lỗi không mang lại kết quả nào.

dụ tái sản xuất:

load(url('http://roelandvanbeek.nl/files/df.rdata')) 
ksvm(label~value,df[1:1000],C=10,prob.model=TRUE)->m 
prob.model(m) # works as it should, prints a list containing one named list 

# the below, non-working problem, unfortunately takes an hour due to the large 
# sample size 
ksvm(label~value,df,C=10,prob.model=TRUE)->m # line search fails 
prob.model(m) # just a vector of values 
+0

Bạn có cố gắng tìm ra điều này không? –

+4

No. Tôi đã phát hiện ra rằng nó cũng xảy ra với các tập dữ liệu nhỏ hơn, nhưng chưa tìm được lời giải thích nhất quán. Thông thường, giảm hoặc tăng số lượng quan sát khắc phục sự cố, làm tăng tính bất thường của bản chất ... – roelandvanbeek

+0

@roelandvanbeek, tôi thấy vấn đề khi tôi cố vẽ đồ thị cho tập dữ liệu của mình, nhưng khi tôi chỉ chạy cho nhất định chia 70/30 ví dụ, nó không hiển thị vấn đề? điều này có phải là ý của bạn bằng cách giảm hoặc tăng các quan sát không? –

Trả lời

1

Nhìn vào mã nguồn, this is the line that throws that error.

Đó là phương pháp .probPlatt sử dụng phương pháp Newton để tối ưu hóa hàm, trong trường hợp này là mở rộng quy mô của Platt. Nếu bạn kiểm tra line 3007 mặc dù bạn sẽ thấy một số thông số liên quan đến phương pháp.

Một trong các tham số đó là minstep về cơ bản là bước số nhỏ nhất mà phương pháp nên tiếp tục cố gắng tối ưu hóa hàm. Bạn thấy đấy, đây chính là điều kiện của lỗi trong dòng 3090: if (stepsize < minstep). Vì vậy, về cơ bản, chức năng không hội tụ, ngay cả khi đạt đến kích thước bước tối thiểu.

Bạn có thể thử thay đổi minstep thành giá trị thấp hơn để phá vỡ nó. Alexandros thậm chí còn bình luận những thông số này có lẽ nên ở trong giao diện.

+0

bạn đang nói rằng chúng ta nên thay đổi mã và biên dịch lại nó? –

+0

@EB Có về việc thay đổi mã, việc biên dịch lại không được yêu cầu. –

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