Построение линейной модели с нуля - PullRequest
0 голосов
/ 28 мая 2018

Я хотел бы построить линейную модель для прогнозирования класса экземпляров.Классы имеют элемент {-1, 1}.Для этого я бы хотел минимизировать эмпирический риск .

Кажется, мой код работает, так как он выводит массив с размером числа элементов входного элемента x, причем каждый атрибут имеет элемент {-1, 1}.Теперь я хотел бы знать , как поступить .Нужно ли создавать точечное произведение и проверять, является ли оно отрицательным или положительным?

Пример:

Один элемент ввода с 5 функциями:

[1, 1, -1, -1, -1]

Модель:

[7, 5, -2, 0, 3]

СборкаТочечное произведение модели и ввода x:

7 + 5 + 2 + 0 - 3 = 11

Результат:

11 > 0, x should be of class 1

сложение:

Код для построения модели

def learn_reg_ERM(X,y,lbda):
    # define consts
    max_iter = 200
    e  = 0.001
    alpha = 1.

    # init model
    w = np.random.randn(X.shape[1]);
    for k in np.arange(max_iter):
        # dot product/scalar product
        # [a, b, c] * [d, e, f] = [ad, be, cf]
        h = np.dot(X,w)
        # calculate (and print) loss and gradient of loss
        l,lg = loss(h, y)
        # print 'loss: {}'.format(np.mean(l))
        # calculate regularizers and gradient of regularizer at point w
        r,rg = reg(w, lbda)
        # calc loss + regularizer 
        g = np.dot(X.T,lg) + rg 

        if (k > 0):
            # update alpha
            alpha = alpha * (np.dot(g_old.T,g_old))/(np.dot((g_old - g).T,g_old))
        w = w - alpha * g
        # check if minimum is found
        if (np.linalg.norm(alpha * g) < e):
            break
        g_old = g
    return w
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...