Жадный адаптивный словарь (Гир) для контролируемого машинного обучения


Для моего проекта в машинного обучения под наблюдением, я должен упростить обучение-данных, и я должен использовать эту технику на странице 5 документа.

Алгоритм псевдокод

Мой код (числа шагов):

import numpy as np
import math
def GAD(X): 
    # 1. Initialize
    l=0
    D=[]
    I=[]
    R = np.copy(X)

    # 2. repeat l=<N (look algorithm) 
    while l<X.shape[0]: 
        # 3. Find residual column (l1 to l2 norm ratio)
        min_eps = float('inf') # to search min initialize to infinite
        j_min   =   -1
        for j in range(R.shape[1]): 
            norma1 = norma2 = 0
            for i in range(R.shape[0]): 
                norma1 += abs(R[i][j])
                norma2 += (R[i][j])**2
            norma2 = math.sqrt(norma2)
            eps = norma1/norma2   # sparsity index
            if min_eps > eps and j not in I: #excludes if already inserted
                min_eps=eps
                j_min = j
        # 4. Set the l-th atom equal to normalized
        norma2 = np.sqrt(np.sum(R[:, j_min]**2, axis=0)) 
        atomo = R[:, j_min]/norma2   
        # 5. Add to the dictionary
        if len(D) == 0:
            D = np.asarray(atomo)
        else:
            D = np.vstack((D, atomo.T))
        I.append(j_min)
        # 6. Compute the new residual    
        for j in range(R.shape[1]): 
            R[:, j] = R[:, j]-atomo*(atomo.T*R[:, j]) 
        l = l+1
    # 7. Termination (read page 6 of the document)
    return D,I

У меня есть некоторые сомнения:

  1. Это правильная реализация (наблюдать в основном шаги 5 и 6 алгоритма псевдокод)?


Комментарии
1 ответ

Я не читал газету, поэтому не обязательно понимать алгоритм, но это кажется неправильным для меня:

    # 3. Find residual column (l1 to l2 norm ratio)
min_eps = float('inf') # to search min initialize to infinite
j_min = -1
for j in range(X.shape[1]):
norma1 = norma2 = 0
for i in range(X.shape[0]):
norma1 += abs(X[i][j])
norma2 += (X[i][j])**2
norma2 = math.sqrt(norma2)
eps = norma1/norma2 # sparsity index
if min_eps > eps and j not in I: #excludes if already inserted
min_eps=eps
j_min = j

Псевдокод говорит, чтобы найти столбец \${\mathbf р}^л\$ с минимальным коэффициентом, но этот код находит в столбце \$\mathbf\ х$ с минимального значения.

Вы протестировали ваш код и убедился, что он возвращает правильный результат?

2
ответ дан 30 января 2018 в 04:01 Источник Поделиться