带有非线性边界的分类问题不能通过简单的感知器来解决。以下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
现在,内核和所谓的内核技巧的想法是将输入空间投影到更高维度的空间,就像这样(图片来源):
我的问题我
如何利用内核技巧(例如,使用简单的二次内核),以便获得能够解决给定分类问题的内核感知器?请注意:这主要是一个概念性问题,但是如果您还可以进行必要的代码修改,那将是很好的
到目前为止,
我尝试了以下方法,这些方法都可以正常工作,但是我认为这并不是真正的交易,因为对于更复杂的问题,它在计算上变得过于昂贵(“内核技巧”后面的“技巧”不仅仅是“内核本身,但您不必为所有实例计算投影):
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)
全面披露
我一周前在SO上发布了此问题,但并没有引起太多关注。我怀疑这里是一个更好的地方,因为它比编程问题更多是概念性问题。