点到平面距离

在我看来,感知鸡就相当于弱化版的SVM,即在二维平面上实现正确分类即可。
感知机的方程
§ 第二章  感知机 - 图1
其中§ 第二章  感知机 - 图2是超平面的法向量§ 第二章  感知机 - 图3是超平面的§ 第二章  感知机 - 图4。例如§ 第二章  感知机 - 图5,写成感知机方程为§ 第二章  感知机 - 图6,查看其图形,截距为-1
image.png
例如§ 第二章  感知机 - 图8,写成感知机方程§ 第二章  感知机 - 图9,其图形,截距为1
image.png

所以,能够完全把所有数据集分开的感知机模型如下图所示:
image.png
为此我们要找到一个损失函数,这个损失函数是所有误分类点到超平面的距离,这个距离我们来推导一下:
image.png

  • 点A(§ 第二章  感知机 - 图13)坐标为§ 第二章  感知机 - 图14,可以得到点A在向量§ 第二章  感知机 - 图15的基向量§ 第二章  感知机 - 图16投影

= 点A到超平面的距离 + 原点到超平面的距离,所以要求的距离就变成了原点到超平面的距离。
原点§ 第二章  感知机 - 图17到超平面的距离又等于点§ 第二章  感知机 - 图18,即超平面与§ 第二章  感知机 - 图19轴的交点在基向量上的投影,所以点A到超平面的距离为§ 第二章  感知机 - 图20

  • 如果点A(§ 第二章  感知机 - 图21),则§ 第二章  感知机 - 图22。所以我们取绝对值

§ 第二章  感知机 - 图23

损失函数

损失函数:这里我们取得损失函数便成了所有误分类点到超平面的距离
§ 第二章  感知机 - 图24
在不考虑§ 第二章  感知机 - 图25就是损失函数(不考虑的话就会存在无数解,如果想要得到唯一解,便是SVM的知识了。)

梯度下降法

由我们的损失函数可得,我们所要做的工作为最小化损失函数
§ 第二章  感知机 - 图26
损失函数的最小值为0,因为这时没有误分类点,所以距离为0.感知机学习算法是误分类驱动,采用随机梯度下降法。首先,任意选取一个超平面§ 第二章  感知机 - 图27,然后用梯度下降法不断地极小化目标函数。极小化过程中不是一次使§ 第二章  感知机 - 图28(误分类数据集)中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。
假设误分类点集合§ 第二章  感知机 - 图29是固定的,那么损失函数的梯度由
§ 第二章  感知机 - 图30
得到
§ 第二章  感知机 - 图31
其中§ 第二章  感知机 - 图32是步长 ,又称学习率。

求解步骤

  1. 选取初值§ 第二章  感知机 - 图33
  2. 选取数据§ 第二章  感知机 - 图34
  3. 判断,如果§ 第二章  感知机 - 图35,则§ 第二章  感知机 - 图36
  4. 转到步骤2,继续判断数据

image.png

例子

image.png
image.png

代码

  1. clear
  2. clc
  3. y = [1,1,-1];
  4. x = [3,4,1;3,3,1];%每列代表一个数据集
  5. scatter(x(1,:),x(2,:),'filled');
  6. axis([0 5 ,-5 5])
  7. X = 0:5;
  8. %选出初值w0,b0
  9. w = [0,0];
  10. b = 0;
  11. %选取学习率
  12. eta = 1;
  13. %选取数据(xi,yi)
  14. column = 1;
  15. while column <= size(x,2)
  16. hold on
  17. flag = 0;
  18. while (y(column)*(w*x(:,column)+b) <0) || (y(column)*(w*x(:,column)+b) ==0)
  19. w = w + eta*y(column)*x(:,column)';
  20. b = b + eta*y(column);
  21. flag = 1 ;
  22. end
  23. Y = (-w(1)*X - b)/(w(2));
  24. plot(X,Y);
  25. column = column + 1;
  26. if flag == 1
  27. column = 1;
  28. end
  29. disp(column)
  30. pause(2)
  31. end

1.gif
可以看到超平面的迭代过程