Validação cruzada no Matlab

543 views
Skip to first unread message

Raquel Machado

unread,
Feb 11, 2014, 10:35:18 PM2/11/14
to redesn...@googlegroups.com
Olá pessoal, gostaria de saber se alguém já utilizou validação cruzada como condição de parada do treinamento da rede neural no matlab. Eu vi que o matlab utiliza vários critérios para parar o treinamento inclusive verificações de validação. Alguém pode me ajudar como faço para utilizar esse critério no matlab?
Message has been deleted

laerc...@gmail.com

unread,
Feb 12, 2014, 8:04:00 PM2/12/14
to redesn...@googlegroups.com
Olá Raquel,

qual rede você está desenvolvendo? A MLP padrão no Matlab utiliza validação cruzada com early stop. Usando o comando "nnstart" e indo no "pattern recognition" você pode ver um demo.
Qualquer dúvida é só falar, estou desenvolvendo uma MLP e um RBF e podemos discutir.

Raquel Machado

unread,
Feb 13, 2014, 10:18:45 AM2/13/14
to redesn...@googlegroups.com

Oi Laercio, estou desenvolvendo uma rede MLP para predição. Muito obrigada e entrarei em contato sim, vou dá uma olhada no demo e ver se funciona na minha rede. :)  

Raquel Machado

unread,
Feb 13, 2014, 10:19:29 AM2/13/14
to redesn...@googlegroups.com

Oi Laercio, estou desenvolvendo uma rede MLP para predição. Muito obrigada e entrarei em contato sim, vou dá uma olhada no demo e ver se funciona na minha rede. :)  

Raquel Machado

unread,
Feb 17, 2014, 12:24:36 PM2/17/14
to redesn...@googlegroups.com
Bom, olhei lá o demo, não era esse tipo de validação que queria para minha rede, quero usar validação cruzada k-fold. Pode me ajudar  como faço isso no matlab?

laerc...@gmail.com

unread,
Feb 17, 2014, 4:25:18 PM2/17/14
to redesn...@googlegroups.com

Então Raquel,

não sou muito bom no Matlab tão pouco sei muito de redes neurais, mas posso tentar te ajudar sim; talvez eu diga algo conceitualmente errado.
Como estou criando redes para reconhecimento de padrões não sei se o Matlab usa o mesmo tipo de validação para o caso de predição e não estou com muito tempo agora para ler sobre isso. Depois eu te mando uns PDF para você ler que acho que te ajudará.

É possível fazer algumas customizações nas redes, entretanto, não sei se a forma de validação é uma delas e nem se é possível chegar perto do que você está querendo de forma "automática". Tem algumas coisas nesses toolboxs do Matlab que eles não deixam nem a gente ver como está sendo processado.

Não conhecia essa validação cruzada K-fold, fiz uma pesquisa rápida neste link: http://pt.wikipedia.org/wiki/Valida%C3%A7%C3%A3o_cruzada.
O que é chamado na wikipedia de " Método holdout " é justamente o que o Matlab faz para validar as redes MLP de reconhecimento de padrão para o código gerado pelo comando "nnstart". A parte do código responsável por isso é essa:

% Setup Division of Data for Training, Validation, Testing
% For a list of all data division functions type: help nndivide
net.divideFcn = 'dividerand';  % Divide data randomly
net.divideMode = 'sample';  % Divide up every sample
net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

Então, cada vez que a rede é treinada é gerado uma nova divisão das amostras de treinamento, validação e teste.

Pelo que entendi da validação cruzada K-folds, seria realizar vários treinamento, mas você teria um controle da divisão das amostras, igual a imagem abaixo, onde cada "validação" seria igual a criar a rede e treinar. Acho que uma forma de se fazer isso é gerar os K subconjuntos fora da rede, e gerando um loop onde é apresentado para a rede e de forma determinada (é não randômica) que, por exemplo, o conjunto K(1) é de validação e todos os outros de treinamento.
Seria necessário gerar N redes, de acordo com as combinações dos K subconjuntos e o pior é que para cada rede você teria que verificar se os subconjuntos K estão representativos sem tendência (usando a curva de teste gerada no Matlab).

Acho que seja possível fazer dessa forma, só tem que "travar" no Matlab quais amostras ele deve considerar para treinamento e para validação.
Não sei se ficou muito confuso, escrevi rapidamente, pois tenho uma reunião agora. Vê o que deu para entender e mais tarde respondo algum novo questionamento e te mando a documentação de help (vou tentar fazer o que te falei, se conseguir te mando o código). 






Em quarta-feira, 12 de fevereiro de 2014 01h35min18s UTC-2, Raquel Machado escreveu:

Raquel Machado

unread,
Feb 18, 2014, 9:16:46 AM2/18/14
to redesn...@googlegroups.com
Bom Laercio é basicamente isso que li sobre o método e que você explanou, eu estava usando esse tipo de validação mas não estou obtendo bons resultados (ainda testarei outros atributos para melhorar o desempenho, mas estou começando pela validação), por isso queria testar esse tipo de validação, também não tenho experiência com o matlab, comecei a mexer com ele por causa de redes neurais. E acho que isso que está dificultando as coisas. O toolbox de redes do matlab tbm não ajuda muito e não encontrei nenhum exemplo usando este tipo de validação.  A única coisa que encontrei foi usar cvpartition que faz parte do toolbox de statística do matlab. Mas não obtive resultado satisfatório, pois dá um erro na divisão dos meus dados. Vou continuar estudando para ver se consigo também, se vc conseguir alguma coisa fico grata. No mais já agradeço a atenção, pois as vezes nos ambientes acadêmicos nem isso conseguimos, muitas vezes as pessoas só querem reter conhecimento e isso me deixa triste e desmotivada. Qualquer coisa se precisar estou aqui :)

laerc...@gmail.com

unread,
Feb 19, 2014, 8:36:18 PM2/19/14
to redesn...@googlegroups.com
Raquel,

Quando você disse, na última postagem, "(...) eu estava usando esse tipo de validação mas não estou obtendo bons resultados (...)" estava se referindo à validação cruzada Método holdout ("nativo" do Matlab) ?
Porque estive pensando na validação que você quer desenvolver (K-folds) e ia tentar gerar o código, mas percebi que do jeito que eu estava pensando em desenvolver seria basicamente realizar N vezes uma validação por holdout e depois gerar, quem sabe, uma média dos erros (MSE) para essas N realizações. Se as amostras de treinamento e validação estão bem selecionadas de tal forma que são representativas do processo, o erro para cada uma das N realizações estaria muito próximo (se for mantido a mesma arquitetura e topologia de rede, claro - não teria por quê mudar isso para cada etapa da validação).
Então, se a quantidade de amostras for grande e se forem bem selecionadas para o treinamento, não teria por quê utilizar validação por K-folds, pois seria o mesmo que utilizar holdout. Como disse anteriormente, nunca tinha ouvido falar na validação K-folds e talvez ela não seja indicada nem para redes neurais e nem para situações onde se tem muitas amostras; nos livros que estou utilizando para estudar redes neurais não mencionam essa forma de validação; quem sabe em algum modelo estatístico eles usem isso.

Sendo assim, me surgiu algumas perguntas:
(1) O seu conjunto de amostra é grande ? (ser grande é algo relativos, mas você teria da ordem de 1000 amostras?)
(2) O processo que você está tentando mapear tem variações muito abruptas, descontinuidades, (...)? Talvez seja necessário mais amostras por conta disso.
(3) A divisão do conjunto de treinamento e de validação está sendo montado de qual forma? Pode ser que o conjunto de treinamento ou de validação não representem muito bem o processo estudado.

Como disse antes, posso estar falando besteira, mas são essas questões que podem estar gerando problema pra você. E quando se tem muitas amostras, o método
holdout é o mais indicado, segundo a bibliografia que eu pesquisei. 



Em quarta-feira, 12 de fevereiro de 2014 01h35min18s UTC-2, Raquel Machado escreveu:

Raquel Machado

unread,
Feb 23, 2014, 11:24:03 AM2/23/14
to redesn...@googlegroups.com
Bom Laercio, minha quantidade de amostras não chega a 100 amostra e possui muitas descontinuidades. A validação K-fold me ajudará tanto a escolher uma melhor topologia e irá me ajudar tbm no treinamento dessas amostras. Não consegui usar nenhuma função do matlab para implementar esse tipo de validação. O método k-fold vai pegar k amostras para validação, que não foram utilizadas no treinamento em k interações.  Já comecei a fazer braçalmente  isso no matlab, ainda estou terminando o código. Como você falou o método holdout é mais indicado, mas em vista das minhas condições de dados, acho que o k-fold irá me ajudar. No livro do Ivan - Redes Neurais Artificiais para engenharia e ciências aplicadas, ele explica esse tipo de validação. E é uma ótima fonte de estudo. :)


--
Você recebeu esta mensagem porque está inscrito em um tópico do grupo "Redes Neurais Artificiais Br" dos Grupos do Google.
Para cancelar a inscrição neste tópico, acesse https://groups.google.com/d/topic/redesneurais/JI5Mkcf4vV8/unsubscribe.
Para cancelar a inscrição neste grupo e todos os seus tópicos, envie um e-mail para redesneurais...@googlegroups.com.
Para postar neste grupo, envie um e-mail para redesn...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/redesneurais.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--

Raquel Machado
Laboratório de Sistemas Inteligentes - LSI
Mestranda em Engenharia da Eletricidade com ênfase em Ciência da Computação
 - UFMA
Bacharela em Sistemas de Informação - Faculdade Piauiense/FAP
-------------------------------------------------------------------------------------------------
http://lattes.cnpq.br/8145613063996821 
Celular: 81158351 / 84657497
Twitter: rachelmsi
Skype: rachelmsi

P Aja sustentavelmente. Imprima este e-mail somente se necessário.







Hieda Silva

unread,
Mar 12, 2015, 9:34:00 PM3/12/15
to redesn...@googlegroups.com
Prezados,

Estou também tentando implementar validação cruzada no Matlab, alguém aí já implementou ?
Grata

Hieda Silva

Laercio Martins

unread,
Mar 13, 2015, 9:07:57 AM3/13/15
to redesn...@googlegroups.com
Olá,

Hieda, eu implementei. E é bem simples, na verdade.. Mas você quer aplicar essa validação para Redes Neurais, né..

Qual está sendo sua dificuldade:?

hieda silva

unread,
Mar 13, 2015, 10:58:56 AM3/13/15
to redesn...@googlegroups.com
è sim, para redes reunais MLP, na verdade ainda não sei como implementar em matlab

Hieda

--
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "Redes Neurais Artificiais Br" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/redesneurais/JI5Mkcf4vV8/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para redesneurais...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para redesn...@googlegroups.com.
Acesse esse grupo em http://groups.google.com/group/redesneurais.
Para mais opções, acesse https://groups.google.com/d/optout.

Laercio Martins

unread,
Mar 13, 2015, 11:26:49 AM3/13/15
to redesn...@googlegroups.com
MLP no matlab é bem facinho de implementar.. e já tem os códigos tudo pronto e com validação cruzada.
Você tá fazendo o que exatamente? Talvez possa te ajudar mais.. Estou sem o Matlab instalado aqui, mas depois te falo exatamente o que fazer..

hieda silva

unread,
Mar 13, 2015, 12:04:03 PM3/13/15
to redesn...@googlegroups.com
Gostaria muito de sua ajuda sim, se possível, estou desenvolvendo uma rede neural para classificar se em um determinado ponto de imagem de satélite, existe: muitas  nuvens, algumas nuvens, ou não há nuvens, é reconhecimento de padrão, posso lhe enviar o código para vc ver, a rede está funcionando, falta eu fazer a validação cruzada que o professor pediu.

Hieda


Laercio Martins

unread,
Mar 13, 2015, 12:50:32 PM3/13/15
to redesn...@googlegroups.com
Poh, legal..

meu projeto também foi em reconhecimento de padrões. Posso olhar pra você sim.. qual tipo de validação cruzada você quer utilizar? O Matlab já tem prontinho a validação cruzada por amostragem aleatória..

hieda silva

unread,
Mar 13, 2015, 1:49:42 PM3/13/15
to redesn...@googlegroups.com
Laercio,

O professor não falou o tipo, disse apenas para usar validação cruzada, não sabia que havia vários tipos, te mando o código depois.

Hieda
Message has been deleted

Laercio Martins

unread,
Mar 13, 2015, 2:05:33 PM3/13/15
to redesn...@googlegroups.com
Isso de validação cruzada é da estatística e eles têm subdivisões, normalmente, de acordo com o tipo e a quantidade de amostras que você tem. Quando não se fala nada, ou quando não se tem muito conhecimento dessas subdivisões estão falando de validação cruzada por amostragem aleatória sem reutilização das amostras. Qual algoritmo de treinamento você ta usando?  

Natalie Siqueira

unread,
Dec 11, 2017, 12:31:59 PM12/11/17
to Redes Neurais Artificiais Br
Preciso fazer a validação cruzada na minha rede MLP, não sou expert em Matlab e tenho econtrado dificuldade em implementar isso,poderia me auxiliar? 


Em quarta-feira, 12 de fevereiro de 2014 01:35:18 UTC-2, Raquel Machado escreveu:
Reply all
Reply to author
Forward
0 new messages