Completo e, o mais importante, bonito.
Uma pergunta para Eugene: você copiou a mesma classe (com pequenas alterações) em todos os arquivos SOM_exN?
E a segunda pergunta: eu entendi corretamente que você tem as funções de exibição e cálculo de mapas em uma única classe?
Essa é uma pergunta para Eugene - você copiou a mesma classe (com pequenas alterações) em todos os arquivos SOM_exN?
E a segunda pergunta: eu entendi corretamente que você tem as funções de exibição de mapa e cálculos de mapa em uma classe?
Sim, você está certo, a classe é a mesma. Pequenas alterações são causadas pelas especificidades das tarefas resolvidas (dimensionalidade dos dados e métodos de exibição RGB, CMYK). As funções e os cálculos de exibição de mapas são combinados em uma única classe.
A estrutura geral é a seguinte:
//--- carregar o conjunto de treinamento na matriz m_training_sets_array[] KohonenMap.LoadData() //--- treinamento da rede - modificação dos pesos dos nós m_som_nodes[] KohonenMap.Train(); //--- formando uma imagem com um mapa - "projetando" o estado dos nós em uma instância da classe cIntBMP KohonenMap.Render(); //--- mostrar as legendas no mapa para cada um dos elementos do conjunto de treinamento //ou seja, adicionar à figura os identificadores de cada elemento do conjunto de treinamento KohonenMap.ShowTrainPatterns(); //--- mostrar a imagem no gráfico KohonenMap.ShowBMP();
o cálculo é feito no método Train (em alguns casos, Render e ShowBMP são chamados dentro dele para mostrar o processo de treinamento) e, em seguida, os resultados são "transferidos" para uma imagem bmp que é exibida no método ShowBMP.
A classe cIntBMP foi usada para renderização e exibição.
Sim, você está certo, a classe é a mesma. As pequenas alterações se devem às especificidades das tarefas a serem resolvidas (dimensionalidade dos dados e métodos de exibição RGB, CMYK). As funções e os cálculos de exibição de mapas são combinados em uma única classe.
Talvez, para facilitar o trabalho com as classes, devêssemos transformá-las em uma hierarquia... Tenho certeza de que isso reduzirá o código e facilitará a familiarização com ele.
Especialmente quando se trata das mesmas funções idênticas em todos os arquivos.
Talvez, para facilitar o trabalho com as classes, devêssemos transformá-las em uma hierarquia? Tenho certeza de que isso reduzirá o código e facilitará a familiarização com ele.
Especialmente quando se trata de as mesmas funções serem as mesmas em todos os arquivos.
A ideia era mostrar aspectos práticos do uso de redes Kohonen.
Metodologicamente, acabou sendo mais conveniente considerar todas as tarefas separadamente. Há uma pequena hierarquia, CSOM->CSomWeb, CSOM->CSomFood (todas elas tridimensionais, como no primeiro exemplo). No caso quadridimensional das íris de Fisher, juntamente com o CSOM, o CSomNode também teve de ser alterado para lidar com os quatro componentes. Em seguida, surgiram os planos de componentes e m_bmp tornou-se uma matriz.
Em seguida, depois de nos recusarmos a exibir dados tridimensionais (RGB) e quadridimensionais (CMYK) específicos e fixos, obtivemos o SOM.mq5, que permite trabalhar com dados de qualquer dimensão. Os dados dos exemplos anteriores foram transferidos para arquivos de um determinado formato, e sua análise é realizada na linguagem dos planos de componentes.
Em essência, precisamos do som.mq5 como ferramenta, e todos os outros exemplos são de natureza tutorial e são apenas ilustrações dos recursos das redes Kohonen.
na função CSOM::ReadCSVData
a string está incorreta
// inicialização da rede, 10000 iterações, grade de nós CellsX*CellsY, imagem ImageXSize x ImageYSize int dimension=ArraySize(stringsarr)-1; KohonenMap.InitParameters(dimension,10000,CellsX,CellsY,ImageXSize,ImageYSize);
na função CSOM::ReadCSVData
string está errado
Se você quer dizer string:
int dimension=ArraySize(stringsarr)-1;
são as especificações do formato do arquivo de dados de entrada - presume-se que a dimensão seja igual ao número de colunas-1.
A última coluna é o nome da string da amostra de treinamento. Por exemplo, em products.csv
Protein;Carbohydrate;Fat;Title 0.4;11.8;0.1;Apples
o primeiro cabeçalho de linha, que contém os nomes dos componentes, irá para a matriz m_som_titles[].
em seguida, os dados (em m_training_sets_array[]) e os títulos (em m_train_titles[]).
KohonenMapvocê tem um objeto dessa classe na própria classe. Aqui.
-------------------------
Nesse sentido, do ponto de vista do uso posterior da classe CSOM autônoma, é necessário:
1. Arquivos separados com CSOMNode, classes CSOM e scripts específicos de seu uso
2. Remover os parâmetros de entrada externos da classe CSOM para um script específico.
3. Adicionar todos esses parâmetros na própria classe
public: ColorSchemes m_clrSchema; // esquema de gradiente int m_maxpict; // número de imagens em uma linha bool m_bHexCell; // células hexagonais bool m_bShowBorder; // mostrar os limites bool m_bShowTitle; // mostrar legendas
4. Nesse sentido, expanda a função CSOM::Init em 5 parâmetros para inicialização (você pode remover m_dimension, que é definido em ReadCSVData)
Init(int iter, int xc, int yc, int bmpw, int bmph, int maxpic, ColorSchemes clrSchema, bool bhex, bool bborder, bool btitle)
Isso permitirá que você retire a classe CSOM do arquivo Expert Advisor e use-a simplesmente como um include para os projetos necessários
#property script_show_inputs #include "SOM.mqh" input string DataFileName="products.csv"; // Nome do arquivo de dados input int CellsX=30; // Número de nós por X input int CellsY=30; // Número de nós em Y input int ImageW=250; // Largura da imagem input int ImageH=250; // Altura da imagem input int MaxPictures=4; // máximo de imagens por linha input bool HexagonalCell=true; // Células hexagonais input bool ShowBorders=false; // mostrar as bordas das células input bool ShowTitles=true; // exibir nomes em planos de coordenadas input ColorSchemes ColorScheme=Blue_Green_Red; // Cores gradientes //------------------------------------------------------------------ OnStart void OnStart() { CSOM KohonenMap; MathSrand(200); // carregar o conjunto de treinamento do arquivo if(!KohonenMap.LoadTrainDataFromFile(DataFileName)) { Print("Erro ao carregar dados para treinamento"); return; } KohonenMap.Init(10000, CellsX, CellsY, ImageW, ImageH, MaxPictures, ColorScheme, HexagonalCell, ShowBorders, ShowTitles); // inicialização da rede KohonenMap.Train(); // treinamento de rede KohonenMap.Render(); // geração de imagens de mapas KohonenMap.ShowTrainPatterns(); // mostrar legendas no mapa para cada elemento do conjunto de treinamento KohonenMap.ShowBMP(); // mostrar a imagem no gráfico }
E mais uma modificação: por precaução, transforme a função ReadCSVData em um bool também.
e verifique se há incompatibilidade entre as dimensões do cabeçalho e a leitura da próxima linha de dados
PS.
Eu já fiz todas essas manipulações com a classe, por assim dizer, finalizei pequenas coisas.Mas, ainda assim, sua classe CSOM é simplesmente fantástica. Obrigado.
E mais uma modificação - por precaução - torne a função ReadCSVData bool também.
e verifique se há incompatibilidade entre as dimensões do cabeçalho e a leitura da próxima linha de dados
PS.
Já fiz todas essas manipulações com a classe, por assim dizer, finalizei as pequenas coisas.
Muito obrigado por seu interesse e por suas recomendações úteis.
Entendo que o KohonenMap.InitParameters é obviamente um erro.
É claro que a classe final deve ser corrigida como você sugeriu, pois ficará muito mais bonita.
Anexe o que você conseguiu e nós o substituiremos no artigo.
Um dos melhores artigos sobre MQL5. E especialmente em um sentido prático.
Muito obrigado!
Anexe o que você recebeu e nós o substituiremos no artigo.
lista de alterações anexada:
1. pequena alteração na função cIntBMP::Show(int aX, int aY, string aBMPFileName, string aObjectName, bool aFromImages=true)
2. adicionada ao script principal
#import "shell32.dll" int ShellExecuteW(int hwnd, string oper, string prog, string param, string dir, int show); #import input bool OpenAfterAnaliz=true; // abrir a pasta do mapa após a conclusão
Alterações na classe CSOM
1. Adicionada a função CSOM::HideChart - ela escurece o gráfico, a grade, etc. sob a cor de fundo
2. Adicionados os parâmetros m_chart, m_wnd, m_x0, m_y0 - indicando em qual gráfico e em qual janela exibir os mapas.
+ prefixo dos nomes de objetos m_sID. O prefixo é automaticamente adotado pelo nome do arquivo, caso contrário, é atribuído a "SOM"
3. Os mapas são gravados na pasta chamada m_sID
4. Os nomes dos arquivos bmp são dados pelo nome da coluna do padrão de treinamento.
4. Função CSOM::ShowBMP alterada - os mapas não são copiados para a pasta Images, mas permanecem em Files (caso contrário, isso consumiria muito tempo)
5. Em vez da função CSOM::NetDeinit , agora existe a função CSOM::HideBMP
7. A função CSOM::ReadCSVData foi reconfigurada para ler o arquivo de modo que a primeira coluna seja a coluna de nomes
6. Adicionado sinalizador à função CSOM::Train para mostrar mapas intermediários CSOM::Train( bool bShowProgress)
8. Na função CSOM::Train, os dados intermediários são exibidos a cada 2 segundos em vez de iterações,
e também a notificação de progresso é movida do registro para o comentário
9. Alguns nomes de variáveis foram encurtados e as funções foram categorizadas.
A renderização de Bmp torna o processo muito mais lento. Portanto, é melhor não usá-la desnecessariamente.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Usar Mapas Auto-organizáveis (mapas de Kohonen) no MetaTrader 5 foi publicado:
Um dos aspectos mais interessantes dos Mapas auto-organizáveis (mapas de Kohonem) é que eles aprendem a classificar os dados sem supervisão. Em seu formato básico, ele produz um mapa de similaridade dos dados de entrada (clustering). Os mapas SOM podem ser usados para a classificação e visualização de dados de alta dimensão. Neste artigo, serão apresentadas diversas aplicações simples dos mapas de Kohonen.
Autor: MetaQuotes Software Corp.