Tối ưu hóa máy Vector hỗ trợ với lập trình bậc hai


12

Tôi đang cố gắng để hiểu quá trình đào tạo một máy vectơ hỗ trợ tuyến tính . Tôi nhận ra rằng các thuộc tính của SMV cho phép chúng được tối ưu hóa nhanh hơn nhiều so với sử dụng bộ giải lập trình bậc hai, nhưng với mục đích học tập, tôi muốn xem cách thức hoạt động của nó.

Dữ liệu đào tạo

set.seed(2015)
df <- data.frame(X1=c(rnorm(5), rnorm(5)+5), X2=c(rnorm(5), rnorm(5)+3), Y=c(rep(1,5), rep(-1, 5)))
df
           X1       X2  Y
1  -1.5454484  0.50127  1
2  -0.5283932 -0.80316  1
3  -1.0867588  0.63644  1
4  -0.0001115  1.14290  1
5   0.3889538  0.06119  1
6   5.5326313  3.68034 -1
7   3.1624283  2.71982 -1
8   5.6505985  3.18633 -1
9   4.3757546  1.78240 -1
10  5.8915550  1.66511 -1

library(ggplot2)
ggplot(df, aes(x=X1, y=X2, color=as.factor(Y)))+geom_point()

nhập mô tả hình ảnh ở đây

Tìm siêu phẳng ký quỹ tối đa

Theo bài viết trên Wikipedia về SVM này , để tìm siêu phẳng lề tối đa tôi cần phải giải quyết

yi(wxi-b)1.

argmin(w,b)12w2
chủ đề cho (với mọi i = 1, ..., n)
yi(wxib)1.

Làm cách nào để tôi 'cắm' dữ liệu mẫu của mình vào bộ giải QP trong R (ví dụ quadprog ) để xác định ?w


Bạn phải giải quyết vấn đề kép

2
@fcop bạn có thể giải thích? Cái kép trong trường hợp này là gì? Làm thế nào để tôi giải quyết bằng cách sử dụng R? v.v.
Ben

Câu trả lời:


6

GỢI Ý :

Quadprog giải quyết như sau:

minxdTx+1/2xTDxsuch that ATxx0

Hãy xem xét

x=(wb)and D=(I000)

trong đó là ma trận danh tính.I

Nếu là và là :p × 1 y n × 1wp×1yn×1

x:(2p+1)×1D:(2p+1)×(2p+1)

Trên các dòng tương tự:

x0=(11)n×1

Xây dựng bằng cách sử dụng các gợi ý ở trên để thể hiện ràng buộc bất bình đẳng của bạn.A


1
Tôi bị lạc là những gì ? dT
Ben

1
Hệ số của trong hàm mục tiêu của bạn là gì? Không phải mà là ? | | w | | 2 2 ww||w||22w
quyền

1
Đánh giá cao sự giúp đỡ. Tôi nghĩ rằng tôi đã tìm ra điều này nhưng khi tôi đặt D = ma trận bạn đề xuất quadprogtrả về lỗi "ma trận D trong hàm bậc hai không xác định dương!"
Ben

3
HACK: Perturb bằng cách thêm một giá trị nhỏ, nói trên đường chéo1 e - 6D1e-6
quyền vào

7

Theo gợi ý của Rightskewed ...

library(quadprog)

# min(−dvec^T b + 1/2 b^T Dmat b) with the constraints Amat^T b >= bvec)
Dmat       <- matrix(rep(0, 3*3), nrow=3, ncol=3)
diag(Dmat) <- 1
Dmat[nrow(Dmat), ncol(Dmat)] <- .0000001
dvec       <- rep(0, 3)
Amat       <- as.matrix(df[, c("X1", "X2")])
Amat <- cbind(Amat, b=rep(-1, 10))
Amat <- Amat * df$Y
bvec       <- rep(1, 10)
solve.QP(Dmat,dvec,t(Amat),bvec=bvec)

plotMargin <- function(w = 1*c(-1, 1), b = 1){
  x1 = seq(-20, 20, by = .01)
  x2 = (-w[1]*x1 + b)/w[2]
  l1 = (-w[1]*x1 + b + 1)/w[2]
  l2 = (-w[1]*x1 + b - 1)/w[2]
  dt <- data.table(X1=x1, X2=x2, L1=l1, L2=l2)
  ggplot(dt)+geom_line(aes(x=X1, y=X2))+geom_line(aes(x=X1, y=L1), color="blue")+geom_line(aes(x=X1, y=L2), color="green")+
    geom_hline(yintercept=0, color="red")+geom_vline(xintercept=0, color="red")+xlim(-5, 5)+ylim(-5, 5)+
    labs(title=paste0("w=(", w[1], ",", w[2], "), b=", b))
}

plotMargin(w=c(-0.5065, -0.2525), b=-1.2886)+geom_point(data=df, aes(x=X1, y=X2, color=as.factor(Y)))

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.