2013-04-07 3 views
0

Я должен сделать оптимизацию в контролируемом обучении, чтобы получить мои веса.Оптимизация весов в matlab

Я должен узнать значения (w1,w2,w3,w4) таким образом, что всякий раз, когда мой вектор A = [a1 a2 a3 a4] является 1 сумма w1*a1 + w2*a2 + w3*a3 + w4*a4 становится больше, чем 0,5, и когда его -1 (метки), то она становится меньше, чем 0,5.

Может кто-нибудь сказать мне, как я могу подойти к этой проблеме в Matlab? Один из способов, который я знаю, - это сделать это с использованием эволюционных алгоритмов, взяв случайный вектор значений и затем сменив, чтобы выбрать лучшие значения n.

Есть ли другой способ, к которому это можно подойти?

+1

что вы сделали до сих пор? SO не предназначен для решения проблем по требованию, а для обмена знаниями. Члены SO любят оценивать сумму усилий, которую OP накладывает на решение предлагаемой проблемы. – fpe

+0

@fpe Одним из решений, которые я придумал, является просто передать эти векторы в SVM, и я предполагаю, что он будет делать то же самое с линейным ядром. Я также посмотрел на linprog, но не могу понять, как использовать его в моем сценарии. – user2230369

ответ

0

Вы можете сделать это, используя linprog.
Позвольте A быть матрицей размера n 4, состоящей из всех n обучения 4-vecotrs у вас есть. Вы также должны иметь вектор y с элементами n (каждый плюс плюс минус 1), представляющий метку каждого учебного 4-vecvtor.

Используя A и y, мы можем написать линейную программу (см. doc для имен параметров, которые я использую). Теперь у вас нет объективной функции, поэтому вы можете просто установить f как f = zeros(4,1);.
Единственное, что у вас есть, это ограничение неравенства (< a_i , w > - .5) * y_i >= 0 (где <.,.> - это точечный продукт между 4-вектором a_i и весовым вектором w).
Если мои расчеты верны, то это ограничение можно записать в виде

cmat = bsxfun(@times, A, y); 

В целом вы получаете

w = linprog(zeros(4,1), -cmat, .5*y); 
Смежные вопросы