2012-06-13 34 views
5

Tôi mới sử dụng R và SVM và tôi đang cố gắng để hồ sơ svm chức năng từ gói e1071. Tuy nhiên, tôi không thể tìm thấy bất kỳ tập dữ liệu lớn nào cho phép tôi có được một phạm vi kết quả hồ sơ tốt thay đổi kích thước của dữ liệu đầu vào. Có ai biết cách làm việc svm không? Tôi nên sử dụng tập dữ liệu nào? Bất kỳ thông số cụ thể nào cho svm khiến cho nó hoạt động khó khăn hơn?Hồ sơ SVM (e1071) trong R

Tôi sao chép một số lệnh mà tôi đang sử dụng để kiểm tra hiệu suất. Có lẽ đó là hữu ích nhất và dễ dàng hơn để có được những gì tôi đang cố gắng ở đây:

#loading libraries 
library(class) 
library(e1071) 
#I've been using golubEsets (more examples availables) 
library(golubEsets) 

#get the data: matrix 7129x38 
data(Golub_Train) 
n <- exprs(Golub_Train) 

#duplicate rows(to make the dataset larger) 
n<-rbind(n,n) 

#take training samples as a vector 
samplelabels <- as.vector([email protected]@data$ALL.AML) 

#calculate svm and profile it 
Rprof('svm.out') 
svmmodel1 <- svm(x=t(n), y=samplelabels, type='C', kernel="radial", cross=10) 
Rprof(NULL) 

tôi tiếp tục tăng dữ liệu sao chép hàng và cột nhưng tôi đạt đến giới hạn bộ nhớ thay vì làm svm làm việc chăm chỉ hơn ...

+1

Điểm đào tạo trùng lặp không làm cho vấn đề trở nên khó khăn hơn. Vì hầu hết SVM yêu cầu toàn bộ tập dữ liệu phù hợp với bộ nhớ chính, điều đó có nghĩa là cuối cùng bạn đã gặp lỗi bộ nhớ. – karenu

+0

vì vậy, làm cách nào tôi có thể thử với một tập dữ liệu lớn phù hợp? Bạn có biết ví dụ nào tôi có thể sử dụng không? – Manolete

+0

Có, nếu bạn thấy câu trả lời của tôi, tôi liệt kê một số bộ dữ liệu có sẵn. Ngoài ra, bạn nên thực hiện điều chỉnh tham số để tìm các tham số tốt nhất, bạn sẽ thấy rằng khi bạn tìm kiếm các thông số cung cấp cho bạn độ chính xác nhất, một số sẽ mất nhiều thời gian hơn để đào tạo so với các thông số khác. Xem Hướng dẫn thực hành từ tác giả của libsvm: http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFYQFjAA&url=http%3A%2F%2Fwww.csie.ntu .edu.tw% 2F ~ cjlin% 2Fpapers% 2Fguide% 2Fguide.pdf & ei = WtLhT46NO-jw0gG30pHVAw & usg = AFQjCNFol0McRktHC6gsBxKXqQMvmQUFeg – karenu

Trả lời

8

Trong điều khoản "làm việc SVM ra" - những gì sẽ làm cho SVM làm việc "khó hơn" là một mô hình phức tạp hơn mà không dễ dàng tách ra, chiều cao cao hơn và tập dữ liệu lớn hơn, dày đặc hơn.

hiệu suất SVM thoái hóa với:

  • kích thước Dataset tăng (số điểm dữ liệu)
  • thưa thớt giảm (số không ít hơn)
  • đa chiều tăng (số thuộc tính)
  • phi hạt nhân tuyến tính được sử dụng (và các tham số hạt nhân có thể làm cho việc đánh giá hạt nhân phức tạp hơn)

thay đổi thông số

Có thông số có thể thay đổi để làm cho SVM mất nhiều thời gian. Tất nhiên các thông số ảnh hưởng đến chất lượng của giải pháp bạn sẽ nhận được và có thể không có ý nghĩa gì để sử dụng.

Sử dụng C-SVM, thay đổi C sẽ dẫn đến các thời gian chạy khác nhau. (Tham số tương tự trong nu-SVM là nu) Nếu tập dữ liệu được phân tách hợp lý, làm cho C nhỏ hơn sẽ dẫn đến thời gian chạy lâu hơn vì SVM sẽ cho phép nhiều điểm đào tạo trở thành vectơ hỗ trợ. Nếu tập dữ liệu không tách rời, làm cho C lớn hơn sẽ gây ra thời gian chạy lâu hơn vì bạn chủ yếu nói với SVM rằng bạn muốn một giải pháp hẹp lề phù hợp chặt chẽ với dữ liệu và sẽ mất nhiều thời gian hơn để tính toán khi dữ liệu không dễ dàng tách rời.

Thường thì bạn tìm thấy khi thực hiện tìm kiếm tham số có các thông số sẽ tăng thời gian tính toán mà không có sự gia tăng đáng kể về độ chính xác.

Các tham số khác là tham số hạt nhân và nếu bạn thay đổi chúng để tăng độ phức tạp của việc tính hạt nhân thì thời gian chạy SVM tự nhiên sẽ tăng lên. Các hạt nhân tuyến tính là đơn giản và sẽ là nhanh nhất; tất nhiên các hạt phi tuyến sẽ mất nhiều thời gian hơn. Một số tham số có thể không làm tăng tính phức tạp của hạt nhân, nhưng sẽ buộc một mô hình phức tạp hơn nhiều, có thể mất SVM lâu hơn để tìm ra giải pháp tối ưu.

Datasets để sử dụng:

Các UCI Machine Learning Repository là một nguồn tuyệt vời của bộ dữ liệu.

MNIST handwriting recognition dataset là một cách tốt để sử dụng - bạn có thể chọn ngẫu nhiên các tập hợp con của dữ liệu để tạo các tập dữ liệu có kích thước ngày càng lớn hơn. Hãy ghi nhớ các dữ liệu tại liên kết có chứa tất cả các chữ số, SVM là tất nhiên nhị phân, do đó bạn sẽ phải giảm dữ liệu chỉ hai chữ số hoặc làm một số loại SVM nhiều lớp.

Bạn cũng có thể dễ dàng tạo bộ dữ liệu. Để tạo một tập dữ liệu tuyến tính, hãy chọn ngẫu nhiên một véc-tơ thông thường cho một siêu kết nối, sau đó tạo một điểm dữ liệu và xác định phía nào của siêu kết nối mà nó rơi vào để gắn nhãn nó. Thêm một số ngẫu nhiên để cho phép các điểm trong một khoảng cách nhất định của siêu liên kết đôi khi được gắn nhãn khác nhau. Tăng độ phức tạp bằng cách tăng chồng chéo giữa các lớp. Hoặc tạo một số cụm các điểm được phân phối bình thường, có nhãn là 1 hoặc -1, sao cho các bản phân phối chồng lên nhau ở các cạnh. Ví dụ phi tuyến tính cổ điển là bảng kiểm tra. Tạo điểm và gắn nhãn chúng trong mẫu bàn cờ. Để làm cho nó khó khăn hơn, mở rộng số lượng ô vuông, tăng kích thước và tăng số lượng datapoints. Bạn sẽ phải sử dụng một hạt nhân phi tuyến tính cho điều đó tất nhiên.

+0

Cảm ơn bạn rất nhiều vì lời giải thích tuyệt vời của bạn. Tôi đánh giá cao nó. Tôi đã cập nhật câu hỏi của mình để xem điều này có giúp ích cho – Manolete

+0

karenu Điều gì về ma trận đầu vào? Tôi thực sự đấu tranh để hiểu khi nào và tại sao tôi cần phải áp dụng chuyển tiếp cho nó. Tôi đã thấy một số ví dụ trên mạng, và mọi người đang làm một việc khác. Làm thế nào tôi có thể biết khi nào tôi cần phải áp dụng ma trận đầu vào t()? – Manolete