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

 
mytarmailS #:
Zaten boş olacak.

Evet, eğer istemiyorsan.

 
mytarmailS #:
Hedefleme ile makine öğreniminin işe yaramaması ve tek seferlik öğrenmenin işe yaramaması üzücü....

yanlılığı azaltmak için simetrik özellikleri kaldırın.

Örneğin, artışları mutlak artışlarla (volatilite) değiştirin.

bazen yardımcı olur

 
Maxim Dmitrievsky #:

önyargıyı azaltmak için simetrik özellikleri kaldırın

örn. artışları mutlak artışlarla değiştirin (oynaklık)

Bazen yardımcı olur.

Hayır, bundan çok daha karmaşık.
 
Aleksey Vyazmikin #:

Benim fikrim, bir dizi istatistiksel özelliğe göre kararlı kuantum segmentlerini seçecek bir model elde etmektir. Herkes bu projeye katılabilir.

Neden bu kuantumlara bu kadar takıntılısın?...?

Bunlarla ilgili entelektüel bir şey yok. Basitçe, örneğin 10000 satırı 100 parçaya bölün, yani sıralayın ve en alttan 100 satır sayın, eğer aşağıdakiler yüzüncü satırla çakışırsa (yani tekrarlar), o zaman hepsini ilk parçaya yönlendiririz. Yinelemeler bittiğinde ikinci kuantumdaki satırları yazmaya başlarız - sonraki 100 + varsa yinelemeler. Ve satırlarımız bitene kadar böyle devam eder.

1 ağaç bile bu kuantum parçalarından (yinelenenlerle birlikte sadece 100 sıralanmış dizge) çok daha fazla yararlı bilgi içerir (çünkü veriler üzerinde eğitilmiştir).

 
Forester #:

Neden bu quantlara bu kadar takılıyorsunuz? ....

Bunların hiçbirinde entelektüel bir şey yok. Örneğin 10000 satırı 100 parçaya bölün, yani sıralayın ve en alttan 100 satır sayın, eğer sonrakiler yüzüncü satıra denk geliyorsa (yani tekrarlar), o zaman hepsini ilk parçaya yönlendiririz. Yinelemeler bittiğinde ikinci kuantumdaki satırları yazmaya başlarız - sonraki 100 + varsa yinelemeler. Ve satırlarımız bitene kadar böyle devam eder.

1 ağaç bile bu kuantum segmentlerinden (yinelenenlerle birlikte sadece 100 sıralanmış satır) çok daha fazla yararlı bilgi içerir (çünkü veriler üzerinde eğitilmiştir).

Kuantum segmentleri CatBoost modelinin inşa edildiği tuğlalardır. Başlangıçta, anladığım kadarıyla, bu şekilde bellek tasarrufu ve genel olarak hesaplamaların hızlandırılması sorunu çözüldü. Bir yan kazanç, tahmin edici göstergelerin kombinasyonlarının varyantlarının azaltılmasıdır, çoklu doğrusallığın azaltılmasına yönelik bir adım atılır ve bu da genel olarak eğitimin hızına ve kalitesine katkıda bulunur. Ayrıca, kısmen, veri kayması sorunu da çözülmüş olur.

Başka bir şey için de bir teşvik görüyorum - kuantum segment verilerinde olasılıksal tahmin potansiyelini keşfetmek. Önerdiğiniz niceleme yöntemini ele alırsak (aslında sürecin amacının homojen grupları elemek olduğunu hayal etmek daha iyidir - analog - kümeleme) ve verileri örnek sayısına göre 20 eşit kuantum segmentine bölersek, her kuantum segmentinde yalnızca %5 veri kaldığı ortaya çıkar. CatBoost varsayılan olarak 254 ayırıcı - 255 segment oluşturur. Daha sonra bu segmentlerden ağaçlar oluşturulur. Tüm kuantum segmentlerinin eşit derecede faydalı olduğu varsayılır ve bir karar ağacı oluşturma yöntemiyle grup alt gruplara bölünerek aralarındaki etkileşim belirlenmelidir. Bölümleme hem kök hem de diğer tahmin ediciler tarafından yapılır. Bir ağaç alsak bile, "1" pozitif sınıfının orijinal örneklerinden kaç tanesi 6 bölünmeden sonra nihai listede kalacaktır? Bölme seçiminin kümülatif kuantum bölme sayısı metriklerine dayandığını dikkate almalıyız. Ağaç oluşturma yönteminin kendisi dikkate alındığında, tahmin edicinin kuantum segmentlerine bölünmesi ne kadar kalitatif yapılırsa, yaprakta aynı doğruluğu elde etmek için o kadar az bölünmeye ihtiyaç duyulacağı açıktır. Her bölünmenin bir hipotez olduğunu ve tüm hipotezlerin doğru olamayacağını not ediyorum. Dolayısıyla, bölme işlemini bir kuantum segmentinin sınıflardan birine daha fazla ait olma potansiyelini dikkate alarak yaparsak, benzer doğruluğu elde etmek için bölme sayısını azaltırız ve dolayısıyla potansiyel olarak yanlış hipotezlerin (bölmelerin) sayısını azaltırız. Buna ek olarak, tahmin ediciyi ikisi sınıf üyeliği ve biri belirsizlik için olmak üzere küresel 3 bölgeye hemen ayırabilirsek, modeller ortalama olarak daha küçük ve daha iyi istatistiksel performansa sahip olacaktır - ayrıca daha sağlam olmasını bekliyorum.

Örneğin, tahmin edicinin RSI osilatörü olduğunu düşünelim - katılımcıların önemli eylemleri 70, 50, 30 seviyelerinde gerçekleşir - ötesindeki her şey - diyelim ki, piyasa katılımcılarının karar vermesini etkilemez. O halde, bu 3 değeri nüfusun geri kalanından ayıracak şekilde bir kuantum tablosu oluşturmak mantıklıdır. Aksi takdirde, bölünmelerden biri rastgele olarak sınıf üyeliğinin kuantum segmentinde daha fazla örneğe sahip olacak ve yanlış bir hipotez üzerinde yanlış bir kural elde edeceksiniz.

Nicelleştirilmiş tahmin edici skorları içeren bir çubuk grafik çizebilir ve her sütun için sınıf üyeliği "1" olasılıkları eğrisi çizebilirsiniz. Eğrinin düz bir çizgi olma ihtimali daha yüksekse, böyle bir tahmin ediciyi tercih ederim. Bana göre iyi bir tahmin edicinin ya eğimli bir çizgisi ya da bazı sütunlarda sivri uçları olacaktır.

Nicelleştirme yoluyla fiyat hareketi olasılığını etkileyen ayrı olaylar aradığımı söyleyebiliriz.

 
Bu kural, tam olarak
rsi>69 & rsi<71....
Bunların hepsi nicelleştirme.
Tahta bir AMO alırsınız, onu ağaçlara bölersiniz ve doğru olanları çıkarırsınız.

Ne nicelleştirmesi? Çok saçmalıyorsun, acınası bir durum.

Her şey üç satır kodla çözülüyor.
Ve sen yıllardır bu nicelleştirme üzerinde çalışıyorsun, çılgın bir profesör gibi.
 
mytarmailS #:
Kural sadece bölecek
rsi>69 & rsi<71....
Tüm nicelleştirme bu kadar...
Tahtadan bir AMO alırsın, ağaçlara bölersin ve doğru olanları çıkarırsın...

Ne sayısallaştırması? Saçma sapan konuşuyorsun, acınası bir durum.

Hepsi üç satır kodla çözüldü...
Siz de yıllardır bu sayısallaştırma aracını deli bir profesör gibi kurcalayıp duruyorsunuz.

Bir nicelik tablosu oluşturmanın farklı yolları vardır. Sanırım bunu, örneklerin yüzdesine ilişkin sayfada verilen kısıtlamalarla tek bir tahminci üzerinde ağaçlar oluşturan kullanıma hazır bir paket aracılığıyla yapabilirsiniz. Bu paketin ne olduğunu ve verileri ihtiyacım olan formatta nasıl elde edeceğimi bilmiyorum.

Önemli olan sadece bölümleme değil, bu kuantum bölünmeyi değerlendirmek için yeni verilerde sınıf üyeliğinin korunma olasılığını artıracak kriterler bulmaktır.

Bunu neden yapıyorum - çünkü bu niteliksel bir model oluşturmanın anahtarı.

Neden uzun zaman alıyor - çok sayıda deney ve test senaryosu. OpenCL hakkında biraz bilgim var ve kod şu anda kısmen bir ekran kartında sayılıyor - zaman alıyor - birçok şeyi incelemem gerekiyor.

 
Aleksey Vyazmikin #:

Önemli olan sadece bölümleme değil, sınıf üyeliğinin yeni verilerde devam etme olasılığını artıracak bu kuantum kesimini değerlendirmek için kriterler bulmaktır.

Aynı catbuster'daki koda hiç baktınız mı? Onu kullanıyorsun. Üçüncü parti paketleri kullanmıyor. Ama bu o kadar küçük bir fonksiyon ki (anlattığımdan daha da basit, ayırma noktasını yinelenen sayısına göre kaydırmıyor).
Karşıma çıkan şey hakkında yorumlar yazdım. Girdi sıralanmış bir sütundur.

static THashSet<float> GenerateMedianBorders(
    const TVector<float>& featureValues, const TMaybe<TVector<float>>& initialBorders, int maxBordersCount) {
    THashSet<float> result;
    ui64 total = featureValues.size(); //число строк в столбце
    if (total == 0 || featureValues.front() == featureValues.back()) { // проверки
        return result;
    }

    for (int i = 0; i < maxBordersCount; ++i) { // цикл по числу квантов
        ui64 i1 = (i + 1) * total / (maxBordersCount + 1); // номер строки начала кванта номер i
        i1 = Min(i1, total - 1); // не больше числа строк 
        float val1 = featureValues[i1]; // значение в строке i1
        if (val1 != featureValues[0]) { // если != значению в 0-й строке, чтобы не было дубля с 0-й строкой
            result.insert(RegularBorder(val1, featureValues, initialBorders)); // сохранить значение в массив границ разделяющих кванты (не смотрел, но очевидно, что дубликаты пропустит и не создаст им квант)
        }
    }
    return result;
}

Gördüğünüz gibi her şey çok basit ve burada entelektüel bir şey yok - sadece örneğin 100 satırı sayın ve hepsi bu.
Biraz daha karmaşık varyantlar yinelenenlerin sayısına geçebilir, ayrıca kuantum boyutunu optimize edebilirsiniz (örneğin, 10000 satırdan 9000 yinelenen varsa, basit işlev 11 kuantum olacaktır: İlk 1000 satırdan 10 ve 11. satırda kalan 9000 kopya, ya da ilk 1000 satırı 9000 kopya ile 99 kuanta + 1 kuantuma bölebilirsiniz).
Ancak bunların da entelektüel hiçbir yanı yoktur - gerekli sayıda dizginin aynı basit sayımı temeldir.

Orijinal (daha karmaşık varyantları vardır) https://github.com/catboost/catboost/blob/3cde523d326e08b32caf1b8b138c2c5303dc52e5/library/cpp/grid_creator/binarization.cpp
Bu sayfadaki fonksiyonları bir hafta boyunca çalışın ve birkaç yıl kazanın.

Not: Bir sonraki kuantumun tam olarak 100 dizeye değil de 315 ya da 88 ya da 4121 dizeye sahip olmasının ana nedeni süper zor bir formülde değil (dizelerin tahmin gücüne göre birleştirildiği, bu kuantum segmentinin değerlendirme kriterlerini aramak için kullanmak istediğiniz), sadece kopya sayısındadır.
catboost/binarization.cpp at 3cde523d326e08b32caf1b8b138c2c5303dc52e5 · catboost/catboost
catboost/binarization.cpp at 3cde523d326e08b32caf1b8b138c2c5303dc52e5 · catboost/catboost
  • catboost
  • github.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
 
Açıkça boğulmakta olan ancak intiharından zevk alan bir kişiyi kurtarmak gerekli midir?
Ona yardım eli uzattığınızda bunu reddediyor, sizinle tartışıyor, kendisi çıkmak için hiçbir şey yapmaya çalışmıyor ve kendi şartlarını dikte ediyor:
"Ya beni kendin kurtarırsın, en sevdiğim müzik eşliğinde beni başının üzerinde taşıyarak sudan çıkarırsın ya da çıkarmazsın.
O zaman da beni kurtarmak için hiçbir arzun kalmaz.


 
Forester #:

Aynı catbusters'daki koda hiç baktınız mı? Onu kullanıyorsunuz. Üçüncü taraf paketleri kullanmıyor. Ama bu o kadar küçük bir fonksiyon ki (anlattığımdan daha da basit, ayırma noktasını yinelenen sayısına göre kaydırmıyor).
Karşıma çıkan şey hakkında yorum yazdım. Girdi sıralanmış bir sütundur.

Tabii ki baktım. Ayrıca, MQL5'teki tüm miktar belirleme yöntemlerini yeniden üretme çalışması için ödeme yapmaya hazırım. Şimdiye kadarki girişimler başarısız oldu, denemek ister misiniz?

Forester #:

Gördüğünüz gibi, her şey çok basit ve burada entelektüel bir şey yok - sadece örneğin 100 satır sayın ve hepsi bu kadar.

En basit yöntemi verdiniz - evet, zor değil.

Ayrıca, ben ustaca sayısallaştırma yöntemleri olduğunu ya da buna benzer bir şey yazdım mı? Bu benim yazdıklarımla nasıl çelişiyor?