Sınıflandırma - Giriş

Sınıflandırmaya Giriş

Sınıflandırma, gözlenen değerlerden veya verilen veri noktalarından sınıf veya kategori tahmin etme süreci olarak tanımlanabilir. Kategorize edilmiş çıktı "Siyah" veya "Beyaz" veya "istenmeyen posta" veya "istenmeyen posta yok" şeklinde olabilir.

Matematiksel olarak sınıflandırma, bir eşleme fonksiyonunu (f) giriş değişkenlerinden (X) çıktı değişkenlerine (Y) yaklaştırma görevidir. Temel olarak, hedeflerin giriş veri setiyle birlikte sağlandığı denetimli makine öğrenimine aittir.

Sınıflandırma problemine bir örnek, e-postalarda spam tespiti olabilir. Yalnızca iki çıktı kategorisi olabilir, "istenmeyen posta" ve "istenmeyen posta yok"; dolayısıyla bu bir ikili tip sınıflandırmadır.

Bu sınıflandırmayı uygulamak için önce sınıflandırıcıyı eğitmemiz gerekir. Bu örnek için, eğitim verileri olarak "spam" ve "spam yok" e-postaları kullanılacaktır. Sınıflandırıcıyı başarıyla eğittikten sonra, bilinmeyen bir e-postayı tespit etmek için kullanılabilir.

Sınıflandırmadaki Öğrenci Türleri

Sınıflandırma problemleriyle ilgili olarak iki tür öğrencimiz var -

Tembel Öğrenciler

Adından da anlaşılacağı gibi, bu tür öğrenciler, eğitim verilerini depoladıktan sonra test verilerinin görünmesini bekler. Sınıflandırma ancak test verileri alındıktan sonra yapılır. Eğitime daha az, tahmin etmeye daha çok zaman harcıyorlar. Tembel öğrenenlere örnek olarak K-en yakın komşu ve vaka temelli muhakeme verilebilir.

Hevesli Öğrenciler

Tembel öğrencilerin aksine, istekli öğrenciler, eğitim verilerini sakladıktan sonra test verilerinin görünmesini beklemeden sınıflandırma modeli oluşturur. Eğitime daha fazla, tahmin etmeye daha az zaman harcarlar. Hevesli öğrenenlerin örnekleri Karar Ağaçları, Naif Bayes ve Yapay Sinir Ağlarıdır (YSA).

Python'da Sınıflandırıcı Oluşturma

Makine öğrenimi için bir Python kitaplığı olan Scikit-learn, Python'da bir sınıflandırıcı oluşturmak için kullanılabilir. Python'da bir sınıflandırıcı oluşturmanın adımları aşağıdaki gibidir -

Adım 1: Gerekli python paketini içe aktarma

Scikit-learn kullanarak bir sınıflandırıcı oluşturmak için onu içe aktarmamız gerekir. Aşağıdaki komut dosyasını kullanarak içe aktarabiliriz -

import sklearn

Adım 2: Veri kümesini içe aktarma

Gerekli paketi içe aktardıktan sonra, sınıflandırma tahmin modeli oluşturmak için bir veri kümesine ihtiyacımız var. Sklearn veri setinden içe aktarabilir veya ihtiyacımıza göre diğerini kullanabiliriz. Sklearn'ın Meme Kanseri Wisconsin Teşhis Veritabanını kullanacağız. Aşağıdaki komut dosyası yardımıyla içe aktarabiliriz -

from sklearn.datasets import load_breast_cancer

Aşağıdaki komut dosyası veri kümesini yükleyecektir;

data = load_breast_cancer()

Ayrıca verileri düzenlememiz gerekiyor ve aşağıdaki komut dosyaları yardımıyla yapılabilir -

label_names = data['target_names']
   labels = data['target']
   feature_names = data['feature_names']
   features = data['data']

Aşağıdaki komut etiketlerin adını yazdıracaktır, 'malignant' ve 'benignVeritabanımız durumunda.

print(label_names)

Yukarıdaki komutun çıktısı etiketlerin isimleridir -

['malignant' 'benign']

Bu etiketler, 0 ve 1 ikili değerleriyle eşleştirilir. Malignant kanser 0 ile temsil edilir ve Benign kanser 1 ile temsil edilir.

Bu etiketlerin özellik adları ve özellik değerleri aşağıdaki komutlar yardımı ile görülebilir -

print(feature_names[0])

Yukarıdaki komutun çıktısı, etiket 0 için özelliklerin isimleridir. Malignant kanser -

mean radius

Benzer şekilde, etiket özelliklerinin isimleri aşağıdaki gibi üretilebilir -

print(feature_names[1])

Yukarıdaki komutun çıktısı, etiket 1 için özelliklerin isimleridir. Benign kanser -

mean texture

Bu etiketlerin özelliklerini aşağıdaki komutun yardımıyla yazdırabiliriz -

print(features[0])

Bu, aşağıdaki çıktıyı verecektir -

[
   1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
   1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
   6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
   1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
   4.601e-01 1.189e-01
]

Bu etiketlerin özelliklerini aşağıdaki komutun yardımıyla yazdırabiliriz -

print(features[1])

Bu, aşağıdaki çıktıyı verecektir -

[
   2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02
   7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01
   5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01
   2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01
   2.750e-01 8.902e-02
]

3. Adım: Verileri eğitim ve test setleri halinde düzenleme

Modelimizi görünmeyen veriler üzerinde test etmemiz gerektiğinden, veri setimizi iki bölüme ayıracağız: bir eğitim seti ve bir test seti. Verileri kümelere ayırmak için sklearn python paketinin train_test_split () işlevini kullanabiliriz. Aşağıdaki komut işlevi içe aktaracaktır -

from sklearn.model_selection import train_test_split

Şimdi, bir sonraki komut verileri eğitim ve test verilerine böler. Bu örnekte, verilerin yüzde 40'ını test amacıyla ve yüzde 60'ını eğitim amacıyla alıyoruz -

train, test, train_labels, test_labels = train_test_split(
   features,labels,test_size = 0.40, random_state = 42
)

Adım 4: Model değerlendirmesi

Verileri eğitim ve teste böldükten sonra modeli oluşturmamız gerekir. Bu amaçla Naïve Bayes algoritmasını kullanacağız. Aşağıdaki komutlar GaussianNB modülünü içe aktaracaktır -

from sklearn.naive_bayes import GaussianNB

Şimdi modeli aşağıdaki gibi başlatın -

gnb = GaussianNB()

Ardından, aşağıdaki komutun yardımıyla modeli eğitebiliriz -

model = gnb.fit(train, train_labels)

Şimdi, değerlendirme amacıyla öngörülerde bulunmamız gerekiyor. Predict () işlevi aşağıdaki gibi kullanılarak yapılabilir -

preds = gnb.predict(test)
print(preds)

Bu, aşağıdaki çıktıyı verecektir -

[
   1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1
   0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1
   1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0
   0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1
   1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0 
   1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 
   1

]

Çıktıdaki yukarıdaki 0'lar ve 1'ler serisi, Malignant ve Benign tümör sınıfları.

Adım 5: Doğruluğu bulma

Test_labels ve preds olmak üzere iki diziyi karşılaştırarak önceki adımda model derlemesinin doğruluğunu bulabiliriz. Doğruluğu belirlemek için doğruluk_score () işlevini kullanacağız.

from sklearn.metrics import accuracy_score
   print(accuracy_score(test_labels,preds))
   0.951754385965

Yukarıdaki çıktı, NaïveBayes sınıflandırıcısının% 95,17 doğru olduğunu göstermektedir.

Sınıflandırma Değerlendirme Metrikleri

Makine Öğrenimi uygulamanızın veya modelinizin uygulamasını tamamlamış olsanız bile iş bitmez. Modelimizin ne kadar etkili olduğunu bulmalı mıyız? Farklı değerlendirme ölçütleri olabilir, ancak bunu dikkatlice seçmeliyiz çünkü ölçü seçimi, bir makine öğrenimi algoritmasının performansının nasıl ölçüldüğünü ve karşılaştırıldığını etkiler.

Aşağıdakiler, veri kümenize ve sorun türüne göre seçebileceğiniz önemli sınıflandırma değerlendirme ölçütlerinden bazılarıdır -

Karışıklık Matrisi

Çıktının iki veya daha fazla sınıf türünden olabileceği bir sınıflandırma probleminin performansını ölçmenin en kolay yoludur. Karışıklık matrisi, iki boyutlu bir tablodan başka bir şey değildir. "Gerçek" ve "Öngörülen" ve ayrıca, her iki boyutun da aşağıda gösterildiği gibi "Gerçek Pozitifler (TP)", "Gerçek Negatifler (TN)", "Yanlış Pozitifler (FP)", "Yanlış Negatifler (FN)" vardır -

Karışıklık matrisi ile ilgili terimlerin açıklamaları aşağıdaki gibidir -

  • True Positives (TP) - Hem gerçek sınıf hem de tahmin edilen veri noktası sınıfının 1 olduğu durumdur.

  • True Negatives (TN) - Hem gerçek sınıf hem de tahmin edilen veri noktası sınıfının 0 olduğu durumdur.

  • False Positives (FP) - Gerçek veri noktası sınıfının 0 ve tahmin edilen veri noktası sınıfının 1 olduğu durumdur.

  • False Negatives (FN) - Gerçek veri noktası sınıfının 1 ve tahmin edilen veri noktası sınıfının 0 olduğu durumdur.

Karışıklık matrisini sklearn'ın confusion_matrix () fonksiyonu yardımıyla bulabiliriz. Aşağıdaki betik yardımıyla, yukarıdaki yerleşik ikili sınıflandırıcının karışıklık matrisini bulabiliriz -

from sklearn.metrics import confusion_matrix

Çıktı

[
   [ 73   7]
   [  4 144]
]

Doğruluk

Makine öğrenimi modelimiz tarafından yapılan doğru tahmin sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -

$$ = \ frac {+} {+++} $$

Yukarıda yerleşik ikili sınıflandırıcı için, TP + TN = 73 + 144 = 217 ve TP + FP + FN + TN = 73 + 7 + 4 + 144 = 228.

Dolayısıyla, Doğruluk = 217/228 = 0.951754385965, ikili sınıflandırıcımızı oluşturduktan sonra hesapladığımızla aynıdır.

Hassas

Belge alımlarında kullanılan kesinlik, ML modelimiz tarafından iade edilen doğru belge sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -

$$ = \ frac {} {+ FP} $$

Yukarıdaki yerleşik ikili sınıflandırıcı için, TP = 73 ve TP + FP = 73 + 7 = 80.

Dolayısıyla, Kesinlik = 73/80 = 0.915

Hatırlama veya Hassasiyet

Geri çağırma, ML modelimiz tarafından döndürülen pozitiflerin sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -

$$ = \ frac {} {+ FN} $$

Yukarıda yerleşik ikili sınıflandırıcı için, TP = 73 ve TP + FN = 73 + 4 = 77.

Dolayısıyla, Kesinlik = 73/77 = 0,94805

Özgüllük

Özgünlük, hatırlamanın aksine, ML modelimiz tarafından döndürülen negatiflerin sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -

$$ = \ frac {N} {N + FP} $$

Yukarıda yerleşik ikili sınıflandırıcı için TN = 144 ve TN + FP = 144 + 7 = 151.

Dolayısıyla, Kesinlik = 144/151 = 0.95364

Çeşitli ML Sınıflandırma Algoritmaları

Aşağıdakiler, bazı önemli makine öğrenimi sınıflandırma algoritmalarıdır -

  • Lojistik regresyon

  • Destek Vektör Makinesi (SVM)

  • Karar ağacı

  • Naif bayanlar

  • Rastgele Orman

Tüm bu sınıflandırma algoritmalarını ileriki bölümlerde ayrıntılı olarak tartışacağız.

Başvurular

Sınıflandırma algoritmalarının en önemli uygulamalarından bazıları aşağıdaki gibidir -

  • Konuşma tanıma

  • Elyazısı tanıma

  • Biyometrik Tanımlama

  • Belge Sınıflandırması