您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页SVM-Pegasos实现

SVM-Pegasos实现

来源:爱go旅游网

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有 赣ICP备2024042791号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务