• aka gradient boosted trees.

    (jerome) friedman'in 99'da one surdugu boosting algoritmasi. hem regression hem de siniflandirmada kullaniliyor, genel bir metod. kaba tanimini gradient-descent'in regression agaclariyla (regression tree) sentezlenmesi seklinde vermek mumkun. kirli veriyi (noise) isleyebilmesi, sirali degiskene ilaveten kategorik olanlarla da ugrasabilmesi, karar agaclarindan yararlanmasi bakimindan random trees'e benziyor. rt'nin ardindaki isim olan breiman ile gbt'nin mucidi friedman'in beraber calismis olmalari da guzel bir detay. akran sayilirlar zaten. gbt 1999'da meydana cikiyor, rt ise 2002'de.

    uc temel meta-parametresi mevcut: agac (iterasyon) sayisi, sikistirma (shrinkage) ve agac derinligi (terminal dugumlerin sayisi). hedef fonksiyona ne kadar yaklasildigini belirlemek icin ise moduler bir teknik izliyor: hata metrigi (loss function). bu bakimdan da kernel'leriyle unlu svm'i andiriyor. cunku svm'de vektorlerin alakalarini olcen zimni ic carpim (kernel) nasil nihai neticeyi degistiriyorsa, gbt'de de hata metrigi muhim rol oynayabiliyor. once bir su meta-parametrelerden bahsedeyim:

    gbt'nin nihai karar fonksiyonu f iki alt-fonksiyon ihtiva ediyor. birincisi sabit model (yani gradyan vasitasiyla atilan adimlarin vardigi son model) fonksiyonu g. ikincisi iterasyonlar esnasinda 'biriken' agaclarin verdigi tepkilerin (response) toplami h. v sikistirma miktari (0 ve 1 arasinda, regularization) ise, f = g + v*h, algoritmanin karar fonksiyonunu olusturuyor. friedman, nesrettigi yazida sikistirma miktari ile agac sayisi arasinda bir trade-off oldugundan dem vuruyor, ki adam hakli beyler: bunu hem sentetik hem reel veride teyid etmis, tablosunu grafigini cikarmis. inanmazsan (veya okumazsan) habire deniyorsun ve friedman'in dedigine variyorsun (zaman kaybediyorsun, akilli olman gerekmekte).

    yuksek agac sayisi (m) ve dusuk sikistirma miktari (v) ile birlikte isabet de artiyor. lakin sikistirma miktarini kucultmek belirli bir esik-noktadan sonra fayda etmiyor: isabet cok az artiyor veya hic artmiyor. friedman'in tavsiyesi techizatin verdigi mumkuniyet dahilinde agac sayisini olabildigince yuksek tuttuktan sonra esige ulasana kadar sikistirmayi azaltmak, ki benim tecrubem de bu yonde oldu: elimdeki problemde minimum hatayi m=200, v=0.1000 ile temin ettim. v'yi 0.06'ya indirmek veya m'yi 300 civarina cikarmak en fazla epsilon kivaminda mini faydalar getirdi. taban isabeti ise nitelik (feature) donusumu ile temin ettim.

    donusum meselesi. friedman'in vurguladigi bir nokta daha var: nitelik (feature) uzerindeki tekil temel donusumler, yani x |--> e^x, log(x) kabilinden bunu-da-deneyeyim-de-eksik-olmasin donusumleri, gbt'nin isleyisini (verdigi neticeyi) degistirmiyor (svm'de scaling feci degisimler uretebiliyor mesela). keza, hedefi az etkileyen veya hic etkilemeyen degiskenler de otomatik olarak eleniyor. hulasa, gbt, tahmin algoritmasi oncesi yapilan secim veya donusum islemlerinden munezzeh oluyor. ve fakat friedman'in dem vurdugu donusumler tekil olanlarla mi sinirli, yoksa pca gibi klasiklesmis metodlari da ihtiva ediyor mu, bilmiyorum. cunku gbt + pca veya kernel pca gibi varyeteleri henuz denemedim. sunu da soylemem gerekiyor: probleme ozel gozlem-ici (vektor-ici) donusumler gbt'ye de fayda getirebiliyor (bu ayrima gore pca gozlem-harici oluyor, yani teker teker gozlemler uzerinden degil tum gozlemlerin analizinden tevarus ediliyor).

    hata metrigi. ortalik fonksiyondan gecilmiyor diye metrik dedim, yoksa loss function'i literaturde nasil ceviriyorlar bilmiyorum (kayip fonksiyonu?). gbt, gradyan vasitasiyla 'adim yonu' belirlerken hesapladigi hata (hedef fonksiyona yaklasma) miktarini bu metrik ile buluyor. haliyle, metrik degisince adimlar da degisiyor. yaygin hata metrikleri sunlar: squared loss, absolute loss ve huber loss. squared loss, (izafi) son tahminin (y_0) hedefe (y) ne kadar uzak oldugunu (y-y_0)^2 ile olcuyor. absolute loss, |y - y_0| mutlak farkini aliyor. huber loss ise mutlak farkin miktarina gore ikili bir yol izliyor: delta'dan kucukse direkt y - y_0 farkini kullan, aksi halde delta*sgn(y - y_0) sayisini al.

    tatbik. opencv 2.3.1'de cvgbtrees'i ml kutuphanesine dahil etmisler. su iki noktaya dikkat etmek gerekmekte: birincisi, huber loss'in parametresi (delta) hard-coded (kodda alpha = ... satiri). friedman'in simulasyonlarinda ise farkli bir deger mevcut. cvgbtreesparams sinifi, agac sayisi, terminal dugum sayisi ve sikistirma miktari meta-parametrelerini weak_count, max_depth ve shrinkage uyeleri vasitasiyla degistirmeye imkan verse de alpha'ya erisimi mumkun kilmamis. farkli bir delta kullanmayi isteyen alpha = ... satirini duzenleyip kutuphaneyi yeniden derlemek zorunda. ikincisi, cvgbtrees'in float predict(const cvmat* mt_response, const cvmat* mt_missing, cvmat* mt_weak, ...) prototipli metodu kullanicinin 'zayif tepkileri' (weak response'lar, yani boosting'in weak learner'larindan gelen tepkiler) temin edebilmesi icin yazilmissa da mt_weak matrisini herhangi bir sekilde degistirmiyor (kodda comment out'lanmis). zayif tepkileri alayim da onlarla bir iki hile edeyim diyenler bu vaziyeti fark etmezlerse zaman kaybedebilirler.

    :(

    ~: yanlis anlatmisim. delta hard-coded degil. delta'nin koddaki esdegeri alpha degil cunku. delta'ya etki eden alpha parametresi hard-coded. tabii uyari hala gecerli.
  • gradient descent ve boosting kelimelerinin harmanlanmasından ortaya çıkmıştır. gradient boosting karar ağaçları aslında regresyon ağaçlarıdır. eğer bir sınıflandırma problemi için uygulayacaksanız önce problemi n çıktılı 0-1'lerden oluşan bir regresyon problemine çevirmeniz gerekmektedir.

    öncelikle bir regresyon ağacı kurulur. sonrasında veri setindeki hedef sütunu ilk kurulan regresyon ağacının hatası ile değiştirilir ve ikinci bir regresyon ağacı kurulur. ikinci karar ağacının hatalarıyla üçüncü bir karar ağacı kurulur ve bu işlem bir epoch sayısı boyunca devam eder ve öğrenme tamamlanır. buradaki hatalar ile hedef değerlerin değiştirilmesi gradient descent algoritmasından gelmektedir. şayet kayıp fonksiyonunuz mean squared error yani [(gerçek - tahmin)^2 ]/2 ise bu fonksiyonun gerçeğe göre türevi (gerçek - tahmin) olacaktır. yani yaptığınız hata.

    tahmin etme aşamasında sıralı 500 ağaç kurmuşsanız her birine tek tek tahminini sorar ve toplarsınız. gbm konusunda en büyük yanılgı konusu budur. sadece 500. ağaca tahminini sormayacağız. 1'den 500'e kadar kurulan tüm karar ağaçlarının tahminlerinin toplamı bizim son durumdaki tahminimizdir.

    derin öğrenme daha çok ses, görüntü gibi unstructured ya da zaman serileri gibi problemler için iyi performans gösterirken, gbm algoritması genel olarak tabular veri için uygundur. keza kaggle yarışmalarının yarısından fazlasının kazananının xgboost olması bu sebeptendir kaynak.

    (bkz: gbm)
    (bkz: gradient boosting machines)
    (bkz: gradinet boosting decision trees)
    (bkz: gradient boosting regression trees)
    (bkz: xgboost)
    (bkz: lightgbm)
    (bkz: catboost)
  • kendisinden önceki data modelinden gelen hataları düzeltmeye odaklanan, karar mekanizmalarını ardışık olarak oluşturan bir sınıflandırma veya regresyon tekniğidir. son çıktı, tüm mekanizmalarda alınan sonuçların bir kombinasyonudur.
    örnek kullanımları; e ticarette ürün talebini ve stok seviyelerini tahmin etmeye yarar.
    araçların özelliklerine bağlı olarak fiyatlarını tahmin eder. (yaş, km etc.)
  • zayıf ve güçlü sınıflandırıcıları birleştirerek daha iyi ve genelleştirilebilir bir model elde etmeyi amaçlar.
  • gradyan artırma, hem regresyon hem de sınıflandırma görevleri için kullanılan güçlü bir makine öğrenme tekniğidir. tek başına herhangi bir modelden daha iyi tahmin performansı üretmek için birden fazla modeli birleştiren topluluk öğrenme yöntemlerine aittir. gradyan artırma, modelleri sırayla oluşturur; burada her yeni model, önceki modellerin yaptığı hataları düzeltir.

    gradyan artırmanın nasıl çalıştığına ilişkin ayrıntılı bir açıklamayı burada bulabilirsiniz:

    karar ağaçları: gradyan artırma genellikle temel öğreniciler olarak karar ağaçlarını kullanır. karar ağaçları, hedef değişkeni en iyi şekilde ayıran (sınıflandırma için) veya tahmin hatasını en aza indiren (regresyon için) dallar oluşturmayı amaçlayan, giriş verilerini özellik değerlerine göre alt kümelere bölen basit modellerdir.

    sıralı eğitim: gradyan artırma, bir dizi karar ağacını sırayla eğitir. her yeni ağaç, o ana kadar inşa edilen birleştirilmiş ağaç topluluğunun hatalarını düzeltmek için eğitilir.

    kademeli iniş: eğitim sırasında gradyan artırma, yeni modelleri önceki modellerin kalan hatalarına yinelemeli olarak uydurarak kayıp fonksiyonunu en aza indirir. tahmin edilen değerlere göre kayıp fonksiyonunun eğimini hesaplar ve ardından negatif eğime yeni bir model (genellikle bir karar ağacı) yerleştirir.

    öğrenme oranı: her yeni ağacın topluluğa katkısını kontrol etmek için, degrade artırma bir öğrenme oranı parametresi (büzülme olarak da bilinir) sunar. öğrenme oranı her ağacın katkısını ölçeklendirerek daha istikrarlı yakınsamaya izin verir ve aşırı uyumu önler.

    düzenlileştirme: gradyan artırma, aşırı uyumu önlemek için genellikle düzenlileştirme tekniklerini içerir. yaygın düzenleme yöntemleri arasında ağaçların derinliğinin sınırlandırılması, kayıp fonksiyonuna bir ceza terimi eklenmesi ve eğitim verilerinin alt örneklenmesi yer alır.

    tahmin: tahmin yapmak için, degrade artırma, topluluktaki tüm ağaçların tahminlerini, genellikle bunları toplayarak (regresyon için) veya ağırlıklı oy alarak (sınıflandırma için) birleştirir.

    gradyan artırma, karmaşık ve yüksek boyutlu verilerde bile son derece doğru tahminler üretme yeteneği nedeniyle en popüler ve etkili makine öğrenimi tekniklerinden biri haline geldi. finans, sağlık hizmetleri, pazarlama ve diğerleri dahil olmak üzere çeşitli alanlarda yaygın olarak kullanılmaktadır. gradyan yükseltmenin popüler uygulamaları arasında xgboost, lightgbm ve catboost yer alır ve bunların her biri modelleri güçlendirmek için verimli ve optimize edilmiş algoritmalar sunar.
hesabın var mı? giriş yap