感知机理论见博文:统计学习方法笔记(二)感知机学习
对于训练数据集,其中正例点是x1=(3,3)T,x2=(4,3)T,负例点为x3=(1,1)T,用感知机学习算法的原始形式求感知机模型f(x)=w·x+b。这里w=(w(1),w(2))T,x=(x(1),x(2))T
解:构建最优化问题:
按照算法求解w, b。η=1
(1)取初值w0=0, b0=0
(2)对于(3,3):-(0+0)+0=0未被正确分类。更新w,b
w1=w0+1*y1·x1 = (0,0)T+1(3,3)T=(3,3)T
b1=b0+y1=1
得到线性模型w1x+b1 = 3x(1)+3x(2)+1
(3)返回(2)继续寻找yi(w·xi+b)≤0的点,更新w,b。
x1和x2都yi(w·xi+b)大于0,x3被错误分类。
w2 = w1 + 1* y3* x3 = (3, 3)T + 1* (-1)*(1, 1)T = (2, 2)T,
b2 = b1+ y3 = 1 -1 = 0
得到线性模型 w2x+ b2 = 2x(1)+2x(2)
直到对于所有的点yi(w·xi+b)>0,没有误分类点,损失函数达到最小。
分离超平面为x(1)+x(2)-3=0
结果不是唯一,与初始值有关
R代码:
x <- matrix(c(3,3,4,3,1,1), nrow = 3, byrow = TRUE)
y <- c(1,1,-1)
w <- matrix(c(0,0), nrow = 2, byrow = TRUE)
b <- 0
m <- length(y)
count = 0;
while (count < m){
for (i in 1:m){
if ((x[i,] %*% w * y[i]) <=0){
y1 = matrix(c(y[i], y[i]), nrow = 2, byrow = TRUE)
w = w + (1 * x[i,] * y1)
b = b + 1 * y[i]
}
else{
count = count + 1
}
}
}
x1 = c(0:0.1:5)
x2 = -(b + w[1] * x1)/w[2]
lines(x1,x2)
> b
[1] -1
> w
[,1]
[1,] 1
[2,] 1
即超平面为x(1)+x(2)-1=0,为什么b和书中的结果不一样呢?这是迭代的顺序不一致,可见,感知机学习算法由于采用不同的初值或者选取不同的误分类点,解可以不同。
此为感知机学习算法的原始形式,后补上对偶形式。
感知机理论可见: 统计学习方法笔记(二)感知机学习
欢迎交流~~