- Karar ağaçları, kararları zincirleme sorular olarak modeller; sınıflandırma ve regresyon için bölmelerin nasıl seçileceği entropi ve bilgi kazancı ile yönlendirilir.
- Azure Machine Learning'de LightGBM ile uygulanan güçlendirilmiş karar ağacı regresyonu, artık hataları yinelemeli olarak düzelten küçük ağaçlardan oluşan topluluklar oluşturur.
- Ağaç modellerinde aşırı uyum, budama ve derinlik, yaprak boyutu ve öğrenme oranı gibi parametrelerle kontrol edilirken, rastgele ormanlar ve artırma gibi topluluk modelleri sağlamlığı artırır.
- Tasarımcılar, düğümleri nesne olarak yapılandırarak, navigasyonu (geri dönüş eylemleri dahil) yöneterek ve daha sonra öğrenilen modellere bağlayarak, saf JavaScript kullanarak etkileşimli karar ağaçlarının prototiplerini oluşturabilirler.
Eğer HTML, CSS ve saf JavaScript ile zaten biraz deneyiminiz varsa, bir karar ağacı veya regresyon modeli oluşturmak ilk başta karanlık bir sihir gibi gelebilir. Kağıt üzerinde net bir karar akışı şemanız, hatta güzel bir Figma prototipiniz bile olabilir, ancak bu mantığı etkileşimli bir web bileşenine veya küçük bir tahmin modeline dönüştürme zamanı geldiğinde, çizdiğiniz şema kadar basit hiçbir şey görünmez.
İyi haber şu ki, karar ağaçları, sınırlı kodlama deneyimine sahip olsanız bile JavaScript'te uygulayabileceğiniz ve görselleştirebileceğiniz en sezgisel makine öğrenimi modellerinden biridir. Bunun da ötesinde, Azure Machine Learning veya LightGBM gibi araçlarda kullanılan güçlü artırılmış regresyon ağaçları aynı kavramsal fikri izler: sayısal bir tahmini kademeli olarak iyileştiren bir soru dizisi. Bu kılavuzda, prototipini oluşturmak istediğiniz görsel karar ağacı, temel makine öğrenimi kavramları (entropi, bilgi kazancı, budama, artırma) ve bugün gerçekten yazabileceğiniz pratik JavaScript kodu arasındaki bağlantıyı kuracağız.
JavaScript'e dokunmadan önce karar ağaçlarını anlamak
En genel düzeyde, karar ağacı, her cevabın sizi farklı bir dala yönlendirdiği ve nihai karara ulaşana kadar devam eden, yapılandırılmış bir soru sorma yöntemidir. Bir restorana girdiğinizi hayal edin: Aç mısınız? Eğer evet ise, hafif mi yoksa doyurucu bir şey mi istersiniz? Eğer hafif ise, menüde salata var mı? Eğer varsa, sonunda salata sipariş edersiniz. Bu zihinsel akış şeması kelimenin tam anlamıyla bir karar ağacıdır: her soru bir düğüm, her cevap bir dal ve son seçim (salata, hamburger, hiçbir şey) bir yapraktır.
Makine öğreniminde, bu aynı fikri veriler kullanarak kodluyoruz: bir veri kümesindeki her satır bir örnek, her sütun bir özellik ve hedef ise tahmin etmek istediğimiz şeydir. Bir ağaç öğrenme algoritması, verileri homojen gruplara ayırmaya en çok yardımcı olan soruları (özelliklere göre bölmeleri) otomatik olarak keşfeder. Sınıflandırma için yapraklar bir sınıf etiketini saklar; regresyon için yapraklar sayısal bir değer (örneğin, fiyat, puan veya olasılık) saklar.
Ağaçları, özellikle tasarımcılar ve yeni başlayanlar için bu kadar çekici kılan şey, doğaları gereği yorumlanabilir olmalarıdır. Ağacı tepeden aşağıya doğru bir dizi kural olarak okuyabilirsiniz: "Eğer ortam düşükse ve rüzgar yoksa, oyun oynama olasılığı kesinlikle evettir." Bu şeffaflık, derin sinir ağları gibi birçok başka modelde bulamayacağınız bir şeydir.
İyi bir ağaç oluşturmak için algoritmanın önce hangi soruyu, sonra hangi soruyu soracağına karar vermesi gerekir ve işte burada biraz matematik devreye giriyor. Endişelenmeyin: JavaScript kodunuzda formülleri elle türetmenize gerek yok, ancak entropi ve bilgi kazancı kavramlarını anlamak, ağacınızın nasıl oluşturulduğunu ve bazı dalların neden bu şekilde göründüğünü anlamanıza yardımcı olacaktır.
Entropi ve bilgi kazancı: Ağaçlar doğru soruyu nasıl seçiyor?
Entropi, bir veri kümesindeki belirsizliğin veya düzensizliğin bir ölçüsüdür ve ID3 veya C4.5 gibi klasik karar ağacı algoritmalarının bölmeleri nasıl belirlediğinin merkezinde yer alır. Bir alt kümedeki tüm örnekler aynı sınıfa aitse, entropi sıfırdır: düğüm mükemmel derecede saftır, belirsizlik yoktur. Sınıflar eşit olarak karışmışsa (örneğin, %50 evet, %50 hayır), entropi maksimumdur; bu da rastgele bir öğenin etiketinin ne olduğundan çok emin olmadığımız anlamına gelir.
Resmi olarak, eğer birden fazla sınıfımız varsa ve pi i. sınıftaki örneklerin oranı ise, bir S kümesinin entropisi H(S) şöyledir: H(S) = – ∑ pi * kayıt2(piBir sınıf baskın olduğunda, onun p değeri artar.i Değer 1'e yakın olduğunda, logaritma terimi küçülür ve entropi düşer. Sınıflar dengeli olduğunda, daha fazla terim önemli ölçüde katkıda bulunur ve ikili bir durum için entropi 1'e doğru yükselir.
Bilgi kazancı, veri setini belirli bir öznitelik kullanarak böldüğümüzde entropinin ne kadar düştüğünü ölçer ve ağaç her düğümde en iyi soruyu bu şekilde seçer. Farklı değerler v alabilen bir A özniteliği için, S alt kümelerini ele alıyoruz.v Sadece A = v olan örnekleri içeren kümeler. Bilgi kazancı IG(S, A), H(S) eksi her alt kümenin entropilerinin ağırlıklı toplamıdır. En yüksek bilgi kazancına sahip özellik, en temiz ayrımı sağlar ve bölme olarak seçilir.
Bu nedenle, hava durumuyla ilgili birçok örnekte, ağacın kökünde genellikle "Çevre" veya "Görünüm" gibi nitelikler görürsünüz. Belirli bir durumda, Çevre değişkeni en büyük bilgi kazancını sağlayabilir (örneğin, yaklaşık 0.246), yani "oyna" ve "oynama" kararlarını en iyi şekilde ayırabilir. Ardından, Çevreye bağlı olarak, algoritma ayrımı daha da iyileştirmek için Rüzgar, Nem veya Sıcaklığa bakabilir.
Eğitilmiş bir ağacı incelediğinizde, şu gibi yollar görebilirsiniz: Ortam ≤ 1.5 ise, Rüzgarı kontrol et; rüzgar yoksa, beş örneklemde entropi 0.0 ile oyun = evet tahmininde bulun. Eğer rüzgar varsa, düğümün entropisi 1.0 olabilir ve iki pozitif ve iki negatif örnek içerebilir; bu durumda belirsizlik daha yüksek olur ve daha fazla bölünme meydana gelebilir. Diğer dallarda, Çevre > 1.5 olduğunda, ağaç Nem'i dikkate alabilir ve yalnızca nem düşük değilse, karmaşık durumları netleştirmek için Sıcaklığı inceleyebilir.
Basit bir karar ağacından regresyon ağaçlarına
Şimdiye kadar çoğunlukla sınıflandırmadan bahsettik, ancak çıktının ayrık bir etiket yerine sayısal bir değer olduğu regresyon için de tamamen aynı ağaç yapısını kullanabilirsiniz. Regresyon ağaçları, her bir yaprakta "oyna" veya "oynama" ifadesini saklamak yerine, genellikle o yaprağa düşen eğitim örneklerinin ortalama hedef değerini gösteren bir sayı saklar.
Regresyon ağaçlarında, bölme kriteri artık entropiye değil, varyans azaltımı veya karesel hata minimizasyonu gibi ölçütlere dayanmaktadır. Her bir bölme işlemi, hedef değerlerin mümkün olduğunca benzer olduğu alt düğümler oluşturmayı amaçlar, böylece her bir yaprak düğüm için tahmin daha doğru olur. Başka bir deyişle, algoritma şu soruyu sorar: "Verileri bu öznitelik üzerinden bölersem, her alt küme içindeki hedef değerin değişkenliğini ne kadar azaltabilirim?"
Bu regresyon ağaçları, Azure Machine Learning gibi platformlarda yaygın olarak kullanılan LightGBM gibi gradyan artırma çerçeveleri de dahil olmak üzere birçok gelişmiş yöntemin temel yapı taşlarıdır. Bu sistemlerde genellikle tek bir monolitik ağaç değil, her biri bir öncekinin hatalarını düzeltmeye çalışan bir ağaç topluluğu oluşturulur.
Bir JavaScript geliştiricisi veya tasarımcısı olarak, her bir regresyon ağacını, yapraklardaki "cevapların" metin etiketleri yerine sayılar (fiyatlar, puanlar veya olasılıklar gibi) olduğu, elle çizilmiş akış şemanızın biraz daha akıllı bir versiyonu olarak düşünebilirsiniz. Mantığı hâlâ bir ağaç olarak görselleştirebilirsiniz, ancak asıl güç bu ağaçların nasıl birleştirildiğinden ve ayarlandığından gelir.
Geliştirilmiş karar ağacı regresyonu: topluluklar doğruluğu nasıl artırır?
Boosting, birçok zayıf model (küçük regresyon ağaçları gibi) oluşturup bunları birleştirerek çok daha yüksek doğruluk oranına sahip güçlü bir tahminleyici oluşturan klasik bir topluluk yöntemidir. Bagging veya rastgele ormanlarda olduğu gibi tüm ağaçları bağımsız olarak eğitmek yerine, boosting yöntemi ağaçları birbiri ardına ekler ve her yeni ağaç, önceki ağaçların bıraktığı artık hatalara odaklanır.
Azure Machine Learning'in LightGBM gibi algoritmalar aracılığıyla uyguladığı güçlendirilmiş karar ağacı regresyonunda, her yeni ağaç, artık verilerden öğrenerek mevcut topluluğun hatalarını düzeltir. Basit bir modelle başlarsınız, belki sadece sabit bir tahmin; ardından bu tahmin ile gerçek değerler arasındaki farkı (kalıntıları) hesaplarsınız. Sonraki ağaç, bu kalıntıları tahmin etmek üzere eğitilir ve belirli bir öğrenme oranıyla modele eklenir. Bu işlemi tekrarladıkça, genel tahmin giderek daha iyi hale gelir.
Bu işleme gradyan artırma (gradient boosting) denir ve MART (Multiple Additive Regression Trees), Azure Machine Learning'in artırılmış ağaçlar için kullandığı bilinen bir uygulamadır. Algoritma her adımda, hatanın gradyanını hesaplamak ve bir sonraki ağacı nasıl ayarlayacağına karar vermek için türevlenebilir bir kayıp fonksiyonu (örneğin, karesel hata) kullanır. Pratikte, her biri nihai sayısal çıktıya biraz katkıda bulunan birçok küçük ağaçtan oluşan bir topluluk elde edersiniz.
Her ne kadar güçlendirme (boosting) genellikle tahmin doğruluğunu artırsa da, ağaç sayısı, maksimum derinlik veya öğrenme oranı gibi hiperparametreler konusunda dikkatli olunmazsa kapsama alanını veya genelleme yeteneğini azaltabilir.ile ilgili bir durum fazla takmak vs yetersiz takmak. Basit bir modelle başlarsınız, belki sadece sabit bir tahmin; ardından bu tahmin ile gerçek değerler arasındaki farkı (kalıntıları) hesaplarsınız. Sonraki ağaç, bu kalıntıları tahmin etmek üzere eğitilir ve belirli bir öğrenme oranıyla modele eklenir. Bu işlemi tekrarladıkça, genel tahmin giderek daha iyi hale gelir.
Bu işleme gradyan artırma (gradient boosting) denir ve MART (Multiple Additive Regression Trees), Azure Machine Learning'in artırılmış ağaçlar için kullandığı bilinen bir uygulamadır. Algoritma her adımda, hatanın gradyanını hesaplamak ve bir sonraki ağacı nasıl ayarlayacağına karar vermek için türevlenebilir bir kayıp fonksiyonu (örneğin, karesel hata) kullanır. Pratikte, her biri nihai sayısal çıktıya biraz katkıda bulunan birçok küçük ağaçtan oluşan bir topluluk elde edersiniz.
Her ne kadar güçlendirme (boosting) genellikle tahmin doğruluğunu artırsa da, ağaç sayısı, maksimum derinlik veya öğrenme oranı gibi hiperparametreler konusunda dikkatli olunmazsa kapsama alanını veya genelleme yeteneğini azaltabilir. Çok fazla ağaç veya çok büyük ağaçlar eğitim verilerinizi aşırı uyumlaştırmaya yol açabilirken, çok az ağaçla aşırı düşük bir öğrenme oranı yetersiz uyumlaştırmaya ve önemli kalıpları yakalayamamaya neden olabilir.
Unutulmaması gereken önemli bir nokta, güçlendirilmiş karar ağacı regresyonunun denetimli öğrenme yöntemi olmasıdır; bu da sayısal hedef sütunu içeren etiketli bir veri seti sağlamanız gerektiği anlamına gelir. Etiketler (hedefler) sayısal olmalıdır, çünkü algoritma sürekli kayıp fonksiyonlarını optimize eder; eğer kategorileriniz varsa, bunları sayılara dönüştürürsünüz veya bunun yerine güçlendirilmiş ağaçların sınıflandırma varyantını kullanırsınız.
Azure Machine Learning'de güçlendirilmiş ağaçlardaki temel yapılandırma seçenekleri
Azure Machine Learning tasarımcısında güçlendirilmiş karar ağacı regresyon bileşenini kullandığınızda, aslında ağaç topluluğunuzun nasıl oluşturulacağını ve eğitileceğini yapılandırıyorsunuz. Bu bileşen, verimli bir LightGBM tabanlı uygulamayı sarmalar, ancak en önemli ayarları kullanıcı dostu bir arayüzde sunarak, doğrudan o ortamda kod yazmasanız bile denemeler yapmanıza olanak tanır.
Karşınıza çıkan ilk seçenek, tek bir yapılandırma belirleyip belirlemeyeceğinizi veya bir dizi hiper parametreyi keşfedip keşfetmeyeceğinizi belirleyen eğitmen oluşturma modudur. “Tek Parametre” modunda, öğrenme oranı, yaprak sayısı ve ağaç sayısı gibi şeyler için değerleri manuel olarak seçersiniz: bu, ne istediğiniz konusunda zaten iyi bir fikriniz varsa kullanışlıdır. “Parametre Aralığı” modunda, her parametre için aralıklar belirtirsiniz ve ardından “Model Hiperparametrelerini Ayarla” gibi ayrı bir bileşen, en iyi performansı verenleri bulmak için tüm kombinasyonları otomatik olarak dener.
Bir diğer önemli ayar ise ağaç başına maksimum yaprak sayısıdır; bu da topluluk içindeki her bir ağacın karmaşıklığını etkili bir şekilde kontrol eder. Daha fazla yaprak, daha fazla terminal düğüm ve daha ayrıntılı kurallar anlamına gelir. Bu, eğitim verilerinde doğruluğu artırabilir, ancak aşırı uyum riskini de artırır ve eğitim süresini uzatır. Daha az yaprak, her ağacı daha basit tutar ve genelleme yeteneğini artırabilir, ancak bu durum ince kalıpları kaçırma riskini de beraberinde getirir.
Ayrıca, her bir yaprak düğümünde gereken minimum örnek sayısına da karar vermeniz gerekir; bu da kurallarınızın ne kadar ayrıntılı olabileceğine dair bir eşik belirler. Varsayılan değer olan 1 ile, tek bir eğitim örneği bile yeni bir yaprak oluşturabilir ve bu da modelin gürültüyü ezberlemesine neden olabilir. Bu minimum değeri örneğin 5'e yükseltmek, her kuralın aynı koşullara sahip en az beş örneği kapsamasını sağlar, modeli yumuşatır ve genellikle genelleme yeteneğini geliştirir.
Öğrenme oranı, önceki topluluktan kaynaklanan hataları düzeltirken her yeni ağacın attığı adımın büyüklüğünü belirten 0 ile 1 arasında bir değerdir. Yüksek bir öğrenme oranı, modelin hızlı öğrenmesini sağlar ancak en uygun çözümü aşma riskini taşır; çok düşük bir oran ise eğitimi daha istikrarlı hale getirir ancak çok daha fazla ağaç ve daha uzun eğitim süresi gerektirebilir. İyi bir denge bulmak, güçlü bir model için çok önemlidir.
Oluşturulan ağaç sayısı, güçlendirme adımının kaç kez tekrarlanacağını, yani kaç zayıf öğrenicinin nihai modele dahil edileceğini kontrol eder. Daha yüksek bir sayı genellikle daha iyi kapsama alanı sağlar ancak aşırı uyum olasılığını artırır ve hesaplama maliyetini yükseltir. Bunu 1'e ayarlamak esasen artırmayı devre dışı bırakır ve size tek bir regresyon ağacı bırakır; bu, yorumlanması daha kolay olabilir ancak genellikle daha az doğrudur.
Azure Machine Learning ayrıca, aynı veri ve parametrelerle yapılan çalıştırmalarda tekrarlanabilir sonuçlar elde etmek için kullanışlı olan, başlatma için rastgele bir tohum belirlemenize de olanak tanır. Varsayılan değer olan 0'da bırakırsanız, platform tohum değerini sistem saatinden alır, bu nedenle her eğitim çalıştırması biraz farklı ağaçlar üretebilir. Sabit bir tohum değeriyle, modelleri daha kolay hata ayıklayabilir ve karşılaştırabilirsiniz.
Bileşeni yapılandırdıktan sonra, modeli eğitmek için onu etiketlenmiş bir veri kümesine bağlamanız ve seçilen moda bağlı olarak "Modeli Eğit" bileşenini veya hiperparametre ayarlama bileşenini kullanmanız yeterlidir. Eğitim tamamlandıktan sonra, elde edilen modeli yeni girdiler üzerinde tahminlerde bulunmak için bir "Puan Modeli" bileşenine bağlayabilir ve eğitilmiş modeli bileşen ağacına kaydederek yeniden eğitmeye gerek kalmadan diğer işlem hatlarında tekrar kullanabilirsiniz.
Aşırı uyum, budama ve ağaçların neden çok zeki hale gelebileceği
Karar ağaçlarıyla çalışırken, ister sade biçimde isterse de güçlendirilmiş veya rastgele orman topluluklarının bir parçası olarak kullanılsın, en büyük risklerden biri aşırı uyumdur ve bunu anlamak önemlidir. sapma-varyans dengesi Bu durum, modelin genel kuralları öğrenmek yerine eğitim verilerini ezberleyecek kadar karmaşık hale gelmesinin nedenini açıklamaya yardımcı olur. Teorik olarak, bir ağaç her yaprak tek bir eğitim örneğine karşılık gelene kadar bölünmeye devam edebilir; bu durumda bilinen verilerde mükemmel doğruluk elde edilirken, görülmemiş örneklerde düşük performans sergilenir.
Budama, karar ağaçlarında aşırı uyum sorununa karşı standart bir çözümdür ve özünde, modelin makul derecede basit kalması için dalların kesilmesi veya ağaç büyümesinin sınırlandırılması anlamına gelir. Birçok kütüphane ve çerçeve, yeni dalların nasıl ve ne zaman oluşturulacağını kontrol eden maksimum derinlik, yaprak başına minimum örnek sayısı veya bölme başına minimum örnek sayısı gibi parametreler sağlar. Bu eşik değerlerinin artırılması, ağacın bölme davranışında daha muhafazakar olmasını sağlar.
Örneğin, Python'ın scikit-learn kütüphanesinde, ağaçları düzenlemek için sıklıkla max_depth, min_samples_leaf ve min_samples_split gibi parametreler kullanıldığını görürsünüz. Daha küçük bir max_depth değeri, ağacın sorabileceği soru seviyelerinin sayısını sınırlar. Daha yüksek bir min_samples_leaf değeri, her yaprağın istatistiksel olarak anlamlı olacak kadar büyük bir örnek grubunu temsil etmesini sağlar. Daha yüksek bir min_samples_split değeri, modelin çok az örneğe sahip düğümlerden yeni dallar oluşturmasını engeller.
JavaScript'te scikit-learn'ü doğrudan kullanmasanız bile, kendi ağaç mantığınızı uygulamanız veya karar yapısını manuel olarak tasarlamanız durumunda aynı fikirler geçerlidir. Her zaman kendinize yeni bir dalın gerçekten istikrarlı bir modeli mi yoksa verilerdeki rastgele bir gürültüyü mü temsil ettiğini sormanız gerekir. Kullanıcıya yönelik karar ağaçlarında, aşırı derin veya çok spesifik dallar da kullanıcıları karıştırabilir ve arayüzün anlaşılmasını zorlaştırabilir.
Güçlendirilmiş ve topluluk modelleri, birçok zayıf öğreniciyi bir araya getirerek aşırı uyum sorunlarının bir kısmını hafifletir, ancak hiperparametreler çok agresif olursa yine de aşırı uyum gösterebilirler. Azure Machine Learning gibi üretim ortamlarında ağaç sayısını, derinliğini, öğrenme oranını ve düzenleme terimlerini kontrol etmek çok önemlidir. Etkileşimli deneyim tasarımı için, hem kullanıcı deneyimi (UX) hem de sağlamlık açısından genellikle daha basit olan daha iyidir.
Tek bir karar ağacından rastgele ormanlara
Tek bir karar ağacı güçlü ama kırılgan ise, rastgele orman, daha istikrarlı bir tahmine ulaşmak için birlikte oy kullanan bir ağaç komitesi gibidir. Fikir basit: Her biri verilerin ve özelliklerin biraz farklı bir alt kümesini gören birçok karar ağacı eğitiyorsunuz ve ardından çıktılarını birleştiriyorsunuz. Sınıflandırma için, en yaygın sınıfa oy veriyorlar; regresyon için, sayısal tahminlerinin ortalamasını alıyorsunuz.
Rastgele ormanlar, rastgeleliği iki ana yolla sunar: eğitim örneklerini yerine koyarak örnekleme (bootstrap örnekleme) ve her bölüm için rastgele bir öznitelik alt kümesi seçme. Bu rastgelelik, her ağacı biraz farklı kılar, böylece hepsi aynı hataları tekrarlamaz. Bir araya getirildiğinde, bireysel ağaçların hataları birbirini götürme eğilimindedir ve bu da daha sağlam bir modele yol açar.
Aşırı uyum açısından bakıldığında, rastgele ormanlar genellikle tek bir derin ağaca göre daha iyi genelleme yapar çünkü her ağaç gördükleri ve bölme şekilleri konusunda sınırlıdır ve nihai tahmin birçok bakış açısının ortalamasıdır. Başka bir deyişle, modelin varyansı azalır ve farklı veri kümelerinde daha istikrarlı bir davranış elde edersiniz.
Tasarım geçmişi olan biri için, rastgele ormanı, her biri biraz farklı kriterler kullanan farklı tasarımcılar tarafından oluşturulmuş, biraz farklı karar haritaları kümesi ve ardından bunların hepsine bakıp fikir birliği cevabını seçen bir toplayıcı olarak hayal edebilirsiniz. Hiçbir haritanın mükemmel olması gerekmez; bilgelik gruptan doğar.
Bu makale genel olarak karar ağaçları ve güçlendirilmiş regresyona odaklanırken, rastgele ormanların ardındaki sezgi, daha sonra orman ve topluluk API'leri sunan daha gelişmiş JavaScript veya Python kütüphanelerini keşfederken çok yardımcı olacaktır. Temel yapı taşı her zaman aynıdır: artık anladığınız karar ağacı.
Karar ağaçlarını öğrenme: beceriler, rozetler ve yapılandırılmış eğitim
Makine öğrenimiyle ilgili birçok öğrenme yolu ve kurs, içeriklerini açıkça karar ağaçları etrafında yapılandırır ve genellikle tüm etkinlikleri tamamladığınızda rozet veya sertifika verir. Bu programlar genellikle karar ağaçlarına girişle başlar ve ardından entropi, Gini endeksi veya bilgi kazancı kullanarak en iyi bölmeyi nasıl bulacağınız, ağaçları nasıl ve neden budayacağınız ve ağaçların doğrusal modellerle nasıl karşılaştırıldığı gibi konulara geçer.
Bu süreçte, sınıflandırma için karar ağaçları, regresyon için karar ağaçları ve model basitliği ile tahmin gücü arasındaki denge gibi konuları ele alabilirsiniz. Birçok öğrenci için ağaç yapıları, makine öğrenimine giriş algoritmasıdır çünkü insanların doğal olarak dallar ve kurallar şeklinde düşünme biçimine uyarlar. Eğitilmiş bir ağacı görselleştirmek, modelin neden belirli bir seçim yaptığını açıkça gösterir; bu da sezgiyi geliştirmek için harika bir yoldur.
Orta seviye kurslar genellikle kavramsal açıklamaları, scikit-learn gibi kütüphaneler kullanılarak Python gibi dillerde uygulamalı kodlama alıştırmalarıyla birleştirir. Küçük bir hava durumu veri kümesi üzerinde bir ağaç yapısı uygulayabilir, entropi ve bilgi kazancını manuel olarak hesaplayabilir, ardından kütüphanenin ağır işleri halletmesine ve nihai yapıyı görselleştirmesine izin verebilirsiniz. Bu aktiviteler, matematiği gerçek model davranışıyla ilişkilendirmenize yardımcı olur.
Nihai hedefiniz JavaScript'te karar mantığı veya regresyon ağaçları uygulamak olsa bile, Python'da bazı alıştırmalar yapmak çok aydınlatıcı olabilir, çünkü çoğu öğrenme kaynağı ve açıklama şu anda bu ekosistemde yazılmıştır. İşin mantığını kavradığınızda, temel fikirleri saf JavaScript'e aktarmak veya ön uçtan arka uç servisini çağırmak çok daha kolay hale gelir.
Bu tür bir kursu tamamlamak genellikle entropi, bilgi kazancı, budama stratejileri, sınıflandırma ağaçları ve regresyon ağaçları arasındaki farklar ve ağaçların basit doğrusal modellerden ne zaman daha iyi performans gösterdiği ve ne zaman en iyi seçim olmayabileceği konularında bilgi sahibi olduğunuz anlamına gelir. Bu temel beceriler, üretim ortamlarında güçlendirilmiş ağaçlar, rastgele ormanlar veya gradyanla güçlendirilmiş karar ağaçları gibi daha karmaşık topluluklar oluşturmaya başlamadan önce tam olarak ihtiyacınız olan şeylerdir.
Saf JavaScript kullanarak tıklanabilir bir karar ağacı oluşturma
Somut probleminize geri dönelim: Çizilmiş bir karar ağacınız var ve herhangi bir çerçeve kullanmadan, tercihen CodePen benzeri, üzerinde değişiklik yapabileceğiniz, saf JavaScript ile yazılmış tıklanabilir bir prototip istiyorsunuz. Birçok kişi, ağaç yapılarını görselleştiren ve "Üst öğeleri göster" veya "Geri" gibi kullanıcı deneyimi özellikleri sağlayan eski örnekler gibi demolar buluyor ve kod satırlarını kaldırmanın aniden tüm ağacın kaybolmasına neden olmasıyla kafaları karışıyor.
Görünüşte ilgisiz parçaları çıkardığınızda bir ağacın kaybolmasının temel nedeni, bu parçaların genellikle görselleştirmeyi başlatmaktan, oluşturmaktan veya güncellemekten sorumlu olmalarıdır. Örneğin, yalnızca ek kullanıcı arayüzü seçenekleri için olduğunu varsayarak olay dinleyicilerini ayarlayan veya oluşturma işlevini çağıran kodu silebilirsiniz, ancak aslında bu işlev yükleme sırasında ilk ağacı da oluşturur. Bunu kaldırdığınızda, ekranda artık hiçbir şey grafiği çizmez.
Düğümleriniz arasında gezinmek için yalnızca basit bir "Geri" düğmesine ihtiyacınız varsa, aslında karmaşık bir kütüphaneye ihtiyacınız yok; sadece ağacınızı JavaScript'te temsil etmenin temiz bir yoluna ve az miktarda DOM manipülasyonuna ihtiyacınız var. Yaygın bir yöntem, ağacı iç içe geçmiş bir nesne olarak saklamaktır; burada her düğümde bir soru veya başlık, bir alt öğe listesi ve isteğe bağlı olarak bir üst öğe referansı bulunur. Ardından, geçerli düğümü bir değişkende takip edersiniz ve kullanıcı her tıkladığında soruyu ve cevapları yeniden oluşturursunuz.
"Geri" işlevini uygulamak için, kullanıcının izlediği yolu bir diziye (bir yığına) kaydedebilir ve düğmeye tıklandığında önceki düğümü yığından çıkarabilirsiniz. Alternatif olarak, her düğüm doğrudan üst düğümüne referans verebilir, böylece geri dönmek currentNode = currentNode.parent olarak ayarlanıp yeniden render edilmesi kadar kolay olur. Bu yaklaşım basit veri yapıları kullanır ancak tam olarak istediğiniz kullanıcı deneyimi davranışını sağlar.
Mevcut bir CodePen'i değiştiriyorsanız, sayfa yüklendiğinde çalışan başlatma koduna ve düğmelere veya bağlantılara bağlı olay işleyicilerine dikkat edin. Bir fonksiyonu silmeden önce, nerede kullanıldığını araştırın: eğer ağaç için çizim rutinini çağıran tek yer buysa, onu korumanız veya alternatif bir fonksiyonla değiştirmeniz gerekecektir. Ayrıca, saf render mantığını ayrı bir fonksiyona ayırarak ve hem sayfa yüklemesinde hem de gezinme olaylarında çağırarak kodu yeniden düzenleyebilir, "ebeveynleri göster" gibi ilgisiz özellikleri ise güvenli bir şekilde kaldırabilirsiniz.
Saf JavaScript ile minimal bir şey istediğinizi belirttiğinize göre, sadece metin düğümleri ve seçim düğmeleri içeren çok küçük bir prototiple başlamayı düşünebilirsiniz. Temel navigasyon kusursuz çalışmaya başladığında ve "Geri" işlevi beklendiği gibi davrandığında, adım adım geliştirebilirsiniz: CSS stilleri ekleyebilir, belki de düğümler arasında SVG bağlantıları oluşturabilir ve daha sonra daha gelişmiş düzenler için kütüphaneleri keşfedebilirsiniz.
Prototip kullanıcı arayüzü ağaçlarından gerçek regresyon modellerine
Kullanıcıların tıklaması için kodlanmış bir kullanıcı arayüzü karar ağacı ile verilerden öğrenen gerçek bir regresyon ağacı modeli arasında önemli bir fark vardır, ancak kavramsal yapıları aynıdır. Her iki durumda da koşullara bağlı düğümler, yanıtlara dayalı dallar ve bir öneri veya sayı gibi bir sonuç üreten yapraklar bulunur.
El yapımı bir arayüz için, tüm soruları ve sonuçları kendiniz tasarlarsınız ve böylece öğrenme algoritmasının rolünü üstlenirsiniz. Bunun aksine, makine öğrenimi bağlamında, gradyan artırma gibi bir algoritma, entropi, bilgi kazancı veya varyans azaltma gibi kriterler doğrultusunda, veri kümesinden bu bölmeleri öğrenir. Ağacı doğrudan belirtmezsiniz; bunun yerine örnekler verirsiniz ve algoritmanın yapıyı keşfetmesine izin verirsiniz.
Pratik bir iş akışı, öncelikle soruna ilişkin mevcut anlayışınıza uyan kullanıcı arayüzü ağacını uygulamak ve daha sonra gerçek dünya verilerini topladıkça, elle tasarlanmış mantığı öğrenilmiş bir modelle değiştirmektir. Bu model Python veya Azure Machine Learning'de eğitilebilir, JSON veya başka bir taşınabilir formatta dışa aktarılabilir ve ardından JavaScript uygulamanız tarafından yüklenebilir. Her ağaç veya topluluk, ön uç uygulamanızın tahminler üretmek veya kullanıcı için bir açıklama oluşturmak üzere gezindiği iç içe nesneler olarak temsil edilebilir.
Bazı ürünlerde ekipler her iki yaklaşımı da birleştirir: sayısal bir puan veya öneri hesaplamak için öğrenilmiş bir model ve arayüzde soruların nasıl sorulacağını yapılandırmak için ayrı bir insan tarafından tasarlanmış ağaç yapısı. Örneğin, modeliniz başarı olasılığını tahmin edebilirken, kullanıcı arayüzü ağacı soruları kullanıcılara doğal gelen ve kullanıcı araştırmasından elde ettiğiniz zihinsel modele uyan bir şekilde düzenleyebilir.
Entropi, bilgi kazancı, gradyan artırma, aşırı uyum ve budama gibi teorik yönleri anlamak, kullanıcı arayüzü yapınızın ne zaman yanıltıcı olabileceğini veya öğrenilmiş bir modelin ağacının ne zaman aşırı karmaşık olduğunu ve kısıtlamalara ihtiyaç duyduğunu anlamanıza yardımcı olur. Bu bilgiyle, yalnızca iyi görünmekle kalmayıp aynı zamanda altta yatan modelin nasıl karar verdiğini de doğru bir şekilde yansıtan görselleştirmeler ve etkileşimler tasarlayabilirsiniz.
Özetle, karar ağaçları görsel tasarım, sezgisel akıl yürütme ve titiz makine öğrenimi arasında özellikle kullanışlı bir köprü sunar; bu nedenle Azure Machine Learning gibi kurslarda, rozetlerde ve platformlarda bu kadar öne çıkarılmaktadırlar. Temel kavramları kavradıktan ve birkaç basit JavaScript prototipiyle pratik yaptıktan sonra, güçlendirilmiş regresyon ağaçları ve rastgele ormanlar gibi daha gelişmiş topluluk algoritmalarını keşfetmek ve bu modelleri gerçek dünya web uygulamalarına kaybolmuş hissetmeden entegre etmek için güçlü bir konumda olacaksınız.
