Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 2032

 
Rorschach :

Orman için de kümenin önemini görmek mümkündür. Katbust'ta bu muhtemelen plot_tree'dir.

Verileri hazırlayıp yayınlayacağım.

6 sütun için bir test sürümü yaptım, 11GB aldı. Notepad++ açılamadı, dosyanın çok büyük olduğunu söylüyor. SQLite için BD Tarayıcı 20 dakikadır askıda.

Ne hakkında olduğunu anlayana kadar ağaç kümelerinin neye benzediğini gösteren bir resim gösterin.

Neden açayım? :) Hata ayıklama için benzer bir yapıya sahip mini bir kopya yapıyorum.

 
elibrarius :

Merak ediyorum, tüm verileri belleğe almadan ağaçları nasıl eğitiyorlar? Tablo 6 GB ise, yaklaşık 6 GB bellek kullanılmış olmalıdır. Ağacın her bir sütunu bütünüyle sıralaması gerekir. Her şeyi belleğe almazsanız, ancak her seferinde diskten veri okursanız, yavaş olacaktır.
Tek seçenek, verileri double değil, float türünde bellekte tutmaktır, ancak bu doğruluğu azaltacaktır. Bizim için 5 haneli hassasiyetle bu korkutucu olmayabilir ama catbust evrensel bir yazılım, fiziksel ve matematiksel problemlerin çift hassasiyette çözülmesi gerektiğini düşünüyorum.

Kodu incelemedim, ancak mantıklı düşünürseniz, CatBoost muhtemelen örnek veri tablosunu dönüştürür ve tam olarak dönüştürülmüş sürümü depolar, bu da hızlı bir şekilde sıkıştırılabilir.

Dönüşüm, her tahmin edicinin niceleme ızgarasına göre gerçekleşir (6 algoritma mevcuttur) ve örneğin, değişkenin 1000 farklı değerinden 32 seçenek kalır (kuantum ızgara aralığına düşen) ve böyle bir veri vektör kolayca sıkıştırılır, ayrıca sayılar zaten yalnızca tam sayılardır (ızgara boyutu kısıtlamalarına göre - kısa veri türü - sayı başına 2 bayt) ve niceleme tablosu basitçe bellekte bulunur ve daha sonra kodda bir model oluştururken kullanılır. Boyutu zaten makul bir şekilde azalttık ve ardından, değerlendirme için tüm tahmin edicileri değil, büyük numuneler için önerilen bir kısmını seçerek hacmi azaltabilirsiniz, rasgele algoritma ise bu tahmin edicileri diğer ağaçlarda kullanmanıza izin verir. hemen "çantaya" düşmeyin ", bundan dolayı eğitim daha da hızlı olacak, ancak modelde daha fazla ağaç olacak. Elbette başka hileler de var, ama asıl mesele niceleme.

Burada nicelleştirmeye genellikle özel dikkat gösterilmesi gerekir, ideal olarak, her tahminci için kendi ızgaranızı seçmeniz ve ızgara ile birlikte eğitim için veri göndermeniz gerekir, bu algoritmayı yapmanızı sağlar.

Bu nedenle, numune kendi başına nicelenebilir ve iyi sıkıştırılır.

 
Alexey Vyazmikin :

Kodu incelemedim, ancak mantıklı düşünürseniz, CatBoost muhtemelen örnek veri tablosunu dönüştürür ve tam olarak dönüştürülmüş sürümü depolar, bu da hızlı bir şekilde sıkıştırılabilir.

Dönüşüm, her tahmin edicinin niceleme ızgarasına göre gerçekleşir (6 algoritma mevcuttur) ve örneğin, değişkenin 1000 farklı değerinden 32 seçenek kalır (kuantum ızgara aralığına düşen) ve böyle bir veri vektör kolayca sıkıştırılır, ayrıca sayılar zaten yalnızca tam sayılardır (ızgara boyutu kısıtlamalarına göre - kısa veri türü - sayı başına 2 bayt) ve niceleme tablosu basitçe bellekte bulunur ve daha sonra kodda bir model oluştururken kullanılır. Boyutu zaten makul bir şekilde azalttık ve ardından, değerlendirme için tüm tahmin edicileri değil, büyük numuneler için önerilen bir kısmını seçerek hacmi azaltabilirsiniz, rasgele algoritma ise bu tahmin edicileri diğer ağaçlarda kullanmanıza izin verir. hemen "çantaya" düşmeyin ", bundan dolayı eğitim daha da hızlı olacak, ancak modelde daha fazla ağaç olacak. Elbette başka hileler de var, ama asıl mesele niceleme.

Burada nicelleştirmeye genellikle özel dikkat gösterilmesi gerekir, ideal olarak, her tahminci için kendi ızgaranızı seçmeniz ve ızgara ile birlikte eğitim için veri göndermeniz gerekir, bu algoritmayı yapmanızı sağlar.

Bu nedenle, numune kendi başına nicelenebilir ve iyi sıkıştırılır.

Aynen, hatırladım, varsayılan olarak 1024 bölme seçeneği için bir ızgara var gibi görünüyor. Tüm veriler bölünmüş sayılarla değiştirilirse, ushort biçiminde saklanabilir ve bu 8, 4 kat sıkıştırma yerine 2 bayttır. Görünüşe göre 6 yerine 2 GB'a sahipsin ve kullandın.
Şimdi bu ızgaranın ne için kullanıldığını anlıyorum, sıkıştırma için çıkıyor. Peki, daha hızlı sırala.
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
 
elibrarius :
Aynen, hatırladım, varsayılan olarak 1024 bölme seçeneği için bir ızgara var gibi görünüyor. Tüm veriler bölünmüş sayılarla değiştirilirse, ushort biçiminde saklanabilir ve bu 8, 4 kat sıkıştırma yerine 2 bayttır. Görünüşe göre 6 yerine 2 GB'a sahipsin ve kullandın.

Varsayılan 254'tür, ancak o zaman ne kadar ayarladığımı hatırlamıyorum. Belki 2 GB'den daha az bellek tüketildi - bu kadar az olmasına çok şaşırdığımı tam olarak hatırlıyorum.

Her durumda, bu yaklaşım, örneğin kendisini bile verileri önemli ölçüde sıkıştırmanıza olanak tanır. Bunu sinir ağları ile yapamazsınız.

elibrarius :
Şimdi bu ızgaranın ne için kullanıldığını anlıyorum, sıkıştırma için çıkıyor. Peki, daha hızlı sırala.
Izgara, bir dizi değer kullandığından daha az uydurmaya da izin verir. Ancak her zaman iyi olmayacak - teorik seviyeleri yakalamak için ağı kendiniz kesmeniz gerektiğini düşünüyorum.
 
Alexey Vyazmikin :

Varsayılan 254'tür, ancak o zaman ne kadar ayarladığımı hatırlamıyorum. Belki 2 GB'den daha az bellek tüketildi - bu kadar az olmasına çok şaşırdığımı tam olarak hatırlıyorum.

O zaman uchar kullanabilirsiniz, 1 bayttır.

Alexey Vyazmikin :
Izgara, bir dizi değer kullandığından daha az uydurmaya da izin verir. Ancak her zaman iyi olmayacak - teorik seviyeleri yakalamak için ağı kendiniz kesmeniz gerektiğini düşünüyorum.


Kısacası, maksimum değer 65 bindir - böyle bir ızgara ayarlarsanız, manuel olarak buhar banyosu yapamazsınız.

 
Maksim Dmitrievski :

https://www.mql5.com/en/articles/8385

iyi bir uygulama olduğu gerçeği değil)

Rusça'da geçiyorum

Bunu okudum))) hesaplamalarda çok fazla hata var ve ağ oldukça rastgele cevaplar veriyor

 
elibrarius :

O zaman uchar kullanabilirsiniz, 1 bayttır.


Kısacası, maksimum değer 65 bindir - böyle bir ızgara ayarlarsanız, manuel olarak buhar banyosu yapamazsınız.

65535'lik bir marjinal boyuta sahipler, ancak koddaki değişkenleri etkileyemiyorum.

Ancak maksimum boyut hakkında - hayır, bu sonucu garanti etmez, çünkü veri şeridinde bir ayarlama ve yalancıların yanında bir geçiş olabilir.

Genel olarak, aralığı kapatan bölmenin uygunluğunu her zaman kontrol eden bir öğrenme algoritmasına sahip olmak güzel olurdu (A>10 && A<=15), aksi takdirde genellikle biraz rastgele olur - böyle bir zorunlu koşul yoktur, ancak bazen çoğaltılır.

 
Alexander Alekseevich :

Bunu okudum))) hesaplamalarda çok fazla hata var ve ağ oldukça rastgele cevaplar veriyor

Ağı kendiniz mi yazmak istiyorsunuz?

Buradaki sularda minimum kelime ve maksimum python kodu var, aynı zamanda İngilizce.

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Building a Recurrent Neural Network - Step by Step - v1
  • datascience-enthusiast.com
Building your Recurrent Neural Network - Step by Step
 
Maksim Dmitrievski :

Ağı kendiniz mi yazmak istiyorsunuz?

Buradaki sularda minimum kelime ve maksimum python kodu var, aynı zamanda İngilizce.

https://datascience-enthusiast.com/DL/Building_a_Recurrent_Neural_Network-Step_by_Step_v1.html

Evet kendim istiyorum) çünkü tüm yazılarda aktivasyon fonksiyonlarının örnekleri doğru düşünülmüyor) örneğin sigmoid her yerde 1/1 + exp (-x) olarak kabul ediliyor. Ve 1.0/1.0+exp(-x)'e ihtiyacınız var. Aynı şey yazılmış gibi görünüyor, ancak terminal farklı hesaplamalar veriyor) bakın, belki de aynı şekilde düşünüyorsunuz) dolayısıyla hatalar.
 
Alexander Alekseevich :
Evet kendim istiyorum) çünkü tüm yazılarda aktivasyon fonksiyonlarının örnekleri doğru düşünülmüyor) örneğin sigmoid her yerde 1/1 + exp (-x) olarak kabul ediliyor. Ve 1.0/1.0+exp(-x)'e ihtiyacınız var. Aynı şey yazılmış gibi görünüyor, ancak terminal farklı hesaplamalar veriyor) bakın, belki de aynı şekilde düşünüyorsunuz) dolayısıyla hatalar.
Sinir ağı terminalinde yazmak hiç de bir seçenek değil. Orada herhangi bir f-I aniden beklendiği gibi çalışmayabilir. hazır kullanın