def testDigits(kTrup=('rbf', 10)):
    trainingDigits = 'F:\\panrui\\我的桌面\\learning file\\machinelearninginaction\\Ch06\\trainingDigits'
    dataArr, labelArr = loadImages(trainingDigits)
    b, alphas = smoP(dataArr, labelArr, 200, 0.0001, 10000, kTrup)
    datMat = mat(dataArr)
    labelMat = mat(labelArr).transpose()
    svInd = nonzero(alphas.A > 0)[0]
    sVs = datMat[svInd]
    labelSV = labelMat[svInd]
    print("there are %d Support Vectors " % shape(sVs)[0])
    m, n = shape(datMat)
    errorCount = 0
    for i in range(m):
        kernelEval = kernelTrans(sVs, datMat[i, :], kTrup)
        predict = kernelEval.T * multiply(labelSV, alphas[svInd]) + b
        if sign(predict) != sign(labelArr[i]):
            errorCount += 1
    print("the training error is: %f" % (float(errorCount) / m))
    dataArr, labelArr = loadImages('testDigits')
    errorCount = 0
    datMat = mat(dataArr)
    labelMat = mat(labelArr).transpose()
    m, n = shape(datMat)
    for i in range(m):
        kernelEval = kernelTrans(sVs, datMat[i, :], kTrup)
        predict = kernelEval.T * multiply(labelSV, alphas[svInd]) + b
        if sign(predict) != sign(labelArr[i]):
            errorCount += 1
    print("the training error is: %f" % (float(errorCount) / m))
Esempio n. 2
0
def kernelTrans(X, A, kTup):
    m, n = shape(X)
    K = mat(zeros((m, 1)))
    if kTup[0] == 'lin': K = X * A.T
    elif kTup[0] == 'rbf':
        for j in range(m):
            deltaRow = X[j, :] - A
            K[j] = deltaRow * deltaRow.T
        K = exp(K / (-1 * kTup[1]**2))
    else:
        raise NameError('that Kernel is not recognized')
    return K
Esempio n. 3
0
def haar_inverse(image, dim=2):
    '''
    Apply haar inverse transformation.

    :param image: square matrix
    :param dim: dimension
    :return: None
    '''
    P = permutation_matrix(dim)
    T = haar_matrix(dim)

    image[0:dim, 0:dim] = T.T * P.T * M.asmatrix(image[0:dim, 0:dim]) * P * T

    if dim == M.shape(image)[0]:
        return

    haar_inverse(image, dim * 2)
Esempio n. 4
0
def haar_inverse(image, dim=2):
    '''
    Apply haar inverse transformation.

    :param image: square matrix
    :param dim: dimension
    :return: None
    '''
    P = permutation_matrix(dim)
    T = haar_matrix(dim)

    image[0:dim, 0:dim] = T.T * P.T * M.asmatrix(image[0:dim, 0:dim]) * P * T

    if dim == M.shape(image)[0]:
        return

    haar_inverse(image, dim * 2)
Esempio n. 5
0
def haar_forward(image, dim=None, recursive=True):
    '''
    Apply haar transformation to image.

    :param image: square matrix
    :param dim: dimension
    :param recursive: apply recursively
    :return: None
    '''
    if dim is None:
        dim = M.shape(image)[0]

    if dim == 1:  # base case
        return

    P = permutation_matrix(dim)
    T = haar_matrix(dim)

    image[0:dim, 0:dim] = P * T * M.asmatrix(image[0:dim, 0:dim]) * T.T * P.T

    if recursive:
        haar_forward(image, dim / 2)
Esempio n. 6
0
def haar_forward(image, dim=None, recursive=True):
    '''
    Apply haar transformation to image.

    :param image: square matrix
    :param dim: dimension
    :param recursive: apply recursively
    :return: None
    '''
    if dim is None:
        dim = M.shape(image)[0]

    if dim == 1:  # base case
        return

    P = permutation_matrix(dim)
    T = haar_matrix(dim)

    image[0:dim, 0:dim] = P * T * M.asmatrix(image[0:dim, 0:dim]) * T.T * P.T

    if recursive:
        haar_forward(image, dim / 2)
Esempio n. 7
0
def QuadProg(H, c, Ae, be, Ai, bi, x0):
    epsilon = 1e-9
    err = 1e-6
    k = 0
    x = x0
    n = len(x)
    kmax = 1e2
    ne = len(be)
    ni = len(bi)
    index = mat.ones((ni, 1))
    for i in range(0, ni):
        if Ai[i, :] * x > bi[i] + epsilon:
            index[i] = 0

    while k <= kmax:
        Aee = []
        #if ne > 0:
        #    Aee = Ae
        AeeList = []
        if ne > 0:
            AeeList.append(Ae)
        for j in range(0, ni):
            if index[j] > 0:
                AeeList.append(Ai[j, :])
                #Aee = mat.vstack((Aee, Ai[j,:]))
        if len(AeeList) == 0:
            Aee = []
        else:
            Aee = mat.vstack(AeeList)
            m1, n1 = mat.shape(Aee)
        gk = H * x + c
        dk, lamk = qsubp(H, gk, Aee, mat.zeros((m1, 1)))
        if np.linalg.norm(dk) <= err:
            y = 0.0
            if len(lamk) > ne:
                jk = np.argmin(lamk[ne:len(lamk)])
                y = lamk[jk]
            if y >= 0:
                exitflag = 0
            else:
                exitflag = 1
                for i in range(0, ni):
                    if index[i] and (ne + sum(index[0:i])) == jk:
                        index[i] = 0
                        break
            #k += 1
        else:
            exitflag = 1
            alpha = 1.0
            tm = 1.0
            for i in range(0, ni):
                if index[i] == 0 and Ai[i, :] * dk < 0:
                    tmm = (bi[i] - Ai[i, :] * x) / (Ai[i, :] * dk)
                    tm1 = abs(tmm[0, 0])
                    if tm1 < tm:
                        tm = tm1
                        ti = i
            alpha = min(alpha, abs(tm))
            x = x + alpha * dk
            if tm < 1:
                index[ti] = 1
        if exitflag == 0:
            break
        k += 1
    print k
    return x
def QuadProg(H, c, Ae, be, Ai, bi, x0):
    epsilon = 1e-9
    err = 1e-6
    k = 0
    x = x0
    n = len(x)
    kmax = 1e2
    ne = len(be)
    ni = len(bi)
    index = mat.ones((ni, 1))
    for i in range(0, ni):
        if Ai[i,:] * x > bi[i] + epsilon:
            index[i] = 0

    while k <= kmax:
        Aee = []
        #if ne > 0:
        #    Aee = Ae
        AeeList = []
        if ne > 0:
            AeeList.append(Ae)
        for j in range(0, ni):
            if index[j] > 0:
                AeeList.append(Ai[j, :])
                #Aee = mat.vstack((Aee, Ai[j,:]))
        if len(AeeList) == 0:
            Aee = []
        else:
            Aee = mat.vstack(AeeList)
            m1, n1 = mat.shape(Aee)
        gk = H * x + c
        dk, lamk = qsubp(H, gk, Aee, mat.zeros((m1, 1)))
        if np.linalg.norm(dk) <= err:
            y = 0.0
            if len(lamk) > ne:
                jk = np.argmin(lamk[ne:len(lamk)])
                y = lamk[jk]
            if y >= 0:
                exitflag = 0
            else:
                exitflag = 1
                for i in range(0, ni):
                    if index[i] and (ne + sum(index[0:i]))  == jk:
                        index[i] = 0;
                        break;
            #k += 1
        else:
            exitflag = 1
            alpha = 1.0
            tm = 1.0
            for i in range(0, ni):
                if index[i] == 0 and Ai[i, :] * dk < 0:
                    tmm = (bi[i] - Ai[i, :] * x) / (Ai[i, :] * dk)
                    tm1 = abs(tmm[0,0])
                    if tm1 < tm:
                        tm = tm1;
                        ti = i;
            alpha = min(alpha, abs(tm))
            x = x + alpha * dk
            if tm < 1:
                index[ti] = 1
        if exitflag == 0:
            break
        k += 1
    print k
    return x