SVM-Pegasos实现

这里写图片描述

def seqPegasos(dataSet, labels, lam, T):
    m, n = shape(dataSet)
    w = zeros(n)
    for t in range(1, T + 1):
        i = random.randint(m)
        eta = 1 / (lam * t)
        p = predict(w, dataSet[i, :])
        if labels[i] * p < 1:
            w = (1 - eta * lam) * w + eta * labels[i] * dataSet[i, :]
        else:
            w = (1 - eta * lam) * w
    return w

这里写图片描述

def batchPegasos(dataSet, labels, lam, T, k):
    m, n = shape(dataSet);
    w = zeros(n);
    dataIndex = arange(m)
    for t in range(1, T + 1):
        wDelta = mat(zeros(n))  # reset wDelta
        eta = 1.0 / (lam * t)
        random.shuffle(dataIndex)
        for j in range(k):  # go over training set
            i = dataIndex[j]
            p = predict(w, dataSet[i, :])  # mapper code
            if labels[i] * p < 1:  # mapper code
                wDelta += labels[i] * dataSet[i, :].A  # accumulate changes
        w = (1.0 - 1 / t) * w + (eta / k) * wDelta  # apply changes at each T
    return w

这里写图片描述

def KernelPegasos(dataSet, labels, lam, T):
    m, n = shape(dataSet)
    alpha = zeros((m, 1))
    for t in range(1, T + 1):
        i = random.randint(m)
        if labels[i] / (lam * t) * ((alpha * labels[i]).T * kernel(dataSet, dataSet[i])) < 1:
            alpha[i] = alpha[i] + 1
    return alpha
    def kernel(X, A):  # calc the kernel or transform data to a higher dimensional space
    k = 0.1
    m, n = shape(X)
    K = mat(zeros((m, 1)))
    for j in range(m):
        deltaRow = X[j, :] - A
        K[j] = deltaRow * deltaRow.T
    K = exp(K / (-1 * k ** 2))  # divide in NumPy is element-wise not matrix like Matlab
    return K

这里写图片描述
这里写图片描述
参考文献:

  1. S.Shalev-Shwartz, Y.Singer, and N.Srebro. Pegasos: Primal estimated sub-gradient solver for svm.In Proceedings of the 24th International Conference on Machine Learning, pages 807–814, Helsinki,Finland, 2007.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值