Makine Öğrenimi ve Sinir Ağları - sayfa 69

 

5.4 Scikit-learn'e Giriş (L05: Scikit-Learn ile Makine Öğrenimi)



5.4 Scikit-learn'e Giriş (L05: Scikit-Learn ile Makine Öğrenimi)

Nispeten kısa olan bu videoda amaç, scikit-learn ile makine öğrenimini tanıtmaktır. Scikit-learn, çeşitli makine öğrenimi görevleri için kapsamlı bir araç ve algoritma seti sağlayan, Python'da yaygın olarak kullanılan bir makine öğrenimi kitaplığıdır. Daha önce k-en yakın komşu (KNN) dersleri bağlamında scikit-learn görmüş olabilirsiniz, ancak bu video bir adım geriye gitmeyi ve kütüphaneyi düzgün bir şekilde tanıtmayı amaçlamaktadır.

Bu kısa videodan sonra, scikit-learn kullanılarak eğitim veri setinin hazırlanmasına daha derinlemesine değinen daha uzun bir video olacak. Bu, veri hazırlamayı geleneksel yaklaşımlara kıyasla daha kolay ve verimli hale getiren teknikleri ve araçları kapsayacaktır.

Sonraki videoda, scikit-learn ardışık düzenlerini kullanarak ön işleme tekniklerini birleştirme, makine öğrenimi sınıflandırıcı uydurma ve eğitim gibi scikit-learn'deki bazı harika kavramları keşfedeceğiz. Bu, daha akıcı ve verimli bir iş akışı sağlar.

Şimdi makine öğrenimini scikit-learn ile daha ayrıntılı olarak tartışalım. Scikit-learn, köklü itibarı, geniş kullanıcı tabanı ve kullanıcı dostu doğası nedeniyle Python için ana makine öğrenimi kitaplığı olarak kabul edilir. Tutarlı ve sezgisel bir API sunan, iyi tasarlanmış bir kitaplıktır. Scikit-learn, aynı zamanda aktif olarak sürdürülür ve düzenli olarak güncellenir; çok sayıda katılımcı, onu makine öğrenimi görevleri için sağlam ve güvenilir bir seçim haline getirir.

Scikit-learn'ün öncelikle geleneksel makine öğrenimi tekniklerine odaklandığını ve derin öğrenme amaçlı olmadığını belirtmek önemlidir. Derin öğrenme, kendi özel kütüphaneleri olan ayrı bir alandır. Derin öğrenme için genellikle TensorFlow veya PyTorch gibi diğer kitaplıklar kullanılır. Ancak, geleneksel makine öğrenimi görevleri için scikit-learn genellikle başvurulacak kitaplıktır.

Scikit-learn, ilk sürümü 2007'ye dayanan bir süredir ortalıkta dolaşıyor. Yaşına rağmen, popüler ve aktif bir şekilde sürdürülen bir kütüphane olmaya devam ediyor. David Cournapeau'nun bir Google Summer of Code projesi olarak başladı ve zaman içinde diğer birçok geliştiriciden katkı aldı. GitHub'da 1.875'ten fazla katılımcı ve yaklaşık 150.000 kullanıcıyla, scikit-learn'ün önemli topluluk desteğine sahip, oldukça saygın bir kitaplık olduğu açıktır.

Dokümantasyon, öğreticiler ve diğer yardımcı kaynakları içeren resmi scikit-learn web sitesini bulabilirsiniz. Araştırma projelerinizde scikit-learn kullanıyorsanız, geliştirilmesi için harcanan çabayı takdir ederek kütüphaneyi referans olarak belirtmek iyi bir uygulamadır.

Scikit-learn'ün Estimator API'sini anlamak için ana bileşenlerini inceleyelim. Estimator API, denetimli öğrenme görevleri için kullanılır ve regresyon analizi için regresörler ve sınıflandırma görevleri için sınıflandırıcılar içerir. Scikit-learn kullanırken, genellikle sınıfın yapıcısında ayarlanan belirli hiperparametrelerle bir tahmin edici başlatırsınız.

Uydurma işlemi bir tahminci için çok önemlidir. Başlatmadan sonra, eğitim verilerini (özellikleri) ve bunlara karşılık gelen etiketleri sağlayarak uygun yöntemi çağırmanız gerekir. Uyum yöntemi, tahminciyi verilen veriler üzerinde eğiterek daha sonra tahminlerde bulunmasını sağlar. Uydurma işlemi sırasında, tahmin ediciye, model uydurma sırasında oluşturulduklarını belirten bir alt çizgi ile gösterilen belirli öznitelikler atanır.

Model yerleştirildikten sonra, yeni veriler üzerinde tahminler yapmak için tahmin yöntemini kullanabilirsiniz. Tahmin yöntemi, test verilerini (eğitim verileriyle aynı özelliklere sahip) girdi olarak alır ve tahmin edilen etiketleri döndürür.

Ek olarak, scikit-learn, modelin performansını hesaplayan bir puanlama yöntemi sağlar. Sınıflandırıcılar için genellikle doğruluğu temsil ederken, regresörler için tipik olarak belirleme katsayısını (R^2 puanı) hesaplar. Bu yöntem, modelin performansını değerlendirmek için uygun bir yol olarak hizmet eder.

Bu temel bileşenlere ek olarak scikit-learn, makine öğrenimi iş akışınızı geliştirmek için çok çeşitli ön işleme teknikleri ve yardımcı programlar da sunar.

Makine öğreniminin önemli bir yönü, ham verilerin bir modeli eğitmek için uygun bir biçime dönüştürülmesini içeren veri ön işlemesidir. Scikit-learn, özellik ölçeklendirme, eksik değerleri işleme, kategorik değişkenleri kodlama ve daha fazlası gibi görevleri yerine getirebilen çeşitli ön işleme modülleri sağlar.

Örneğin, StandardScaler sınıfı, ortalamayı çıkararak ve birim varyansa ölçeklendirerek özellikleri standartlaştırmak için kullanılabilir. Bu, algoritmaların daha hızlı yakınsamasına ve daha doğru sonuçlar üretmesine yardımcı olduğundan, farklı ölçeklere sahip özelliklerle çalışırken önemlidir.

Bir başka kullanışlı ön işleme tekniği de kayıp değerlerin işlenmesidir. SimpleImputer sınıfı, karşılık gelen özelliklerin ortalama, medyan veya en sık değerlerini kullanmak gibi, eksik değerleri uygun alternatiflerle değiştirmek için stratejiler sağlar.

Kategorik değişkenlerle uğraşırken scikit-learn, OneHotEncoder ve LabelEncoder sınıflarını sunar. LabelEncoder kategorik etiketleri sayısal değerlere dönüştürürken, OneHotEncoder kategorik özellikleri ikili vektör temsiline dönüştürerek algoritmaların kategorik verilerle etkili bir şekilde çalışmasını sağlar.

scikit-learn, makine öğrenimi iş akışınızı kolaylaştırmak için işlem hatları adı verilen güçlü bir araç sağlar. Bir işlem hattı, birden çok ön işleme adımını ve bir makine öğrenimi modelini tek bir nesnede birleştirerek tüm iş akışını tutarlı bir şekilde yönetmeyi ve uygulamayı kolaylaştırır.

Ardışık hatlar, aynı ön işleme adımlarının hem eğitim hem de test veri kümelerine tutarlı bir şekilde uygulanmasını sağlayarak veri sızıntısını ve olası hataları önler. Tüm ardışık düzen nesnesini kaydedebileceğiniz ve bireysel ön işleme adımları hakkında endişelenmeden yeni veriler üzerinde yeniden kullanabileceğiniz için dağıtım sürecini de basitleştirirler.

Scikit-learn'ün ardışık düzen işlevini kullanarak, istediğiniz makine öğrenimi modeliyle ölçekleme, eksik değerleri atama ve kategorik değişkenleri kodlama gibi birden çok ön işleme tekniğini birbirine zincirleyebilirsiniz. Bu, makine öğrenimi projenizin temel yönlerine odaklanmanıza olanak tanıyan daha akıcı ve verimli bir iş akışı sağlar.

Scikit-learn, lineer regresyon, lojistik regresyon, destek vektör makineleri, karar ağaçları, rastgele ormanlar, gradyan artırma ve çok daha fazlasını içeren çok çeşitli makine öğrenimi algoritmalarını destekler. Her algoritma, sığdırma, tahmin etme ve puanlama gibi tutarlı yöntemlerle bir tahmin edici sınıfı olarak uygulanır.

Görevinize uygun algoritmayı seçmek için scikit-learn, model seçimi ve değerlendirmesi için çeşitli araçlar sağlar. Bunlar, çapraz doğrulama, hiperparametre ayarı ve model değerlendirme ölçümleri için teknikleri içerir. Çapraz doğrulama, verileri çoklu tren-test bölümlerine bölerek, modeli verilerin farklı alt kümelerinde eğiterek ve değerlendirerek modelinizin performansını değerlendirmenize yardımcı olur.

Hiperparametre ayarı, bir modelin hiperparametreleri için en uygun değerlerin bulunmasını içerir; bunlar, verilerden öğrenilmeyen ancak eğitimden önce ayarlanan parametrelerdir. Scikit-learn, en iyi hiperparametre değerlerini arama sürecini otomatikleştirmek için ızgara arama ve rastgele arama gibi yöntemler sağlar.

Doğruluk, kesinlik, hatırlama, F1 puanı ve ROC eğrisi altındaki alan gibi model değerlendirme ölçütleri, modelinizin farklı görevlerdeki performansını değerlendirmek için çok önemlidir. Scikit-learn, kolayca hesaplanabilen ve karşılaştırılabilen çok çeşitli metrikler sunar.

Scikit-learn, Python'da çeşitli makine öğrenimi görevleri için çok çeşitli araçlar ve algoritmalar sağlayan güçlü ve popüler bir makine öğrenimi kitaplığıdır. Kullanıcı dostu API'si, kapsamlı belgeleri ve aktif topluluğu, onu hem yeni başlayanlar hem de deneyimli uygulayıcılar için mükemmel bir seçim haline getiriyor. Verilerinizi önceden işlemeniz, işlem hatları oluşturmanız, modeller seçmeniz veya performansı değerlendirmeniz gerekip gerekmediğine bakılmaksızın, scikit-learn işinizi verimli ve etkili bir şekilde yapmanız için ihtiyaç duyduğunuz araçlara sahiptir.

5.4 Intro to Scikit-learn (L05: Machine Learning with Scikit-Learn)
5.4 Intro to Scikit-learn (L05: Machine Learning with Scikit-Learn)
  • 2020.09.30
  • www.youtube.com
Finally! It's about time to introduce my favorite machine learning library! Jupyter Notebook: https://github.com/rasbt/stat451-machine-learning-fs20/blob/ma...
 

5.5 Scikit-learn Transformer API (L05: Scikit-Learn ile Makine Öğrenimi)


5.5 Scikit-learn Transformer API (L05: Scikit-Learn ile Makine Öğrenimi)

Videoda sunum yapan kişi, scikit-learn yardımcı programlarını kullanarak bir eğitim veri seti hazırlama sürecini derinlemesine inceliyor ve önceki bir videoda tartışılan tahmin aracı API'si ile yakından ilişkili olan dönüştürücü API'sini tanıtıyor. Tahmin aracı API'si öncelikle sınıflandırıcılar ve regresyon analizi modelleri gibi denetimli öğrenme modelleri için kullanılırken, dönüştürücü API'si veri dönüşümleri için tasarlanmıştır.

Sunucu, bir veri setinin tipik olarak bir eğitim seti ve bir test seti olmak üzere iki alt kümeye bölünmesini içeren rastgele alt örnekleme ile ilgili sorunları ele alarak başlar. Veri setini rastgele bölmenin, sınıf etiketlerinin dağılımında değişikliklere yol açabileceğini, bunun da hem eğitim hem de test setlerinde sınıfların yanlış temsil edilmesine yol açabileceğini açıklıyorlar. Bu zorluğun üstesinden gelmek için sunum yapan kişi, alt kümelerde sınıf dağılımının veya oranlarının korunmasını sağlayan tabakalı bölmeyi kullanmayı önerir. Scikit-learn'ün model_selection alt modülünden train_test_split işlevini kullanarak tabakalı bölmenin nasıl elde edileceğini göstermeye devam ediyorlar.

Sunucu devam ederken, iki tekniğe özel olarak odaklanarak veri normalleştirme kavramını derinlemesine inceler: min-maks ölçeklendirme ve standardizasyon. Min-maks ölçeklendirme, bir özelliğin tüm değerleri 0 ila 1 aralığında olacak şekilde ölçeklenmesini içerir. Sunum yapan kişi, özellik sütunundaki her değerin minimum özellik değerine göre çıkarılmasını ve ardından bölmeyi gerektiren min-maks ölçeklendirme formülünü sağlar. maksimum ve minimum özellik değerleri arasındaki farka göre.

Buna karşılık, standardizasyon, bir özelliğin ortalama sıfır ve standart sapma bir olacak şekilde dönüştürülmesini içerir. Sunum yapan kişi, özellik sütunundaki her bir değeri özelliğin ortalamasından çıkarmak ve ardından özelliğin standart sapmasına bölmekten oluşan standardizasyon formülünü açıklar. Standardizasyonun makine öğreniminde daha yaygın olarak kullanıldığını ve belirli optimizasyon algoritmaları için özellikle yararlı olduğunu belirtiyorlar.

Sunucu, minimum-maks ölçekleme ve standardizasyonun pratik uygulamasını göstermek için oyuncak özellik sütunlarını kullanan örnekler sağlar. Özellikler merkezde olduğu ve yaklaşık birim varyansa sahip olduğu sürece, örneklem veya popülasyon standart sapması arasındaki seçimin makine öğrenimi sonuçlarını önemli ölçüde etkilemediğini vurgularlar. Ek olarak, doğrulama ve test setleri görünmeyen verileri temsil ettiğinden, doğrulama ve test setlerini ölçeklendirmek için eğitim setinden hesaplanan parametrelerin (ortalama ve standart sapma) kullanılmasının önemini vurgularlar.

Video, makine öğreniminde veri dönüştürme ve işleme için çeşitli teknikleri keşfetmeye devam ediyor. Standardizasyon gibi basit prosedürler için, dönüşümlerin ayrı kitaplıklara veya gelişmiş tekniklere dayanmadan manuel olarak gerçekleştirilmesinin mümkün olduğunu kabul eder. Ancak, özellik seçimi, özellik boyutluluk azaltma ve özellik çıkarma gibi daha karmaşık dönüşümler için Transformer API gibi araçların kullanılması daha fazla kolaylık ve verimlilik sağlayabilir.

Daha sonra sunum yapan kişi, kategorik verilerle ilgilenmeye odaklanır. Üç özellik sütunu ve bir etiket sütunundan oluşan bir oyuncak veri seti sunarlar ve kategorik değişkenlerin iki tipte sınıflandırılabileceğini vurgularlar: sıralı ve nominal. Sıralı değişkenler belirli bir düzene veya hiyerarşiye sahipken, nominal değişkenler yoktur. Bir örnek olarak, M, L ve XXL gibi tişört bedenlerinin net bir düzen sergilediği bir sıra değişkeni olarak "beden" sütununu vurguluyorlar. Sıralı değişkenleri işlemek için video, değerleri sayısal temsillere dönüştürmek için bir eşleme sözlüğü kullanmanızı önerir.

Öte yandan video, nominal kategorik verilere örnek olarak sınıf etiketlerini sunar. Sınıf etiketleri arasında doğal bir düzen olmadığından, sunum yapan kişi, her etikete benzersiz tamsayı değerleri atamak için etiket kodlayıcının kullanılmasını önerir. Etiket kodlayıcı, daha sonra dize etiketlerini tamsayı etiketlerine dönüştürmek için kullanılan bir eşleme sözlüğü oluşturmak için sınıf etiketi sütununa takılır.

Herhangi bir sıranın ima edilmediği "renk" gibi nominal özellik sütunları için, etiket kodlayıcının kullanılması yanıltıcı bilgilere yol açabilir. Bu gibi durumlarda video, uygun bir alternatif olarak tek etkin kodlamayı sunar. Bu teknik, nominal özellik sütunundaki her bir farklı değer için yeni bir özellik sütunu oluşturmayı ve belirli bir değerin varlığını veya yokluğunu belirtmek için 0'lar ve 1'ler atamayı içerir. Ortaya çıkan özellik sütunlarından birini bırakmanın, temel bilgileri kaybetmeden fazlalığı ortadan kaldırabileceğinden bahsedilir.

Video, eksik verilere kısaca değiniyor ve bunları ele almak için bazı temel yaklaşımlar öneriyor. Stratejilerden biri, rastgele meydana gelmeleri ve sistematik bir soruna işaret etmemeleri durumunda, eksik değerleri içeren satırları veya sütunları bırakmayı içerir. Bu, pandalar kitaplığında dropna() yöntemi kullanılarak gerçekleştirilebilir. Diğer bir yaklaşım, SimpleImputer transformatörü gibi araçlar kullanarak, boşlukları ortalama veya medyan gibi istatistiksel ölçümlerle doldurarak eksik verileri yüklemektir. Ancak video, istenmeyen önyargılara yol açabileceğinden, isnat etmenin dikkatlice düşünülmesi gerektiği konusunda uyarıyor.

Ek olarak video, sorunu denetimli bir öğrenme görevi olarak ele alarak eksik değerleri tahmin etme olasılığından bahsediyor. Bu senaryoda, eksik özellik sütunu hedef değişken olarak kabul edilebilir ve eksik veri içermeyen satırlar, bir regresyon modeline uyması için eğitim verileri olarak kullanılabilir.

Video, bir eğitim veri seti hazırlamanın önemi, katmanlı bölme uygulaması ve min-maks ölçekleme ve standardizasyon kullanılarak verilerin normalleştirilmesi dahil olmak üzere veri dönüştürme tekniklerine kapsamlı bir genel bakış sağlar. Ayrıca, kategorik verilerin işlenmesini, sıralı ve nominal değişkenler arasında ayrım yapılmasını kapsar ve eşleme sözlükleri, etiket kodlayıcılar ve tek-sıcak kodlama gibi teknikleri sunar. Ek olarak, video, eksik verileri kısaca ele alır ve eksik değerlerin kaldırılması veya atfedilmesi gibi yaklaşımların ana hatlarını çizerken, aynı zamanda denetimli öğrenme yoluyla kayıp değerleri tahmin etme olasılığından da bahseder.

5.5 Scikit-learn Transformer API (L05: Machine Learning with Scikit-Learn)
5.5 Scikit-learn Transformer API (L05: Machine Learning with Scikit-Learn)
  • 2020.09.30
  • www.youtube.com
After talking about scikit-learn estimators (like classifiers), this video now introduced the concept of Transformers in scikit-learn. No, we are not talking...
 

5.6 Scikit-learn İşlem Hatları (L05: Scikit-Learn ile Makine Öğrenimi)



5.6 Scikit-learn İşlem Hatları (L05: Scikit-Learn ile Makine Öğrenimi)

Pekala millet, nihayet Ders 5'in son bölümüne ulaştık ki bu bence en ilginç olanı: kutsal öğrenme işlem hatları. Bu işlem hatları, veri işleme ve tahmin adımlarını sorunsuz bir şekilde birleştirmemize izin veren inanılmaz derecede kullanışlı nesneler veya sınıflardır. Size bir genel bakış sağlamak için, boru hatlarının nasıl çalıştığına dair bir akış şeması sunacağım, ancak henüz tüm ayrıntılara girmeyeceğim.

Bir işlem hattını dönüştürücü API'si olan bir tahmin aracı olarak düşünün. Bir tahminciye benzer şekilde, bir boru hattının eğitim setinde kullanabileceğimiz bir uyum yöntemi vardır. Dahili olarak, ardışık düzen birden çok sığdırma ve dönüştürme adımından geçer ve sonunda son sığdırma adımına ulaşır. Ardışık hattımızda tanımladığımız şeye bağlı olarak, veri ölçeklendirme (örn. standardizasyon veya min-maks ölçeklendirme), boyut azaltma, öğrenme algoritması eğitimi ve test setinde kullanabileceğimiz tahmine dayalı bir model döndürme gibi çeşitli görevleri gerçekleştirebilir. .

Test setinde tahmin yöntemini çağırdığımızda, tahmin edici API'sine benzer şekilde, ardışık düzen, eğitim setinde gerçekleştirilen aynı ölçeklendirmeyi uygulamak için dönüştürme adımını dahili olarak kullanır. Bu, veri işlemede tutarlılığı sağlar. Son olarak, ardışık düzen, bir sınıflandırıcı durumunda sınıf etiketlerini döndürmek gibi tahminler yapmak için uygun modeli kullanır.

Bunu bir ardışık düzenin basit bir kod örneğiyle göstereyim. Burada, kutsal öğrenmenin sklearn.pipeline alt modülünden make_pipeline işlevini kullanarak bir işlem hattı oluşturuyorum. Bu, işlem hatları oluşturmanın uygun bir yoludur. Bu örnekte, standart bir ölçekleyici ve bir K-en yakın komşu sınıflandırıcıdan oluşan temel bir boru hattı inşa ediyorum. Önceki videoda tartıştığımız gibi standart ölçekleyici, verileri sıfır ortalama ve birim varyansa sahip hale getirerek standartlaştırır. Standart ölçekleyiciyi ve K-en yakın komşu sınıflandırıcısını işlem hattının bileşenleri olarak başlatıyoruz.

İşlem hattı oluşturulduktan sonra, işlem hattını eğitim verileri üzerinde eğitmek için fit yöntemini kullanabiliriz. Ardından, test setinde tahminler yapmak için tahmin yöntemini kullanabiliriz. Fit dediğimiz zaman, pipe eğitim verilerinden ortalama ve standart sapmayı öğrenmek için önce standart ölçekleyiciyi uygular. Daha sonra bu bilgiyi, bir sonraki adım olan K-en yakın komşu sınıflandırıcıya geçirilen verileri ölçeklendirmek için kullanır. Sınıflandırıcı, standartlaştırılmış eğitim setini alır ve öğrenme algoritmasını gerçekleştirir.

Tahmin sırasında, uygun bir adıma gerek olmaması dışında aynı süreç gerçekleşir. Ardışık düzen, test verilerini ölçeklendirmek için eğitim sırasında öğrenilen istatistikleri yeniden kullanır ve tahminler yapmak için öğrenilen sınıflandırıcıyı uygular.

Özetlemek gerekirse, bir ardışık düzen, tutarlı bir iş akışı oluşturmak için dönüştürücüler ve tahmin ediciler gibi birden çok nesneyi birbirine zincirlememize olanak tanır. Makine öğrenimi görevlerinde veri işleme ve tahmin adımlarını işlemek için uygun ve verimli bir yol sağlar.

Şimdi, model seçimi için basit uzatma yöntemini uygulayarak işlem hattına bir göz atalım. Model seçimi, en iyi modeli seçmek için hiperparametrelerin ayarlanmasını içerir. Holdout yönteminde, verileri bir eğitim seti ve bir test seti olarak ayırırız. Eğitim seti içinde, onu öğrenme için bir alt kümeye ve çeşitli hiperparametre ayarlarıyla farklı modelleri değerlendirdiğimiz doğrulama için başka bir alt kümeye ayırdık.

Scikit-learn'de, ızgara arama adı verilen bir yöntem kullanarak, tutma yöntemini ve hiperparametre ayarını gerçekleştirebiliriz. Izgara araması, değerlendirmek istediğimiz hiperparametre kombinasyonlarını tanımlayan bir parametre ızgarası oluşturmayı içerir. Örneğin k-en yakın komşu durumunda, komşu sayısı (k) ve mesafe ölçüsü (p) için farklı değerler düşünebiliriz. Izgara araması, tüm olası kombinasyonları yineleyerek, modelleri eğitim setine uydurur ve doğrulama setinde değerlendirir.

Kılavuz arama tipik olarak K-katlı çapraz doğrulama ile kullanılsa da, bu örnekte uzatma yöntemine odaklanacağız. Bir ardışık düzen kullanarak uzatma yöntemini ve ızgara aramayı uygulamak için, scikit-learn'deki GridSearchCV sınıfını kullanabiliriz. Bu sınıf, parametre ızgarasını ve işlem hattını tanımlamamıza izin verir ve modelleri uydurma ve değerlendirme sürecini yönetir.

GridSearchCV'nin bir işlem hattıyla nasıl kullanılacağını gösteren örnek bir kod parçacığını burada bulabilirsiniz:

 from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline

# Load the iris dataset
iris = load_iris()
X = iris.data
y = iris.target

# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size= 0.2 , random_state= 42 )

# Create a pipeline
pipeline = make_pipeline(StandardScaler(), KNeighborsClassifier())

# Define the parameter grid for grid search
param_grid = { 'kneighborsclassifier__n_neighbors' : [ 3 , 5 , 7 ],
               'kneighborsclassifier__weights' : [ 'uniform' , 'distance' ]}

# Create a GridSearchCV object
grid_search = GridSearchCV(pipeline, param_grid, cv= 5 )

# Fit the models and perform grid search
grid_search.fit(X_train, y_train)

# Print the best parameters and best score
print( "Best Parameters: " , grid_search.best_params_)
print( "Best Score: " , grid_search.best_score_)

# Evaluate the best model on the test set
best_model = grid_search.best_estimator_
accuracy = best_model.score(X_test, y_test)
print( "Test Accuracy: " , accuracy)
Bu örnekte, Iris veri setini yükleyerek ve bunu train_test_split işlevini kullanarak eğitim ve test setlerine bölerek başlıyoruz. Ardından, make_pipeline kullanarak, veri ölçeklendirme için bir StandardScaler ve tahmin edici olarak bir KNeighborsClassifier'dan oluşan bir ardışık düzen oluştururuz.

Ardından, değerlendirmek istediğimiz farklı hiperparametre kombinasyonlarını belirten grid param_grid parametresini tanımlarız. Bu durumda, K-en yakın komşu sınıflandırıcısı için komşu sayısını (n_neighbors) ve ağırlık fonksiyonunu (ağırlıklar) değiştiriyoruz. Kılavuzdaki parametre adlarının önüne ardışık düzen bileşeninin adının ve ardından çift alt çizginin (__) geldiğini unutmayın.

Boru hattını, parametre ızgarasını ve istenen sayıda çapraz doğrulama katını (cv) geçirerek bir GridSearchCV nesnesi oluşturuyoruz. GridSearchCV sınıfı, işlem hattını eğitim verilerine uydurarak ve doğrulama kümesindeki modelleri değerlendirerek ızgara aramasını otomatik olarak gerçekleştirir.

Grid araması tamamlandıktan sonra GridSearchCV nesnesinin best_params_ ve best_score_ özniteliklerini kullanarak en iyi parametrelere ve en iyi skora erişebiliriz. Hangi hiperparametre kombinasyonunun en iyi performansı verdiğini görmek için bu değerleri yazdırıyoruz.

Son olarak, GridSearchCV nesnesinin best_estimator_ özelliğinden erişerek ve skor yöntemini kullanarak doğruluğu hesaplayarak test kümesindeki en iyi modeli değerlendiriyoruz.

Bu örnek, farklı hiperparametre ayarlarını verimli bir şekilde keşfetmek ve uzatma yöntemini kullanarak en iyi modeli seçmek için ardışık düzenlerden ve kılavuz aramadan nasıl yararlanabileceğimizi gösterir. Veri işleme adımlarını ve model eğitimini bir ardışık düzende birleştirerek, makine öğrenimi iş akışını kolaylaştırabilir ve farklı bileşenler ve hiperparametrelerle kolayca deneyler yapabiliriz.

5.6 Scikit-learn Pipelines (L05: Machine Learning with Scikit-Learn)
5.6 Scikit-learn Pipelines (L05: Machine Learning with Scikit-Learn)
  • 2020.09.30
  • www.youtube.com
I aleady mentioned that scikit-learn is a well-designed Python library, right?! In this video, I will show you another reason why that's true. Scikit-learn i...
 

6.1 Karar Ağaçlarına Giriş (L06: Karar Ağaçları)



6.1 Karar Ağaçlarına Giriş (L06: Karar Ağaçları)

Son olarak, yeni bir konuyu ele alacağız - karar ağaçları. Karar ağacı algoritmaları, sınıflandırıcılar ve regresyon modelleri için yinelemeli yukarıdan aşağıya oluşturma yöntemleri olarak düşünülebilir. Videoların yönetilebilir olması ve çok uzun olmaması için dersi yedi bölüme ayırdım.

İlk bölümde, karar ağaçlarına, bunların kavramsal temsillerine kısa bir genel bakış sunacağız ve temel terminolojiyi tanıtacağız. Daha sonra, özyinelemeli algoritmaları karar ağaçları bağlamında tartışacağız ve özyinelemeli algoritmaların ne olduğunu kısaca açıklayacağız. Bu anlayış, karar ağaçlarının çalışma zamanı karmaşıklığını (Big O) analiz etmemize yardımcı olacaktır.

Devam ederek, farklı karar ağaçları türlerini keşfedeceğiz. Şu anda, ikinci öğrenci Leo Breiman tarafından geliştirilen CART (Sınıflandırma ve Regresyon Ağaçları) karar ağacı algoritmasını uyguluyor. Ancak ID3 ve C4.5 gibi her birinin kendine göre avantajları ve dezavantajları olan başka algoritmalar da vardır. Bu farklı yöntemlere değineceğiz ve muhtemelen ID3 karar ağacını uygulayan bir ev ödevi verebiliriz.

Derste, karar ağaçları için kullanılan çeşitli bölme kriterlerini de inceleyeceğiz. Şu anda ikinci öğrenci, tipik olarak Gini kirliliğine dayanan CART'ı kullanıyor. Ancak, farklı bölme kriterlerini karıştırmaya ve eşleştirmeye izin verir. Bu bölme kriterleri, bir karar ağacını bölmek için iyi bir özelliği belirlemek için kullanılan işlevlere veya ölçülere atıfta bulunur. Gini kirlilik ve entropi kriterlerini ele alacağız ve ağaç büyümesini ve parçalanma kalitesini değerlendirirken neden yanlış sınıflandırma hatası yerine bunların tercih edildiğini tartışacağız.

Bu ayrıntıları ele aldıktan sonra, hesaplamalı çalışma süresi ve sınıflandırma doğruluğu açısından karar ağaçlarını daha verimli hale getirebilecek iyileştirmeleri inceleyeceğiz. Ayrıca, fazla uydurmanın zorluğunu ele alacağız ve bunu hafifletecek teknikleri keşfedeceğiz.

Son olarak, popüler bir makine öğrenimi kitaplığı olan scikit-learn'de karar ağaçlarıyla çalışmayı gösteren bir kod örneği vereceğiz. Bu pratik örnek, karar ağaçları ve bunların uygulanması konusundaki anlayışınızı sağlamlaştırmaya yardımcı olacaktır.

Şimdi karar ağacının temel konseptine geçelim. Kesin olarak bir makine öğrenimi sorunu olmasa da karar ağaçları, karar vermeyi içeren günlük yaşam senaryolarıyla ilgilidir. Örneğin, belirli bir anda ne yapacağımıza karar verebiliriz. Yapacak işlerimiz varsa, içeride kalmayı ve işi tamamlamayı seçebiliriz. Tersine, bekleyen bir işimiz yoksa, hava durumuna bağlı olarak dışarı çıkmayı düşünebiliriz.

Diyelim ki hava güneşliyse ve çok soğuk değilse plaja gitmeyi tercih edebiliriz. Ancak hava bulutluysa bunun yerine koşuya çıkmayı tercih edebiliriz. Yağmur veya kar durumunda, arkadaşlarımıza uygunluklarını sorabiliriz. Arkadaşlarımız meşgulse, içeride kalıp kitap okumak gibi faaliyetlerde bulunmaya karar verebiliriz. Öte yandan, arkadaşlarımız boşsa, sinemaya gitmek, çevrimiçi video oyunları oynamak veya çevrimiçi sohbet etmek gibi seçenekleri keşfedebiliriz.

Bu temel taslak, her düğümün bir soru veya karara karşılık geldiği ve dalların farklı seçeneklere yönlendirdiği bir karar ağacını temsil eder. Kök düğüm, ağaçtaki ilk soruyu veya kararı temsil ederken, yaprak düğümler nihai çıktılardır. İç düğümler, ağacın akışına yön veren ara kararlardır.

Ayrıca, bir karar ağacındaki düğümler, ikili veya çok kategorili düğümler olarak kategorize edilebilir. İkili düğümler yalnızca iki seçenek sunarken, çok kategorili düğümler ikiden fazla seçeneği destekler. Ancak, çok kategorili bölmeler, daha önce tartışıldığı gibi ikili bölmelere dönüştürülebilir.

Karar ağaçları, programlamadaki if-else ifadelerine benzer şekilde, kural kümeleri olarak da yorumlanabilir. Aslında, karar ağaçları kural setlerine dönüştürülebilir, ancak tersine çevirme her zaman mümkün değildir. Karar ağaçlarının bu özelliği, onları oldukça yorumlanabilir ve açıklanabilir kılar; bu da, hukuk ve tıbbi alanlar gibi yorumlanabilirlik ve açıklanabilirliğin önemli olduğu alanlarda çok önemlidir.

Bir karar ağacı oluşturmak için girdi örnekleri ve karşılık gelen çıktıları içeren bir veri setine ihtiyacımız var. Her örnek, bir dizi özellikten (öznitelikler veya öngörücüler olarak da bilinir) ve bir hedef değişkenden (tahmin etmek istediğimiz çıktı) oluşur. Karar ağacı algoritması, verileri bölmenin ve tahminlerde bulunmanın en iyi yolunu belirlemek için özellikleri ve bunların ilişkilerini analiz eder.

Bir karar ağacı oluşturma süreci, verileri her düğümde bölmek için en iyi özelliği seçmeyi içerir. Amaç, sınıflandırma doğruluğu açısından en fazla bilgi kazancını veya en iyi ayrımı sağlayan özelliği bulmaktır. Bu işlem tipik olarak, kök düğümden başlayarak ve yaprak düğümlere kadar devam ederek yinelemeli olarak gerçekleştirilir.

Algoritma her adımda, Gini safsızlığı veya entropi gibi farklı bölme kriterlerini değerlendirir. Gini safsızlığı, kümeden rastgele seçilen bir öğenin yanlış sınıflandırılma olasılığını ölçerken, entropi, kümeden rastgele seçilen bir öğenin sınıf etiketini tanımlamak için gereken ortalama bilgi miktarını ölçer. Bu kriterler, bir bölünmeden sonra ortaya çıkan alt kümelerin saflığını belirlemeye yardımcı olur.

Bölme için bir özellik seçildiğinde, veriler olası özellik değerlerine göre alt kümelere bölünür. Bu işlem, bir durdurma kriteri sağlanana kadar her bir alt küme için yinelemeli olarak tekrarlanır. Durdurma kriteri, maksimum ağaç derinliğine ulaşmak, bir yaprak düğümde minimum sayıda örneğe ulaşmak veya yaprak düğümlerinde belirli bir saflık düzeyine ulaşmak olabilir.

Eğitilmiş bir karar ağacı kullanarak yeni bir örnek için hedef değişkeni tahmin etmek için kök düğümden başlarız ve örneğin özellik değerlerine dayalı olarak uygun dalları takip ederek ağaçta aşağı ineriz. Sonunda, tahmin edilen çıktıyı sağlayan bir yaprak düğüme ulaşırız.

Karar ağaçlarının birçok avantajı vardır. Anlaşılması ve yorumlanması kolaydır, bu da onları karar verme sürecini görselleştirmek ve açıklamak için popüler bir seçim haline getirir. Hem sayısal hem de kategorik özellikleri işleyebilirler ve hem sınıflandırma hem de regresyon görevleri için kullanılabilirler. Karar ağaçları, bölme işlemi sırasında etkin bir şekilde işleyebildikleri için eksik değerlere ve aykırı değerlere karşı da dayanıklıdır.

Ancak karar ağaçlarının da bazı sınırlamaları vardır. Eğitim verilerine kolayca uyum sağlayabilirler, bu da görünmeyen örneklere genellemenin zayıf olmasına neden olur. Bu, budama teknikleri kullanılarak veya rastgele ormanlar veya gradyan artırma gibi topluluk yöntemleri kullanılarak hafifletilebilir. Karar ağaçları, eğitim verilerindeki küçük değişikliklere de duyarlıdır ve benzer veri kümeleri için farklı bölmeler oluşturulabilir. Ek olarak, karar ağaçları, özellikler arasındaki karmaşık ilişkileri yakalamakta zorlanabilir.

Sonuç olarak karar ağaçları, sınıflandırma ve regresyon görevleri için kullanılabilecek güçlü ve yorumlanabilir modellerdir. Verileri, düğümleri ve dalları olan bir ağaç yapısı olarak temsil ederek net bir karar verme çerçevesi sağlarlar. Bölme kriterlerinin ve durdurma kriterlerinin seçimi, fazla uydurmayı ele alan tekniklerle birlikte, doğru ve sağlam karar ağaçlarının oluşturulmasında önemli roller oynar.

6.1 Intro to Decision Trees (L06: Decision Trees)
6.1 Intro to Decision Trees (L06: Decision Trees)
  • 2020.10.04
  • www.youtube.com
Decision trees are one of the fundamental methods for machine learning on tabular data. Decision trees are the main algorithm behind popular methods such as ...
 

6.2 Özyinelemeli algoritmalar ve Big-O (L06: Karar Ağaçları)



6.2 Özyinelemeli algoritmalar ve Big-O (L06: Karar Ağaçları)

Bu videoda tartışmamız, böl ve fethet kavramıyla yakından bağlantılı olan özyinelemeli algoritmalar etrafında dönüyor. Böl ve fethet, bir problemi daha küçük alt problemlere ayırmayı, bunları ayrı ayrı çözmeyi ve ardından çözümleri birleştirmeyi içerir. Karar ağacı eğitimi ve tahmini ile çeşitli böl ve fethet algoritmaları bu kavramla bağlantılıdır. Özyineleme, tek yaklaşım olmasa da, böl ve fethet algoritmalarını uygulamak için kullanılan yaygın bir tekniktir.

Özyineleme fikrini kavramak için, Python'da uygulanan bir özyinelemeli algoritma örneğini inceleyelim. Tartışma amacıyla, ayrıntılarına girmeden önce amacını analiz etmenizi teşvik etmek için işlevin gerçek adını kasıtlı olarak gizledim. Bu işlevin neler yapabileceğini düşünmek için bir dakikanızı ayırmanızı tavsiye ederim. Davranışını anlamak için videoyu duraklatabilir veya hatta bir Jupyter not defterinde deneyebilirsiniz.

Analiz etmek için zaman ayırdığınızı varsayarsak, fonksiyonu birlikte keşfedelim. Bu özel işlev, Python listelerinde çalışır. Örneğin, [1, 2, 3] gibi bir liste düşünün. Bu fonksiyonun amacı bir dizi veya listenin uzunluğunu belirlemektir. Nasıl çalıştığını inceleyelim. İşlev, burada 'X' olarak gösterilen bir girdi alır ve iki koşulu kontrol eder. İlk olarak, listenin boş olup olmadığını kontrol eder. Öyleyse, işlev 0 döndürür çünkü boş bir listenin uzunluğu sıfırdır, bu da durma koşulu olarak işlev görür. Aksi takdirde, liste boş değilse işlev 1 döndürür ve kendisini daha küçük bir girişle çağırır.

Bu soyut görünüyorsa, adım adım inceleyelim. [1, 2, 3] gibi tam bir listeyle başladığımızı varsayalım. Başlangıçta işlev, listenin boş olup olmadığını kontrol eder, ki değildir. Sonuç olarak, 'else' ifadesine geçer, burada 1 döndürür ve tekrarlı olarak kendisini daha küçük bir girdiyle çağırır. Bu durumda, ilk öğeyi orijinal listeden kaldırdığımız için giriş [2, 3] olur. İşlemi tekrarlıyoruz: işlev tekrar 1 döndürür, kendisini yeni giriş [3] ile çağırır ve sonunda kendisini boş bir liste ile çağırır.

Boş listeye ulaşıldığında işlev, artık doğru olan 'if' koşulunu bir kez daha kontrol eder. Sonuç olarak 0 döndürür. İfadenin tamamını değerlendirdiğimizde 3 değerini elde ederiz. Dolayısıyla bu işlev, kendi tanımı içinde kendisini çağırdığı özyinelemeyi kullanarak bir dizinin uzunluğunu hesaplar. Özyinelemenin bilgisayar bilimi teorisinde kavramsal olarak zarif bir çözüm olmasına rağmen, uygulama için her zaman en pratik yaklaşım olmayabileceğini belirtmekte fayda var. Python'da özyineleme, kendi kendine arama sayısında sınırlamalara sahiptir ve aşırı büyük listeler Yığın Taşması hatasına neden olabilir.

Devam edelim, özyineleme kullanan başka bir örneği keşfedelim. Burada, hızlı sıralama algoritmasını kullanarak bir böl ve fethet problemini (bir listeyi veya diziyi sıralamak) ele alıyoruz. Önceki işleve benzer şekilde, hızlı sıralama, bir uygulama aracı olarak özyinelemeyi kullanır. Algoritma, işlevin diziyi ikiden az öğe içeriyormuş gibi döndürdüğü bir durdurma koşulu kullanır. Aksi takdirde, algoritma kodun ana bölümünü yürütür.

Hızlı sıralama nasıl çalışır? İlk önce, tipik olarak dizinin ilk elemanı olan bir pivot seçiyoruz. Ardından, iki yeni liste oluşturuyoruz: biri pivottan küçük öğeleri tutmak için, diğeri ise pivottan büyük öğeleri tutmak için. Pivotu hariç tutarak diziyi yineliyoruz ve her öğeyi pivot ile karşılaştırmasına göre daha küçük veya daha büyük listeye dağıtıyoruz. Ardından, pivotu merkezi öğe olarak kullanarak hem daha küçük hem de daha büyük listelerde yinelemeli olarak hızlı sıralamayı çağırırız. Sonunda,

özyinelemeli çağrılar, listeler ikiden az öğeye sahip olduğunda durma durumuna ulaşacaktır. Bu noktada, işlev yalnızca sıralanmış listeleri döndürür.

Süreci anlamak için bir örnek üzerinden gidelim. Sıralanmamış bir listemiz olduğunu varsayalım [7, 2, 5, 1, 9, 3]. Hızlı sıralama algoritması şu şekilde ilerleyecektir:

  1. Pivot, 7 olan ilk öğe olarak seçilir.
  2. Daha küçük ve daha büyük olmak üzere iki boş liste oluşturulur.
  3. Pivot hariç listeyi yineleyin:
    • 2, 7'den küçüktür, bu nedenle daha küçük listeye girer.
    • 5, 7'den küçüktür, bu nedenle daha küçük listeye girer.
    • 1, 7'den küçüktür, bu nedenle daha küçük listeye girer.
    • 9, 7'den büyüktür, bu nedenle daha büyük listeye girer.
    • 3, 7'den küçüktür, bu nedenle daha küçük listeye girer.
  4. Hem daha küçük hem de daha büyük listelerde yinelemeli olarak hızlı sıralama çağırın.
    • Daha küçük liste için: [2, 5, 1, 3]
      • Pivot olarak 2'yi seçin ve boş listeler oluşturun.
      • Listeyi yineleyin:
        • 5, 2'den büyüktür, bu nedenle daha büyük listeye girer.
        • 1, 2'den küçüktür, bu nedenle daha küçük listeye girer.
        • 3, 2'den büyüktür, bu nedenle daha büyük listeye girer.
      • Hem daha küçük hem de daha büyük listelerde yinelemeli olarak hızlı sıralama çağırın.
        • Daha küçük liste için: [1]
          • Listede ikiden az öğe vardır, bu nedenle olduğu gibi döndürülür.
        • Daha büyük liste için: [5, 3]
          • Pivot olarak 5'i seçin ve boş listeler oluşturun.
          • Listeyi yineleyin:
            • 3, 5'ten küçüktür, bu nedenle daha küçük listeye girer.
          • Hem daha küçük hem de daha büyük listelerde yinelemeli olarak hızlı sıralama çağırın.
            • Daha küçük liste için: [3]
              • Listede ikiden az öğe vardır, bu nedenle olduğu gibi döndürülür.
            • Daha büyük liste için: [5]
              • Listede ikiden az öğe vardır, bu nedenle olduğu gibi döndürülür.
      • Nihai sıralanmış daha küçük liste [1]'dir.
      • Nihai sıralanmış daha büyük liste [3, 5].
    • Daha büyük liste için: [9]
      • Listede ikiden az öğe vardır, bu nedenle olduğu gibi döndürülür.
  5. Nihai sıralanmış daha küçük liste [1]'dir.
  6. Nihai sıralanmış daha büyük liste [3, 5, 9] şeklindedir.
  7. Sıralanmış daha küçük listeyi, pivot (7) ve sıralanmış daha büyük listeyi birleştirin.
    • Sıralanan liste [1, 3, 5, 7, 9] olur.

Hızlı sıralama algoritması, listeyi yinelemeli olarak daha küçük alt listelere bölerek ve sıralayarak tüm listeyi verimli bir şekilde sıralar.

Sonuç olarak, yinelemeli algoritmalar böl ve fethet yaklaşımlarında çok önemli bir rol oynamaktadır. Problemleri daha küçük alt problemlere bölerler ve ayrı ayrı çözerler, sonunda orijinal problemi çözmek için çözümleri birleştirir. Özyinelemeli işlevler kendilerini kendi tanımları içinde çağırırlar ve bir durma koşuluna ulaşana kadar daha küçük girdiler üzerinde tekrar tekrar çalışırlar. Ancak, sonsuz yinelemeden kaçınmak ve algoritmanın bir çözüme yakınsamasını sağlamak için sonlandırma koşulunu göz önünde bulundurmak önemlidir.

6.2 Recursive algorithms & Big-O (L06: Decision Trees)
6.2 Recursive algorithms & Big-O (L06: Decision Trees)
  • 2020.10.04
  • www.youtube.com
To help understand how we can implement decision trees neatly, it's worthwhile taking this little detour and learn about recursive algorithms.-------This vid...
 

6.3 Karar ağaçları türleri (L06: Karar Ağaçları)



6.3 Karar ağaçları türleri (L06: Karar Ağaçları)

Önceki videolarda, karar ağaçlarını ve özyinelemeli algoritmaları tanıtmaya odaklanmıştık. Şimdi, farklı karar ağaçları türlerini inceleyelim. Belirli tasarım seçimlerini değiştirmenin, karar ağacı algoritmalarının farklı uygulamalarına nasıl yol açabileceğini keşfedeceğiz.

Öncelikle, önceki videoda tartıştığımız sözde koddaki genel karar ağacı algoritmasını özetleyelim. Sınıf etiketlerinin sadece 1 ve 0 olduğu bir ikili sınıflandırma problemiyle uğraştık. Ağacımız, ikili bölmeyi içeren ikili bir yapı izledi. Bu, her düğümün tam olarak iki alt düğüme bölündüğü anlamına gelir. Ek olarak, yalnızca özellik değerlerinin 0 veya 1 olabileceği ikili özellikleri dikkate aldık.

Ancak, daha önce scikit-learn'de karar ağacı görselleştirmesini kullanarak gösterdiğimiz gibi, sürekli özellikleri de kullanabilir ve bunları ikili bölmelere dönüştürebiliriz. Örneğin, bir özellik seçebiliriz, buna xj diyelim ve onu 't' olarak gösterilen bir eşik kullanarak iki parçaya ayırabiliriz. Bu bölme kriteri, xj t'den küçük veya xj t'den büyük veya eşit olarak tanımlanabilir ve bu doğru veya yanlış olarak gösterilebilir. Bu, bölme işlemi sırasında karar eşiğini ayarlayabildiğimiz için, sürekli özelliklerle bile bir ikili bölme gerçekleştirmemizi sağlar. Ev ödevinde böyle bir bölünme üzerinde çalışma fırsatınız olacak.

Şimdi karar ağacı algoritması uygulamasına odaklanalım. Karar ağacındaki her düğümde, xj olarak gösterilen, 'j'nin m'ye kadar özelliği temsil eden 1 ila m arasında değiştiği tek bir özelliği dikkate alıyoruz. Bir üst düğümü iki alt düğüme ayırdığımızda, alt sıfır ve alt düğüm diyelim, bölme için hangi özelliği seçeceğimizi belirlememiz gerekir. Sürekli özellikler için, xj'nin belirli bir 't' değerinden büyük veya ona eşit olup olmadığını karşılaştırdığımız karar eşiğini de göz önünde bulundurmamız gerekir. Uygun özelliğin ve eşiğin seçilmesi çok önemlidir ve bir bölünmenin kalitesini değerlendirmek için bir iyilik ölçüsüne ihtiyacımız vardır.

Genel ağaç büyütme algoritmasını özetlemek için, ana düğüm bölündüğünde en büyük bilgi kazancıyla sonuçlanan özelliği seçiyoruz. Bilgi kazancı, bir bölünme için bir iyilik ölçüsüdür. Bilgi kazancı ne kadar yüksek olursa, sürekli özellikler için bölme eşiği de dahil olmak üzere, ayırma ve seçilen özellik o kadar iyi olur. Bir sonraki videoda, bir bölünmenin iyiliğini değerlendirmek için yaygın olarak kullanılan iki ölçüyü tartışacağız: entropi ve Gini safsızlığı.

Algoritma belirli durma koşullarını takip eder. Alt düğümler safsa, yani bir düğüm içindeki tüm veri noktaları aynı sınıf etiketine sahipse durur. Alternatif olarak, bilgi kazancı sıfırdan küçük veya sıfıra eşitse durur ve gelişme olmadığını gösterir. Saf bir düğüm noktasına ulaştığımızda veya ilerleme kaydedemediğimizde, ağacı daha fazla büyütmeyi bırakırız.

Karar ağacını büyüttükten sonra, onu tahminlerde bulunmak için kullanabiliriz. Ebeveyn ve yaprak düğümlerinden oluşan çok düzeyli bir ağacımız olduğunu varsayalım. Yeni bir veri noktasının sınıf etiketini tahmin etmek için, veri noktasının özellik değerlerine dayalı olarak ağaçta geziniriz. Her düğümde, bir yaprak düğüme ulaşana kadar özellik koşullarına göre karşılık gelen dalı takip ediyoruz. Yaprak düğümler için, sınıf etiketini belirlemek için çoğunluk oyu yaklaşımını kullanırız. Bu, o yaprak düğümde en sık görünen sınıf etiketini tahmin ettiğimiz anlamına gelir.

Karar ağaçlarının hem ikili hem de çok sınıflı sınıflandırma problemlerini çözebileceğini not etmek önemlidir. Önceki slaytlarda tartıştığımız sözde kod, ikili sınıflandırmaya odaklandı, ancak karar ağaçları, keyfi sayıda sınıf etiketini işleyebilir. Çoğunluk oyu yaklaşımı, sınıf sayısına bakılmaksızın uygulanabilir.

Karar ağacı algoritmalarını geliştirirken çeşitli tasarım seçenekleriyle karşılaşırız. Önemli bir soru, düğümlerin nasıl bölüneceğidir. Bölünme kriterlerini tanımlamamız ve farklı bölmeleri nasıl karşılaştıracağımızı ve değerlendireceğimizi belirlememiz gerekiyor. Bir bölünmenin kalitesini değerlendirmek için yaygın olarak kullanılan iki ölçü entropi ve Gini kirliliğidir.

Entropi, bir düğümdeki kirlilik veya düzensizliğin bir ölçüsüdür. O düğümdeki veri noktalarının sınıf etiketleriyle ilişkili belirsizliği ölçer. Bir düğümün entropisi aşağıdaki formül kullanılarak hesaplanır:

Entropi(düğüm) = - toplam(p(i) * log2(p(i))), tüm i sınıfları için

burada p(i), i sınıfına ait düğümdeki veri noktalarının oranını temsil eder. Entropi değeri 0 ile 1 arasında değişir; burada 0, saf bir düğümü (tüm veri noktaları aynı sınıfa aittir) ve 1, maksimum safsızlığı (veri noktalarının tüm sınıflar arasında eşit dağılımı) gösterir.

Bir bölünmenin kalitesini değerlendirmek için, ortaya çıkan alt düğümler için entropi değerlerinin ağırlıklı ortalamasını hesaplıyoruz. Bu bilgi kazancı olarak bilinir. Bilgi kazancı şu şekilde hesaplanır:

Bilgi Kazanımı = Entropi(ana) - toplam((|Sv| / |S|) * Entropi(Sv))), tüm alt düğümler için v

burada Entropy(parent), üst düğümün entropisidir, |Sv| alt düğüm v'deki veri noktalarının sayısını temsil eder ve |S| üst düğümdeki toplam veri noktası sayısıdır. Bilgi kazancı, düğümü belirli bir özelliğe göre bölerek elde edilen entropideki azalmayı ölçer.

Gini safsızlığı, bir bölünmenin kalitesini değerlendirmek için kullanılan başka bir ölçüdür. Bir düğümdeki sınıf etiketlerinin dağılımına dayalı olarak bir sınıf etiketi atarsak, bir düğümde rastgele seçilen bir veri noktasını yanlış sınıflandırma olasılığını ölçer. Bir düğümün Gini safsızlığı aşağıdaki formül kullanılarak hesaplanır:

Gini(düğüm) = 1 - toplam(p(i)^2), tüm i sınıfları için

burada p(i), i sınıfına ait düğümdeki veri noktalarının oranını temsil eder. Entropiye benzer şekilde, Gini kirlilik değeri 0 ile 1 arasında değişir; burada 0, saf bir düğümü ve 1, maksimum safsızlığı gösterir.

Bir bölünmenin kalitesini değerlendirmek için, ortaya çıkan alt düğümler için Gini safsızlık değerlerinin ağırlıklı ortalamasını hesaplıyoruz. Bu, Gini safsızlık indeksi olarak bilinir. Gini kirlilik indeksi şu şekilde hesaplanır:

Gini Dizini = toplam((|Sv| / |S|) * Gini(Sv))), tüm alt düğümler için v

nerede |Sv| alt düğüm v'deki veri noktalarının sayısını temsil eder ve |S| üst düğümdeki toplam veri noktası sayısıdır. Gini indeksi, düğümü belirli bir özelliğe göre bölerek elde edilen Gini kirliliğindeki azalmayı ölçer.

Hem entropi hem de Gini safsızlığı, karar ağacı algoritmalarında yaygın olarak kullanılır ve aralarındaki seçim, belirli soruna ve veri özelliklerine bağlıdır. Scikit-learn'de, karar ağacı modelleri oluştururken 'entropy' veya 'gini'yi belirtmek için kriter parametresini seçebilirsiniz.

Bir sonraki videoda, bu ölçümleri daha derinlemesine inceleyeceğiz ve bir karar ağacı algoritmasındaki en iyi bölmeleri belirlemek için bunların nasıl kullanılacağını tartışacağız.

6.3 Types of decision trees (L06: Decision Trees)
6.3 Types of decision trees (L06: Decision Trees)
  • 2020.10.06
  • www.youtube.com
Most often, we use CART decision trees in practice. However, there are more than just one type of decision tree out there as we will see in this video.------...
 

6.4 Ayırma kriterleri (L06: Karar Ağaçları)



6.4 Ayırma kriterleri (L06: Karar Ağaçları)

Videoda konuşmacı, karar ağaçlarının inceliklerini derinlemesine inceliyor ve bu çerçevede bölme kriterleri kavramını tanıtıyor. Bölme kriterleri, esas olarak, bir ana düğümü alt düğümlerine bölmek için en uygun özelliği belirlemek için kullanılan kriterler veya ölçülerdir. Genel olarak, bir veri kümesi, x1, x2, x3, ..., xm olarak gösterilen ve j'nin 1 ile m arasında değişen bir değeri temsil ettiği birden çok özelliği kapsar.

Konuşmacı, karar ağacındaki her düğümde, bölme işlemi için kullanılacak özelliğe ilişkin kritik bir karar verilmesi gerektiğini vurgular. Optimal özelliği belirlemek için, mevcut özellikleri karşılaştırmak ve değerlendirmek için belirli kriterler veya ölçüler tanımlanır. Amaç, daha iyi bir bölünme sağlayan bir özellik seçmek ve böylece karar ağacının tahmin doğruluğunu arttırmaktır.

Karar ağaçlarının işleyişini göstermek için, konuşmacı üç özellikten oluşan bir oyuncak veri seti sunar: x1, x2, x3 ve sınıf etiketini, y gösteren bir sütun. Bu veri kümesindeki sınıf etiketleri ikili olup, birlerin veya sıfırların değerlerini alır. Konuşmacı, yalnızca iki özellik kullanarak, bu belirli veri kümesi için %100'lük bir eğitim doğruluğu elde etmenin mümkün olduğunu belirtiyor.

Konuşmacı, izleyiciye meydan okuyarak, onlardan %100'lük bir eğitim doğruluğuna yol açabilecek üç özelliğe dayalı iki kural bulmalarını ister. Çözümü düşünmek için videoyu duraklatmayı öneriyorlar. Ardından, konuşmacı çözümü açıklayarak yalnızca x1 ve x2'nin ilgili ve yararlı özellikler olduğunu, x3'ün ise görünüşte rastgele olduğunu ve doğruluğa katkıda bulunmadığını açıklar.

İleriye doğru, konuşmacı x1 ve x2 değerlerini bir grafik üzerinde çizerek veri kümesini görsel olarak temsil eder. Grafikteki kırmızı noktalar, birinci sınıf etiketine ait veri noktalarını, mavi kareler ise sıfır olarak etiketlenmiş veri noktalarını temsil eder. Veri noktalarında gözlemlenen örüntüye dayanarak, konuşmacı bir karar ağacının oluşmasıyla sonuçlanan bir bölme oluşturmaya devam eder.

İlk bölme, x1'in 5,5'ten büyük olmasına dayanır. Bu bölüm, verileri biri mavi ve diğeri kırmızı olarak etiketlenmiş iki bölgeye ayırır. Konuşmacı, bu bölmenin bazı veri noktalarını doğru bir şekilde sınıflandırırken diğerlerini de yanlış sınıflandırdığını belirtiyor. Sonraki bölme, x2'nin 10.5'ten büyük olmasına dayanır. Bu, sınıflandırma sürecini daha da geliştirir ve sonuçta %100 eğitim doğruluğuna ulaşan bir karar ağacına yol açar.

Netliği artırmak için konuşmacı, karar ağacının daha net bir görsel temsilini sağlayarak her bir düğümle ilişkili bilgileri aydınlatır. Her düğüm, bölünmeye uğrayan ve alt düğümlerin oluşturulmasıyla sonuçlanan bir ana düğümü sembolize eder. Her düğüm için bölme değeri (özellik değeri ve eşik ile temsil edilir), entropi (bir bilgi içeriği ölçüsü), eğitim örneklerinin sayısı (örnekler), sınıf etiketi dağılımı (yer) ve çoğunluk sınıfı görüntülenir.

Karar ağacı, ana düğümlerin alt düğümlere yol açtığı hiyerarşik bir yapıda tasvir edilir. Konuşmacı, karar ağaçlarının girdi özelliklerine dayalı tahminler yapmak için bu düğümleri kullandığını vurgulayarak her bir düğümün öneminin altını çizer.

Son olarak, konuşmacı yalnızca ikinci özelliği kullanarak %100 eğitim doğruluğu elde etmek için alternatif bir yaklaşımdan bahsediyor. Veri noktalarını istenen sınıflara doğru bir şekilde ayırmak için ikinci özelliğin 7.5 ve 10 değerlerinde nasıl bölünebileceğini gösteren bu alternatif yaklaşıma dayalı bir karar ağacı gösterirler.

Sürekli özelliklere sahip olduğumuz ve eşikleri doğru ayarladığımız ideal bir senaryoda, yukarıda belirtilen kavramlar geçerli olacaktır. "V" değişkenini kullanmak yerine, bir eşiğe eşit veya daha küçük olan sürekli bir özelliği temsil eden bir xj değişkeni kullanırdık. İkinci alt düğüm, eşikten daha büyük değerleri sembolize eder. Bu durumda, sürekli özelliklere sahipsek, öncekine benzer bir formül kullanılabilir, ancak şimdi fonksiyona bir eşik değeri dahil etmemiz gerekiyor. Eşikten büyük veya eşit olup olmadıklarını kontrol etmek için değerleri karşılaştırabiliriz.

Dolayısıyla, sürekli bir özelliğimiz ve CART'a (Sınıflandırma ve Regresyon Ağacı) benzer bir ikili ağacımız varsa, birden çok düğüm yerine yalnızca iki alt düğümü toplamamız gerekir. Bir alt düğüm, eşikten daha büyük değerlere karşılık gelirken, diğeri eşikten daha küçük veya ona eşit değerleri temsil eder. Eşik değerine dayalı olarak iki olası sonuca odaklandığımız için bu basitleştirme mantıklıdır. Bununla birlikte, bu açıklamanın yoğun görünebileceğini ve hala eksik olan önemli bir yönün, sonraki slaytlarda incelenecek olan entropi kavramı olduğunu kabul etmek çok önemlidir.

Bu bağlamda entropi, Claude Shannon tarafından bilgi teorisi alanında tanıtılan Shannon entropisi ile ilgilidir. Biyofizik veya termodinamikte kullanılan entropiden farklıdır. Shannon entropisi, karar ağaçları içindeki alt düğümlerin safsızlığını veya düzensizliğini ölçmek için bir ölçü olarak hizmet eder. Bernoulli dağılımına benzer şekilde, iki sonucu olan ayrı bir rasgele değişken tarafından iletilen bilgi miktarını nicelleştirir. Bernoulli dağılımında, p olarak gösterilen bir olasılık parametresi, bir olayın meydana gelme olasılığını temsil eder.

Shannon bilgiyi, 1/p değerini kodlamak için gereken bit sayısı olarak tanımlamıştır. Daha basit bir ifadeyle, bir olayla ilgili kesinlik veya belirsizlik düzeyini ölçer. Gereken bit sayısı, 1/p'nin logaritma tabanı 2 olarak hesaplanabilir. Olasılık p arttıkça, gereken bit sayısı azalır ve bu da daha yüksek bir kesinlik derecesi gösterir. Tersine, olasılık sıfıra yaklaştıkça, gereken bit sayısı artar ve bu da daha yüksek bir belirsizlik düzeyi anlamına gelir.

Bu kavramı örneklendirmek için birkaç örneği ele alalım. 0.5 olasılığımız varsa, gereken bit sayısı 1 olur. Olasılık 0 ise, gereken bit sayısı sonsuz olur ve bu mutlak kesinlik anlamına gelir. Tersine, olasılık 1 ise, gereken bit sayısı 0 olur ve bu tam belirsizliği gösterir. Dolayısıyla, -log2(p) terimi için değer aralığı eksi sonsuzdan 0'a kadar uzanır.

Shannon entropisi, tüm olası olaylardaki ortalama bilgi olarak hesaplanır. Ağırlıklar, olayların ilgili olasılıkları olmak üzere, her bir olayla ilişkili bilgilerin ağırlıklı ortalamasını temsil eder. Karar ağaçları söz konusu olduğunda, bir alt düğümün safsızlığını ölçmek için entropi kavramı uygulanabilir. Bir düğüm, sınıf etiketlerinin iyi dengelenmiş bir dağılımını sergiliyorsa, daha yüksek entropiye sahip olacak ve bu da daha fazla kirlilik anlamına gelecektir. Tersine, eğer bir düğüm bir sınıfın baskın olduğu yerde çarpık bir dağılım sergiliyorsa, daha düşük entropiye sahip olacak ve bu da daha düşük safsızlığa işaret edecektir. Daha yüksek safsızlığa sahip bir düğüm, sınıflandırma amaçları için daha az bilgi sağladığından, bu kavram sezgisel olarak hizalanır.

Entropi, karar ağaçlarının alt düğümlerindeki safsızlık veya düzensizliği ölçmek için bir araç sunar. Sınıf etiketlerinin dağılımına dayalı olarak bir düğümün saflığının değerlendirilmesini sağlar. Daha yüksek entropiye sahip bir düğüm daha çeşitli bir dağılıma işaret ederken, daha düşük entropiye sahip bir düğüm daha homojen bir dağılıma işaret etmektedir. Alt düğümlerin entropisi dikkate alınarak, karar ağaçları oluşturulurken daha bilinçli kararlar alınabilir.

6.4 Splitting criteria (L06: Decision Trees)
6.4 Splitting criteria (L06: Decision Trees)
  • 2020.10.07
  • www.youtube.com
machine learning, scikit-learn
 

6.5 Gini & Entropy ve yanlış sınıflandırma hatası (L06: Karar Ağaçları)


6.5 Gini & Entropy ve yanlış sınıflandırma hatası (L06: Karar Ağaçları)

Bir önceki videoda, bir karar ağacı oluşturmak için kullanılabilecek çeşitli bölme kriterlerini tartışmıştık. Şimdi, bölme kriterlerinden ikisinin, yani Gini safsızlığı ve entropinin, üçüncü kriter olan yanlış sınıflandırma hatası yerine neden tercih edildiğini inceleyelim.

Özetlemek gerekirse, üç safsızlık ölçütümüz var: entropi, ölçeklendirilmiş entropi (Gini safsızlığı ile karşılaştırma için 0,5 ile ölçeklendirilmiş) ve yanlış sınıflandırma hatası. Bu kirlilik önlemlerinin şekli farklıdır. Entropi içbükey bir fonksiyon olarak görünürken, yanlış sınıflandırma hatası doğrusal eğimlerle 0,5'te keskin bir tepe noktasına sahiptir.

Şu soru ortaya çıkıyor: Büyüyen karar ağaçları için neden yanlış sınıflandırma hatası yerine entropi ve Gini safsızlığını kullanıyoruz? Bu soru sadece entropi için değil, aynı zamanda Gini safsızlığı için de geçerlidir. Bu videoda entropiye odaklanacağız, ancak kavram aynı şekilde Gini safsızlığı için de geçerli.

Bilgi kazancı denklemini ele alalım. Üst düğüm için, üst düğümdeki D veri kümesini temsil eden bir safsızlık fonksiyonumuz var. Bu veri setini özellik değerlerine göre böldüğümüzde farklı alt düğümler oluşturuyoruz. Bu kavram hem kategorik hem de sürekli özellikler için geçerlidir. Sürekli özellikler için, bir eşiğe dayalı bölmeler oluşturarak bölebiliriz.

Safsızlık ölçüsü, hem ebeveyn hem de alt düğümler için kullanılır ve bunları, üst düğümdeki ve mevcut alt düğümdeki orijinal veri kümesinin boyutunu göz önünde bulundurarak özetleriz. Genel olarak, ebeveyn için bir safsızlık ölçüsü seçersek, onu alt düğümler için de tutarlı tutarız.

Uygulamada, bu videoda tartışacağımız bir dezavantajı olduğu için yanlış sınıflandırma hatasını kullanmaktan kaçınma eğilimindeyiz. Entropi ve yanlış sınıflandırma hatasının nasıl hesaplandığına kısaca tekrar bakalım. Entropi, her sınıf için etiket oranının ürünü ve oranın logaritması toplanarak hesaplanır. Öte yandan, yanlış sınıflandırma hatası, yanlış sınıflandırılan etiketlerin oranını ölçen 0/1 kaybına dayanmaktadır.

Şimdi, entropiye karşı yanlış sınıflandırma hatasına odaklanarak, temel farklardan biri şekilleridir. Entropi içbükeydir, oysa yanlış sınıflandırma hatası değildir. Bu fark, büyüyen karar ağaçları için yanlış sınıflandırma hatası yerine neden entropinin tercih edildiğini etkiler.

Bunu göstermek için basit bir oyuncak veri kümesini ele alalım. Ana düğümde, birinci sınıf 40 örneğimiz ve sıfır sınıfı 80 örneğimiz var. Veri setini özellik değerlerine göre bölersek, farklı sınıf dağılımlarına sahip alt düğümler elde ederiz. Bu ayrımın, ana öğeye kıyasla düğümlerin saflığını artırıp artırmadığını değerlendirmemiz gerekiyor.

Ana ve alt düğümler için entropiyi hesaplarsak, ikinci alt düğüm için entropinin üst düğümden daha düşük olduğunu buluruz, bu da gelişmiş saflığı gösterir. Ancak, alt düğüm bir ebeveynden daha kötüdür. Ortalama olarak, bölünmenin faydalı olup olmadığını belirlememiz gerekir.

Bölünmenin kalitesini ölçmek için ebeveyn ve alt düğümler için entropi değerlerini dikkate alan bilgi kazancını kullanırız. Bilgi kazancı pozitifse, iyi bir bölünmeyi gösterir. Örneğimizde, bilgi kazancı pozitiftir ve entropiye dayalı olumlu bir bölünmeyi gösterir.

Şimdi aynı senaryoyu misclassification hatası kullanarak inceleyelim. Ebeveyn, alt düğüm bir ve alt düğüm iki için hata, yanlış sınıflandırılmış etiketlerin oranına göre hesaplanır. Bu hata değerlerini bilgi kazancı formülüne yerleştirirsek, bilgi kazancının sıfır olduğunu buluruz. Sıfır bilgi kazancı, bölünmenin faydalı olmadığı anlamına gelir. Sonuç olarak, bu düğümler olmayacak ve diğer özellikleri dikkate almamız gerekecek.

Sonuç olarak, büyüyen karar ağaçları için yanlış sınıflandırma hatası yerine entropinin tercih edilmesinin temel nedeni, entropinin verilerdeki belirsizliği ve düzensizliği daha etkin bir şekilde yakalamasıdır. Entropinin içbükey şekli, farklı sınıf dağılımları arasında daha iyi ayrım yapılmasına izin verir ve daha incelikli bir safsızlık ölçüsü sağlar. Öte yandan, yanlış sınıflandırma hatası, yalnızca yanlış sınıflandırılmış etiketlerin oranını dikkate alan ve sınıfların belirsizliğini ve dağılımını yakalamayan daha basit bir ölçüdür.

Entropinin içbükey şekli, hem küçük hem de büyük sınıf dengesizliklerini cezalandırmasına izin verir. Sınıf oranlarındaki değişikliklere duyarlıdır ve daha eşit dağıtılmış sınıflara daha yüksek ağırlıklar verir. Bu özellik, dengesiz sınıf dağılımlarına sahip veri kümeleriyle uğraşırken entropiyi özellikle yararlı kılar.

Buna karşılık, yanlış sınıflandırma hatası, 0.5'te keskin bir zirve ile doğrusal bir şekle sahiptir. Tüm yanlış sınıflandırmaları eşit olarak ele alır ve farklı yanlış sınıflandırma dereceleri arasında ayrım yapmaz. Bu, yanlış sınıflandırma hatasını sınıf dengesizliklerine karşı daha duyarlı hale getirir ve dengesiz veri kümelerine sahip senaryolarda daha az etkili hale getirir.

Ayrıca, entropi ve yanlış sınıflandırma hatası arasındaki şekillerdeki fark, karar ağacı öğrenme sürecini etkiler. Karar ağaçları, bilgi kazanımını en üst düzeye çıkaran veya safsızlığı azaltan ayrımları bulmayı amaçlar. Entropi, daha ince taneli bir safsızlık ölçüsü sağladığından, karar ağaçlarının daha bilinçli ve doğru bölmeler yapmasına izin verir.

Safsızlık ölçüsü olarak entropiyi kullanan karar ağaçları, özellikler ve sınıflar arasındaki karmaşık ilişkileri yakalayabilir. Hem sürekli hem de kategorik özellikleri işleyebilirler ve verilerdeki karmaşık kalıpları keşfedebilirler.

Özetle, entropi, verideki belirsizliği ve düzensizliği daha etkili bir şekilde yakaladığı için büyüyen karar ağaçları için yanlış sınıflandırma hatasına tercih edilir. İçbükey şekli, farklı sınıf dağılımları arasında daha iyi ayrım yapılmasına izin verir ve dengesiz veri kümelerine karşı daha sağlamdır. Entropi kullanarak, karar ağaçları daha bilinçli ayrımlar yapabilir ve özellikler ile sınıflar arasındaki karmaşık ilişkileri yakalayabilir.

6.5 Gini & Entropy versus misclassification error (L06: Decision Trees)
6.5 Gini & Entropy versus misclassification error (L06: Decision Trees)
  • 2020.10.15
  • www.youtube.com
This video explains why we use entropy (or Gini) instead of the misclassification error as impurity metric in the information gain equation of CART decision ...
 

6.6 İyileştirmeler ve fazla uydurmayla başa çıkma (L06: Karar Ağaçları)



6.6 İyileştirmeler ve fazla uydurmayla başa çıkma (L06: Karar Ağaçları)

Bir önceki videoda, bir karar ağacı oluşturmak için kullanılabilecek farklı bölme kriterlerini tartışmıştık. Şimdi, bölme kriterlerinden ikisinin, yani Gini safsızlığı ve entropinin, üçüncü kriter olan yanlış sınıflandırma hatası yerine neden tercih edildiğini araştıracağız.

Hafızamızı tazelemek için üç bölme kriterini hatırlayalım: entropi, ölçekli entropi (Gini safsızlığı ile karşılaştırma için) ve yanlış sınıflandırma hatası. Bu kirlilik ölçümlerinin şekli şu şekilde görselleştirilebilir: entropi, uzun siyah bir çizgi ile temsil edilen içbükey bir fonksiyondur; ölçekli entropi de içbükeydir ve entropinin 0,5 ile çarpılmasıyla elde edilir; ve yanlış sınıflandırma hatası, 0.5'te keskin bir tepe ve doğrusal eğimler sergiler.

Şimdi şu soru ortaya çıkıyor: karar ağaçlarını büyütürken yanlış sınıflandırma hatası yerine neden entropi ve Gini safsızlığını kullanmayı tercih ediyoruz? Bu soru hem entropi hem de Gini safsızlığı için geçerlidir, ancak basit olması için bu tartışmada entropiye odaklanacağız.

Bilgi kazancı denklemini tekrar özetleyelim. D olarak gösterilen bir üst düğümle başlıyoruz ve bu veri kümesini özellik değerlerine göre bölerek farklı alt düğümler oluşturuyoruz. Safsızlık işlevi hem ebeveyn hem de alt düğümler için kullanılır ve veri kümelerinin boyutunu dikkate alarak safsızlık değerlerini toplarız. Üst düğüm için entropi seçersek, alt düğümler için de entropi kullanırız. Aynı prensip Gini safsızlığı için de geçerlidir.

Pratik olarak, bu videoda inceleyeceğimiz bir dezavantajı olduğu için yanlış sınıflandırma hatasını kullanmamayı tercih ederiz. Bunu daha iyi anlamak için entropi, Gini safsızlığı ve yanlış sınıflandırma hatası formüllerini kısaca gözden geçirelim.

Entropi, sınıf etiketlerinin oranlarını yerine koyarak ve bunları toplayarak hesaplanır. Logaritma kullanır ve sınıfları topladığımız ve her sınıfın oranını o oranın logaritmasıyla çarptığımız formülle temsil edilir.

Öte yandan Gini safsızlığı, sınıf etiketi oranının karesini alır ve birden çıkarır. Logaritma kullanmaktan kaçınır ve 1 eksi kareli sınıf etiket oranlarının toplamı olarak gösterilir.

Yanlış sınıflandırma hatası, yanlış sınıflandırılmış etiketlerin oranını ölçen 0-1 kaybına dayanır. Örneğin, 001111 etiketli bir düğümümüz varsa, çoğunluk sınıfı olduğu için çoğunluk oyu 0'ı tahmin eder. Bununla birlikte, dağılım göz önüne alındığında, altı kez yalnızca dördünde doğru olurduk, bu da 4/6 veya %66,6'lık bir doğrulukla sonuçlanırdı. Hata 2/6 veya %33,3 olacaktır.

Entropi ve yanlış sınıflandırma hatasını karşılaştırmak için, entropinin içbükey olduğunu, yanlış sınıflandırma hatasının ise 0,5'te keskin bir tepe noktası ve doğrusal eğimler sergilediğini gözlemliyoruz. Bu fark, büyüyen karar ağaçları için neden yanlış sınıflandırma hatası yerine entropinin tercih edildiğini anlamada çok önemlidir.

Bunu göstermek için, birinci sınıftan 40 örnek ve sıfır sınıfından 80 örnek içeren bir üst düğüm içeren basit bir oyuncak veri kümesini ele alalım. Bölünecek en iyi özelliğin x1 olduğunu varsayarak, veri setini özellik değerlerinin bir veya sıfır olmasına göre böleriz. İki alt düğüm elde ederiz: alt düğüm bir ve alt düğüm iki. Sınıf dağılımını analiz ettikten sonra, ikinci düğümün ebeveynden daha saf olduğunu, alt düğüm birin ise daha kötü olduğunu bulduk.

Anahtar soru, bu özelliği ayırmaya değip değmeyeceğidir. Bunu belirlemek için entropi kullanarak bilgi kazancını hesaplıyoruz. Ebeveyn, alt düğüm bir ve alt düğüm iki için entropi değerlerini hesaplıyoruz. Bu değerleri karşılaştırdığımızda, çocuk düğüm 2'nin daha iyi olduğunu, çocuk düğüm 1'in ise ebeveynden daha kötü olduğunu gözlemliyoruz. Bilgi kazancı formülünü uygulayarak, bu bölünme için bilgi kazancının pozitif olduğunu bulduk ve bu da bölünmenin veri kümesinin genel saflığını iyileştirdiğini gösteriyor.

Şimdi yanlış sınıflandırma hatasını entropi yerine safsızlık ölçüsü olarak ele alalım. Ebeveyn, alt düğüm bir ve alt düğüm iki için yanlış sınıflandırma hatasını hesaplıyoruz. Bu değerleri karşılaştırdığımızda, ikinci düğümün üst düğümden daha düşük bir yanlış sınıflandırma hatasına sahip olduğunu, birinci alt düğümün ise daha yüksek bir yanlış sınıflandırma hatasına sahip olduğunu bulduk.

Ancak yanlış sınıflandırma hatasını kullanarak bilgi kazancını hesapladığımızda bir sorunla karşılaşırız. Bilgi kazanım formülü, alt düğümlerin ağırlıklı yanlış sınıflandırma hatalarının ebeveynin yanlış sınıflandırma hatasından çıkarılmasını içerir. Yanlış sınıflandırma hatası doğrusal bir fonksiyon olduğundan, alt düğümlerin yanlış sınıflandırma hatası ebeveyninkinden yüksekse bilgi kazancı negatif olabilir.

Örneğimizde, ikinci düğümün üst düğümden daha düşük bir yanlış sınıflandırma hatası olmasına rağmen, alt düğüm birin yanlış sınıflandırma hatası daha yüksektir ve bu da negatif bir bilgi kazanımına neden olur. Bu, safsızlık ölçüsü olarak yanlış sınıflandırma hatasını kullanmanın, alt düğümlerden birinin saflığını iyileştirmesine rağmen, bölünmeyi caydıracağı anlamına gelir.

Öte yandan, safsızlık ölçüsü olarak entropi veya Gini safsızlığını kullandığımızda, bilgi kazancı her zaman negatif olmayacaktır. Hem entropi hem de Gini safsızlığı içbükey fonksiyonlardır; bu, alt düğümlerin safsızlık değerlerinin her zaman ana düğümün safsızlık değerinden küçük veya ona eşit olduğu anlamına gelir. Bu, bölünme en az bir alt düğümün saflığını iyileştirdiğinde bilgi kazancının pozitif olmasını sağlar.

Safsızlık ölçütleri olarak entropi veya Gini safsızlığını kullanarak, karar ağaçları, ağacı büyütmek ve öngörü gücünü geliştirmek için ilkeli bir yaklaşım sağlayan bilgi kazancına dayalı olarak bölmeler yapabilir. Öte yandan yanlış sınıflandırma hatası, optimum olmayan bölmelere ve daha az doğru karar ağaçlarına yol açabilir.

Özetle, karar ağacı algoritmalarında yanlış sınıflandırma hatası yerine entropi ve Gini safsızlığının tercih edilmesinin kökleri matematiksel özelliklerinden kaynaklanmaktadır. Entropinin içbükey doğası ve Gini safsızlığı, alt düğümlerin saflığını artıran bölmeler için bilgi kazancının pozitif olmasını sağlarken, yanlış sınıflandırma hatasının doğrusal doğası, negatif bilgi kazanımlarına ve yetersiz bölünmelere neden olabilir.

6.6 Improvements & dealing with overfitting (L06: Decision Trees)
6.6 Improvements & dealing with overfitting (L06: Decision Trees)
  • 2020.10.15
  • www.youtube.com
This video covers some issues with decision trees (like overfitting) and discusses some improvements such as the gain ratio, pre-pruning, and post-pruning.--...
 

6.7 Scikit-Learn'de Karar Ağaçlarını Uygulama Kod Örneği (L06: Karar Ağaçları)



6.7 Scikit-Learn'de Karar Ağaçlarını Uygulama Kod Örneği (L06: Karar Ağaçları)

Altıncı dersi bitirmek için, şimdi özellikle karar ağacı algoritmasına odaklanarak scikit-learn kullanan bir kod örneğini inceleyeceğiz. Scikit-learn, hızı, verimliliği ve sağlamlığı nedeniyle gerçek dünyadaki makine öğrenimi projeleri için önerilir. Bu gösteri için scikit-learn kullanacak olsak da, algoritma anlayışınızı geliştirmek için ev ödevi için sıfırdan bir karar ağacı uygulayacağınızı belirtmekte fayda var.

Başlamak için, filigran paketi de dahil olmak üzere, kullanılan yazılımın sürümlerini takip etmemize yardımcı olacak gerekli paketleri içe aktaralım. Bu, eski yazılım sürümleri nedeniyle kodu çalıştırırken herhangi bir sorun çıkması durumunda yardımcı olabilir. Ardından, genellikle sınıflandırma görevleri için kullanılan popüler bir veri kümesi olan iris veri kümesini yüklüyoruz. iris gibi iyi bilinen bir veri kümesini kullanarak, verileri açıklamak yerine kodu ve işlevselliğini anlamaya daha fazla odaklanabiliriz.

Veri setini eğitim ve test setlerine ayırdık ve verilerin %30'u test için ayrıldı. Bu not defterinde herhangi bir ayar yapmayacağız. Izgara arama gibi teknikleri kullanarak karar ağacı hiperparametrelerini ayarlamak mümkün olsa da, bunu basit tutacağız ve şimdilik ayarlamayı atlayacağız. Bu nedenle, karar ağacını yalnızca eğitim seti üzerinde eğiteceğimiz ve performansını test seti üzerinde değerlendireceğimiz için ayrı bir doğrulama setine ihtiyacımız yok.

Karar bölgelerini çizmeye devam ederek, karar ağacı sınıflandırıcısını başlatıyoruz ve hiperparametreleri ayarlıyoruz. Bu durumda bilgi kazanımı için entropi kriterini seçiyoruz ve eğitim amaçlı maksimum derinliği ikiye ayarlıyoruz. Ek olarak, karar ağacını eğitim verilerine uydurur ve karar bölgelerini çizeriz. Karar bölgelerini görselleştirerek, karar ağacının verileri seçilen özelliklere göre nasıl ayırdığını gözlemleyebiliriz.

Karar ağacı sınıflandırıcısı için ayarlanabilecek farklı seçenekleri ve hiperparametreleri araştırıyoruz. Bunlar, her düğümde bölmelerin nasıl yapıldığını belirleyen ayırıcıyı ve düğümleri ve yaprak düğümleri bölmek için gereken minimum örneklerle ilgili parametreleri içerir. Safsızlık ölçüsünü seçme ve bölmelerin rasgeleliğini kontrol etme seçenekleri de vardır. Bu hiperparametreler, belirli soruna ve veri kümesine göre ayarlanabilir ve ayarlanabilir.

Ardından, karar ağacını graphviz kütüphanesini kullanarak görselleştirmeye devam ediyoruz. Karar ağacını, ağaç yapısını grafik olarak temsil eden bir nokta dosyası olarak dışa aktarıyoruz. Grafikteki düğümlerin, kenarların ve etiketlerin görünümünü özelleştirebiliriz. Pydotplus kitaplığı ile birlikte graphviz kitaplığını kullanarak, nokta dosyasını ayrı kaydetmeden doğrudan karar ağacını çizebiliriz. Bu şekilde karar ağacını not defterinin kendisinde görselleştirebiliriz.

Karar ağacı grafiğini görüntülemek için, oluşturulan PNG dosyasını ipython görüntüleme modülünü kullanarak yüklüyoruz. Görüntü sınıfını ipython ekranından içe aktarıyoruz ve onu PNG dosyasını yüklemek için kullanıyoruz. Bu, karar ağacı grafiğini doğrudan Jupyter Not Defteri'nde görmemizi sağlar. Karar ağacı grafiği, seçilen özelliklere dayalı olarak bölmeleri ve karar sınırlarını sırasıyla dikey ve yatay çizgiler olarak gösterir.

Özet olarak, bu kod örneği, scikit-learn kullanılarak bir karar ağacı sınıflandırıcısının nasıl uygulanacağını ve görselleştirileceğini gösterir. Karar ağacı algoritması, sınıflandırma görevleri için yorumlanabilir bir model sağlar ve performansı artırmak için çeşitli hiperparametreler kullanılarak ayarlanabilir. Karar ağacını görselleştirmek, algoritmanın girdi özelliklerine dayalı olarak nasıl kararlar verdiğini anlamaya yardımcı olur.

6.7 Code Example Implementing Decision Trees in Scikit-Learn (L06: Decision Trees)
6.7 Code Example Implementing Decision Trees in Scikit-Learn (L06: Decision Trees)
  • 2020.10.15
  • www.youtube.com
This last video of lecture 6 shows a quick demo of how to train and visualize a decision tree with scikit-learn.-------This video is part of my Introduction ...
Neden: