"MetaTrader 5'te Kendi Kendini Düzenleyen Özellik Haritalarını (Kohonen Haritaları) Kullanma" makalesi için tartışma
Eksiksiz ve en önemlisi güzel.
Eugene'e böyle bir soru - aynı sınıfı (küçük değişikliklerle) tüm SOM_exN dosyalarına kopyaladınız mı?
ve ikinci soru - harita görüntüleme ve harita hesaplama fonksiyonlarını tek bir sınıfta topladığınızı doğru anladım mı?
Eugene'e böyle bir soru - aynı sınıfı (küçük değişikliklerle) tüm SOM_exN dosyalarına kopyaladınız mı?
ve ikinci soru - harita görüntüleme ve harita hesaplama fonksiyonlarını tek bir sınıfta topladığınızı doğru mu anladım?
Evet, haklısınız, sınıf aynı. Küçük değişiklikler çözülen görevlerin özelliklerinden kaynaklanır (veri boyutluluğu ve RGB, CMYK görüntüleme yöntemleri). Harita görüntüleme fonksiyonları ve hesaplamalar tek bir sınıfta birleştirilmiştir.
Genel yapı aşağıdaki gibidir:
//--- eğitim setini m_training_sets_array[] dizisine yükleyin KohonenMap.LoadData() //--- ağ eğitimi - düğüm ağırlıklarının değiştirilmesi m_som_nodes[] KohonenMap.Train(); //--- harita ile bir resim oluşturmak - düğümlerin durumunu cIntBMP sınıfının bir örneğine "yansıtmak" KohonenMap.Render(); //--- eğitim kümesinin her bir öğesi için harita üzerinde başlıkları gösterin //yani, eğitim setinin her bir elemanının tanımlayıcılarını şekle ekleyin KohonenMap.ShowTrainPatterns(); //--- resmi grafik üzerinde göster KohonenMap.ShowBMP();
Hesaplama Train metodunda yapılır (bazı durumlarda Render ve ShowBMP eğitim sürecini göstermek için bu metodun içinde çağrılır), ardından sonuçlar ShowBMP metodunda görüntülenen bir bmp resmine "aktarılır".
Oluşturma ve görüntüleme için cIntBMP sınıfı kullanılmıştır.
Evet, haklısınız, sınıf aynı. Küçük değişiklikler, çözülmesi gereken görevlerin özelliklerinden kaynaklanmaktadır (veri boyutluluğu ve RGB, CMYK görüntüleme yöntemleri ). Harita görüntüleme fonksiyonları ve hesaplamalar tek bir sınıfta birleştirilmiştir.
Belki de sınıflarla çalışmayı kolaylaştırmak için bunu bir hiyerarşiye dönüştürmeliyiz? Eminim kodu azaltacak ve onunla tanışmayı kolaylaştıracaktır.
Özellikle de tüm dosyalarda aynı işlevler söz konusu olduğunda.
Belki de sınıflarla çalışmayı kolaylaştırmak için bunu bir hiyerarşiye dönüştürmeliyiz? Eminim kodu azaltacak ve onunla tanışmayı kolaylaştıracaktır.
Özellikle de aynı fonksiyonların tüm dosyalarda aynı olması söz konusu olduğunda.
Amaç Kohonen ağlarını kullanmanın pratik yönlerini göstermekti.
Metodolojik olarak tüm görevleri ayrı ayrı ele almanın daha uygun olduğu ortaya çıktı. küçük bir hiyerarşi var, CSOM->CSomWeb, CSOM->CSomFood (hepsi üç boyutlu, ilk örnek gibi). Fisher 'in süsenlerinin 4 boyutlu durumunda, CSOM ile birlikte CSomNode'un da 4 bileşeni işlemek için değiştirilmesi gerekiyordu. Daha sonra bileşen düzlemleri ortaya çıktı ve m_bmp bir dizi haline geldi.
Daha sonra, sabit belirli 3 boyutlu (RGB) ve 4 boyutlu (CMYK) verileri görüntülemeyi reddettikten sonra, herhangi bir boyuttaki verilerle çalışmanıza izin veren SOM.mq5'i aldık, önceki örneklerin verileri belirli bir formattaki dosyalara aktarıldı ve analizleri ayrıca bileşen düzlemlerinin dilinde gerçekleştirildi.
Özünde, bir araç olarak som.mq5'e ihtiyacımız var ve diğer tüm örnekler öğretici niteliktedir ve sadece Kohonen ağlarının özelliklerinin örnekleridir.
CSOM::ReadCSVData işlevinde
dize yanlış
// ağ başlatma, 10000 yineleme, CellsX*CellsY düğümlerinden oluşan ızgara, ImageXSize x ImageYSize görüntüsü int dimension=ArraySize(stringsarr)-1; KohonenMap.InitParameters(dimension,10000,CellsX,CellsY,ImageXSize,ImageYSize);
CSOM::ReadCSVData işlevinde
dize yanlış
Eğer dizgiyi kastediyorsanız:
int dimension=ArraySize(stringsarr)-1;
giriş veri dosyası formatının özellikleridir - boyutun sütun sayısına eşit olduğu varsayılır-1.
Son sütun, eğitim örneğinin dize adıdır. Örneğin, products.csv dosyasında
Protein;Carbohydrate;Fat;Title 0.4;11.8;0.1;Apples
bileşenlerin adlarını içeren ilk satır başlığı, m_som_titles[] dizisine gidecektir.
ardından veriler (m_training_sets_array[] içinde) ve başlıklar (m_train_titles[] içinde) gelir.
KohonenMap
sınıfın içinde bu sınıfa ait bir nesne var. İşte.
-------------------------
Bu bağlamda, CSOM sınıfının bağımsız olarak daha fazla kullanılması açısından gereklidir:
1. CSOMNode, CSOM sınıfları ve bunların kullanımına ilişkin özel komut dosyaları içeren ayrı dosyalar
2. CSOM sınıfından belirli bir komut dosyasına harici giriş parametrelerini kaldırın.
3. Tüm bu parametreleri sınıfın kendisine ekleyin
public: ColorSchemes m_clrSchema; // gradyan şeması int m_maxpict; // satırdaki resim sayısı bool m_bHexCell; // altıgen hücreler bool m_bShowBorder; // sınırları göster bool m_bShowTitle; // altyazıları göster
4. Bu bağlamda, CSOM::Init işlevini başlatma için 5 parametre ile genişletin ( ReadCSVData'da ayarlanan m_dimension'ı kaldırabilirsiniz)
Init(int iter, int xc, int yc, int bmpw, int bmph, int maxpic, ColorSchemes clrSchema, bool bhex, bool bborder, bool btitle)
Bu, CSOM sınıfını Expert Advisor dosyasından çıkarmanıza ve sadece gerekli projelere dahil olarak kullanmanıza izin verecektir
#property script_show_inputs #include "SOM.mqh" input string DataFileName="products.csv"; // Veri dosyası adı input int CellsX=30; // X'e göre düğüm sayısı input int CellsY=30; // Y'deki düğüm sayısı input int ImageW=250; // Resim genişliği input int ImageH=250; // Resim yüksekliği input int MaxPictures=4; // satır başına maks. resim input bool HexagonalCell=true; // Altıgen hücreler input bool ShowBorders=false; // hücre kenarlıklarını göster input bool ShowTitles=true; // koordinat düzlemlerinde adları görüntüleme input ColorSchemes ColorScheme=Blue_Green_Red; // Degrade renkler //------------------------------------------------------------------ OnStart void OnStart() { CSOM KohonenMap; MathSrand(200); // eğitim setini dosyadan yükleyin if(!KohonenMap.LoadTrainDataFromFile(DataFileName)) { Print("Eğitim için veri yüklenirken hata oluştu"); return; } KohonenMap.Init(10000, CellsX, CellsY, ImageW, ImageH, MaxPictures, ColorScheme, HexagonalCell, ShowBorders, ShowTitles); // ağ başlatma KohonenMap.Train(); // ağ eğitimi KohonenMap.Render(); // harita görüntüsü oluşturma KohonenMap.ShowTrainPatterns(); // eğitim kümesinin her bir öğesi için harita üzerinde başlıkları göster KohonenMap.ShowBMP(); // resmi grafik üzerinde göster }
ve bir değişiklik daha - her ihtimale karşı ReadCSVData işlevini de bir bool yapın.
ve başlık boyutları ile sonraki veri okuma satırı arasındaki uyumsuzluğu kontrol edin
NOT.
Tüm bu manipülasyonları sınıfla zaten yaptım, tabiri caizse küçük şeyleri tamamladım.Ama yine de CSOM sınıfınız harika. Teşekkürler.
ve bir değişiklik daha - her ihtimale karşı - ReadCSVData işlevini de bool yapın.
ve başlık boyutları ile okunan bir sonraki veri satırı arasında uyumsuzluk olup olmadığını kontrol edin
NOT.
Tüm bu manipülasyonları zaten sınıfla birlikte yaptım, tabiri caizse küçük şeyleri tamamladım.
İlginiz ve faydalı önerileriniz için çok teşekkür ederim.
KohonenMap.InitParameters konusunu anlıyorum, belli ki bir hata olmuş.
Tabi final sınıfı da önerdiğiniz gibi düzeltilmeli, çok daha güzel olacaktır.
Lütfen elinizdekileri ekleyin, makalede değiştireceğiz.
MQL5 ile ilgili en iyi makalelerden biri. Ve özellikle pratik anlamda.
Teşekkür ederim!
Lütfen elinizdekileri ekleyin, makalede değiştireceğiz.
ekte. değişikliklerin listesi:
1. cIntBMP::Show(int aX, int aY, string aBMPFileName, string aObjectName, bool aFromImages=true)
işlevinde küçük bir değişiklik 2. Ana betiğe eklendi
#import "shell32.dll" int ShellExecuteW(int hwnd, string oper, string prog, string param, string dir, int show); #import input bool OpenAfterAnaliz=true; // tamamlandıktan sonra harita klasörünün açılması
CSOM sınıfındaki değişiklikler
1. CSOM::HideChart işlevi eklendi - grafiği, ızgarayı vb. arka plan renginin altında karartır
2. Eklenen parametreler m_chart, m_wnd, m_x0, m_y0 - haritaların hangi grafikte ve hangi pencerede görüntüleneceğini gösterir.
+ Nesne adlarının ön eki m_sID. Ön ek dosya adı tarafından otomatik olarak alınır, aksi takdirde "SOM" atanır
3. Haritalar m_sID adlı klasöre yazılır
4. Bmp dosyalarının adları Bmp dosyalarının adları eğitim kalıbı sütununun adıyla verilir.
4. CSOM::ShowBMP işlevi değiştirildi - haritalar Görüntüler klasörüne kopyalanmaz, Dosyalar'da kalır (aksi takdirde çok zaman alır)
5. CSOM::ShowBMP işlevi değiştirildi. CSOM::NetDeinit fonksiyonu yerine - artık CSOM::HideBMP fonksiyonu var
7. CSOM::ReadCSVData fonksiyonu, dosyayı ilk sütun isimler sütunu olacak şekilde okuyacak şekilde yeniden yapılandırıldı
6. Ara haritaları göstermek için CSOM::Train fonksiyonuna bayrak eklendi CSOM::Train( bool bShowProgress)
8. CSOM::Train fonksiyonunda, ara veriler iterasyonlar yerine her 2 saniyede bir gösterilir,
ve ayrıca ilerleme bildirimi günlükten Yorum'a taşınır
9. Bazı değişken isimleri kısaltılmış ve fonksiyonlar kategorize edilmiştir.
Bmp render işlemi süreci çok yavaşlatır. Bu yüzden gereksiz yere kullanmamak daha iyidir.

- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Yeni makale MetaTrader 5'te Kendi Kendini Düzenleyen Özellik Haritalarını (Kohonen Haritaları) Kullanma yayınlandı:
Kendi Kendini Düzenleyen Özellik Haritalarının (Kohonen haritaları) en ilginç yönlerinden biri, verileri denetim olmadan sınıflandırmayı öğrenmeleridir. Temel biçiminde, girdi verilerinin (kümeleme) bir benzerlik haritası üretir. SOM haritaları, yüksek boyutlu verilerin sınıflandırılması ve görselleştirilmesi için kullanılabilir. Bu yazıda Kohonen haritalarının birkaç basit uygulamasını ele alacağız.
Ayrıca bu gerçeği Ticaret bileşen düzleminde de görebiliriz (20'nin altında sayılara sahip yeşil bölgeler).
Yazar: MetaQuotes