Я хотел бы построить линейную модель для прогнозирования класса экземпляров.Классы имеют элемент {-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