文章目录
算法和代码之间的误区
在看统计学习方法的时候,线性支持向量机学习算法变成代码时,下面这个函数不知道如何构造成算法:
为什么我认为需要上面这个函数呢,是因为随机梯度下降,需要求梯度,也就说求导,没有函数如何求导。(这是我当时单纯的想法)。
后来经过老师的解答发现,现实中从来不写这种函数,因为现实给你数据,你不会知道这个数据会满足什么样的函数的。所以一般的求梯度这个过程直接由数据完成,也就是说知道x,y,就可以求梯度。
参考:https://www.jianshu.com/p/9d8e8db52dde
线性支持向量机的随机梯度下降
线性支持向量机的随机梯度下降相当的巧妙,已知原问题如下:
稍微做一下转换将变成如下形式:
想要计算上面公式的梯度只需要(注意这里有个标记错误,是y_i):
那么随机梯度下降的代码就是:
代码
class SoftMarginSVM(object):
def __init__(self, train_data, train_label, validate_data, validate_label, alpha=0.00001, C=700.0):
self.train_data = train_data
self.train_label = train_label
self