SVM如何通过点到超平面距离获得目标函数和约束函数?
① 假设L1是其中一条过 +1 类支持向量且平行于 WX+b=0 的直线,L2 是过 -1 类支持向量且平行于 WX+b=0 的直线,L1 和 L2 就确定了这条马路的边边,L 是马路中线。
② L 的形式是 WX+b=0,又因为 L1、L2 距离 L 是相等的,所有定义 L1 为 WX+b=1,L2 为 WX+b=-1。
注:这两条平行线的方程右边既可以是 1 和 -1,也可以是 2 和 -2,或者任意非零常数 C 和 -C。规定 1 和 -1 只是为了方便,例如 2x+3y+1=0 和 4x+6y+2=0 是等价的,方程同乘一个常数后并不会改变。
③ 2d 是 L1 和 L2 这两条平行线之间的距离:
④ 目标是最大化几何间隔d,由于
⑤ 对于求 min||W||,通常会转化为求
⑥ ||W|| 不可能无限小,因为还有限制条件:超平面正确分类,意味着点 i 到超平面的距离恒大于等于 d,即:
⑦ 两边同乘||W||,简化为:
注:
- 如果第 i 个样本属于 +1 类别,则
,并且,故两者相乘是大于0的。
- 如果第 i 个样本属于 -1 类别,则
,并且,故两者相乘是大于0的。
注:这意味着
注:用 y 替换绝对值,是因为 y 是已知样本数据,也方便后面的公式求解。
⑧ 我们获得目标函数:
⑨ 我们获得约束条件:
Python基础积累(numpy)
numpy生成随机数
import numpy as np
np.random.rand(3, 3)
运行结果:
array([[0.68537219, 0.54168828, 0.31736894],
[0.74666141, 0.48711075, 0.03362492],
[0.70282142, 0.0422297 , 0.25828402]])
注:随机生成一个二维数组。
np.random.rand(2, 3, 3)
运行结果:
array([[[0.06007194, 0.4339849 , 0.13609465],
[0.37893364, 0.04192778, 0.68935534],
[0.84097557, 0.69990864, 0.34211253]],
[[0.00239661, 0.46886934, 0.65149633],
[0.81336026, 0.89658351, 0.55632714],
[0.45345776, 0.28813519, 0.65834964]]])
注:随机生成一个三维数组。
import numpy as np
np.random.seed(0)
np.random.rand(5)
运行结果:
array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
注:seed()函数用于指定随机数生成时所用算法开始的整数值。
注:如果使用相同的seed( )值,则每次生成的随即数都相同。如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
注:np.random.rand(5)随机生成包含5个元素的浮点数组。
np.random.seed(8)
np.random.rand(5)
运行结果:
array([0.8734294 , 0.96854066, 0.86919454, 0.53085569, 0.23272833])
注:设置的seed()值仅一次有效。