비선형 경계의 분류 문제는 단순한 퍼셉트론 으로 해결할 수 없습니다 . 다음 R 코드는 설명을위한 것이며 Python 의이 예제 를 기반으로합니다 .
nonlin <- function(x, deriv = F) {
if (deriv) x*(1-x)
else 1/(1+exp(-x))
}
X <- matrix(c(-3,1,
-2,1,
-1,1,
0,1,
1,1,
2,1,
3,1), ncol=2, byrow=T)
y <- c(0,0,1,1,1,0,0)
syn0 <- runif(2,-1,1)
for (iter in 1:100000) {
l1 <- nonlin(X %*% syn0)
l1_error <- y - l1
l1_delta <- l1_error * nonlin(l1,T)
syn0 <- syn0 + t(X) %*% l1_delta
}
print("Output After Training:")
## [1] "Output After Training:"
round(l1,3)
## [,1]
## [1,] 0.488
## [2,] 0.468
## [3,] 0.449
## [4,] 0.429
## [5,] 0.410
## [6,] 0.391
## [7,] 0.373
이제 커널 과 소위 커널 트릭 의 아이디어는 입력 공간을 다음과 같이 더 높은 차원의 공간으로 투영하는 것입니다 (사진 출처 ).
내 질문 주어진 분류 문제를 해결할 수
있는 커널 perceptron을 얻도록 커널 트릭 (예 : 간단한 2 차 커널)을 어떻게 사용합니까? 참고 : 이것은 주로 개념적 질문이지만 필요한 코드 수정을 제공 할 수 있다면 좋을 것입니다
내가 지금까지
시도한 것은 잘 작동하는 다음을 시도했지만 더 복잡한 문제에 대해 계산적으로 너무 비싸기 때문에 이것이 실제 거래는 아니라고 생각합니다 ( "커널 트릭"의 "트릭"은 단순한 아이디어가 아닙니다. 커널 자체이지만 모든 인스턴스에 대한 투영을 계산할 필요는 없습니다.)
X <- matrix(c(-3,9,1,
-2,4,1,
-1,1,1,
0,0,1,
1,1,1,
2,4,1,
3,9,1), ncol=3, byrow=T)
y <- c(0,0,1,1,1,0,0)
syn0 <- runif(3,-1,1)
전체 공개
1 주일 전에이 질문을 SO 에 게시 했지만 별다른 주목을받지 못했습니다. 프로그래밍 질문보다 개념적 질문이기 때문에 여기가 더 좋은 곳이라고 생각합니다.