Olá, pessoal. Estou tentando implementar uma rede neural SVM (máquinas de vetor de suporte) em Java para (apriori) padrões linearmente separável, porém não estou conseguindo. Minha dificuldade está no início da rede porque preciso encontrar os multiplicadores de lagrange. Como eu irei utilizar o método de Newton (de primeira ordem) para encontrá-los, farei uso da seguinte função lagrangiana (função de custo): Q(alfa) = SOMATORIO alfa(i) - 1/2 * SOMATORIO SOMATORIO alfa(i)alfa(j)didjxixj, sujeito às restrições:
-
SOMATORIO alfa(i)di=0, para i=1, …, N
-
alfa(i) >= 0, para i=1, …, N
-
Minha primeira dificuldade está no fato de o método de newton ser de primeira ordem e eu não consegui implementar um método para fazer essa derivada.
-
Outra dúvida é o fato de o método de Newton usar somatórios, que na minha implementação são representados pelos loops ‘for’. Como fazer a derivada da função Q(alfa) se após os loops os valores das atributos alfa(i)alfa(j)didjxixj serão armazenados em um outros atributo (p.ex.: fx = o resultado da soma ?alfa(i) - 1/2 * SOMATORIO SOMATORIO alfa(i)alfa(j)didjxixj).
Existe uma outra maneira de se encontrar os multiplicadores de lagrange de maneira mais fácil? Existe algum método já feito?
obs.: Meus padrões de entrada são inicialmente portas lógicas; depois eu farei para imagens na dimensão 10x10.
Aguardando resposta…