You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ML-For-Beginners/4-Classification/2-Classifiers-1/translations/README.tr.md

15 KiB

Mutfak sınıflandırıcıları 1

Bu derste, mutfaklarla ilgili dengeli ve temiz veriyle dolu, geçen dersten kaydettiğiniz veri setini kullanacaksınız.

Bu veri setini çeşitli sınıflandırıcılarla bir grup malzemeyi baz alarak verilen bir ulusal mutfağı öngörmek için kullanacaksınız. Bunu yaparken, sınıflandırma görevleri için algoritmaların leveraj edilebileceği yollardan bazıları hakkında daha fazla bilgi edineceksiniz.

Ders öncesi kısa sınavı

Hazırlık

Birinci dersi tamamladığınızı varsayıyoruz, dolayısıyla bu dört ders için cleaned_cuisines.csv dosyasının kök /data klasöründe var olduğundan emin olun.

Alıştırma - ulusal bir mutfağı öngörün

  1. Bu dersin notebook.ipynb dosyasında çalışarak, Pandas kütüphanesiyle beraber o dosyayı da alın:

    import pandas as pd
    cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv")
    cuisines_df.head()
    

    Veri şöyle görünüyor:

Unnamed: 0 cuisine almond angelica anise anise_seed apple apple_brandy apricot armagnac ... whiskey white_bread white_wine whole_grain_wheat_flour wine wood yam yeast yogurt zucchini
0 0 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
1 1 indian 1 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
2 2 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
3 3 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0 0
4 4 indian 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 1 0
  1. Şimdi, birkaç kütüphane daha alın:

    from sklearn.linear_model import LogisticRegression
    from sklearn.model_selection import train_test_split, cross_val_score
    from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
    from sklearn.svm import SVC
    import numpy as np
    
  2. X ve y koordinatlarını eğitme için iki veri iskeletine bölün. cuisine etiket veri iskeleti olabilir:

    cuisines_label_df = cuisines_df['cuisine']
    cuisines_label_df.head()
    

    Şöyle görünecek:

    0    indian
    1    indian
    2    indian
    3    indian
    4    indian
    Name: cuisine, dtype: object
    
  3. Unnamed: 0 ve cuisine sütunlarını, drop() fonksiyonunu çağırarak temizleyin. Kalan veriyi eğitilebilir öznitelikler olarak kaydedin:

    cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1)
    cuisines_feature_df.head()
    

    Öznitelikleriniz şöyle görünüyor:

almond angelica anise anise_seed apple apple_brandy apricot armagnac artemisia artichoke ... whiskey white_bread white_wine whole_grain_wheat_flour wine wood yam yeast yogurt zucchini
0 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 ... 0 0 0 0 0 0 0 0 1

Şimdi modelinizi eğitmek için hazırsınız!

Sınıflandırıcınızı seçme

Veriniz temiz ve eğitme için hazır, şimdi bu iş için hangi algoritmanın kullanılması gerektiğine karar vermelisiniz.

Scikit-learn, sınıflandırmayı gözetimli öğrenme altında grupluyor. Bu kategoride sınıflandırma için birçok yöntem görebilirsiniz. Çeşitlilik ilk bakışta oldukça şaşırtıcı. Aşağıdaki yöntemlerin hepsi sınıflandırma yöntemlerini içermektedir:

  • Doğrusal Modeller
  • Destek Vektör Makineleri
  • Stokastik Gradyan İnişi
  • En Yakın Komşu
  • Gauss Süreçleri
  • Karar Ağaçları
  • Topluluk Metotları (Oylama Sınıflandırıcısı)
  • Çok sınıflı ve çok çıktılı algoritmalar (çok sınıflı ve çok etiketli sınıflandırma, çok sınıflı-çok çıktılı sınıflandırma)

Verileri sınıflandırmak için sinir ağlarını da kullanabilirsiniz, ancak bu, bu dersin kapsamı dışındadır.

Hangi sınıflandırıcıyı kullanmalı?

Şimdi, hangi sınıflandırıcıyı seçmelisiniz? Genellikle, birçoğunu gözden geçirmek ve iyi bir sonuç aramak deneme yollarından biridir. Scikit-learn, oluşturulmuş bir veri seti üzerinde KNeighbors, iki yolla SVC, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB ve QuadraticDiscrinationAnalysis karşılaştırmaları yapan ve sonuçları görsel olarak gösteren bir yan yana karşılaştırma sunar:

sınıflandırıcıların karşılaştırılması

Grafikler Scikit-learn dokümantasyonlarında oluşturulmuştur.

AutoML, bu karşılaştırmaları bulutta çalıştırarak bu problemi muntazam bir şekilde çözer ve veriniz için en iyi algoritmayı seçmenizi sağlar. Buradan deneyin.

Daha iyi bir yaklaşım

Böyle tahminlerle çözmekten daha iyi bir yol ise, indirilebilir ML Kopya kağıdı içindeki fikirlere bakmaktır. Burada, bizim çok sınıflı problemimiz için bazı seçenekler olduğunu görüyoruz:

çok sınıflı problemler için kopya kağıdı

Microsoft'un Algoritma Kopya Kağıdı'ndan, çok sınıflı sınıflandırma seçeneklerini detaylandıran bir bölüm

Bu kopya kağıdını indirin, yazdırın ve duvarınıza asın!

Akıl yürütme

Elimizdeki kısıtlamalarla farklı yaklaşımlar üzerine akıl yürütelim:

  • Sinir ağları çok ağır. Temiz ama minimal veri setimizi ve eğitimi not defterleriyle yerel makinelerde çalıştırdığımızı göz önünde bulundurursak, sinir ağları bu görev için çok ağır oluyor.
  • İki sınıflı sınıflandırıcısı yok. İki sınıflı sınıflandırıcı kullanmıyoruz, dolayısıyla bire karşı hepsi (one-vs-all) yöntemi eleniyor.
  • Karar ağacı veya lojistik regresyon işe yarayabilirdi. Bir karar ağacı veya çok sınıflı veri için lojistik regresyon işe yarayabilir.
  • Çok Sınıf Artırmalı Karar Ağaçları farklı bir problemi çözüyor. Çok sınıf artırmalı karar ağacı, parametrik olmayan görevler için en uygunu, mesela sıralama (ranking) oluşturmak için tasarlanan görevler. Yani, bizim için kullanışlı değil.

Scikit-learn kullanımı

Verimizi analiz etmek için Scikit-learn kullanacağız. Ancak, Scikit-learn içerisinde lojistik regresyonu kullanmanın birçok yolu var. Geçirilecek parametreler göz atın.

Aslında, Scikit-learn'den lojistik regresyon yapmasını beklediğimizde belirtmemiz gereken multi_class ve solver diye iki önemli parametre var. multi_class değeri belli bir davranış uygular. Çözücünün değeri, hangi algoritmanın kullanılacağını gösterir. Her çözücü her multi_class değeriyle eşleştirilemez.

Dokümanlara göre, çok sınıflı durumunda eğitme algoritması:

  • Eğer multi_class seçeneği ovr olarak ayarlanmışsa, bire karşı diğerleri (one-vs-rest, OvR) şemasını kullanır
  • Eğer multi_class seçeneği multinomial olarak ayarlanmışsa, çapraz düzensizlik yitimini/kaybını kullanır. (Güncel olarak multinomial seçeneği yalnızca lbfgs, sag, saga ve newton-cg çözücüleriyle destekleniyor.)

🎓 Buradaki 'şema' ya 'ovr' (one-vs-rest, yani bire karşı diğerleri) ya da 'multinomial' olabilir. Lojistik regresyon aslında ikili sınıflandırmayı desteklemek için tasarlandığından, bu şemalar onun çok sınıflı sınıflandırma görevlerini daha iyi ele alabilmesini sağlıyor. kaynak

🎓 'Çözücü', "eniyileştirme probleminde kullanılacak algoritma" olarak tanımlanır. kaynak

Scikit-learn, çözücülerin, farklı tür veri yapıları tarafından sunulan farklı meydan okumaları nasıl ele aldığınııklamak için bu tabloyu sunar:

çözücüler

Alıştırma - veriyi bölün

İkincisini önceki derte öğrendiğinizden, ilk eğitme denememiz için lojistik regresyona odaklanabiliriz. train_test_split() fonksiyonunu çağırarak verilerinizi eğitme ve sınama gruplarına bölün:

X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)

Alıştırma - lojistik regresyon uygulayın

Çok sınıflı durumu kullandığınız için, hangi şemayı kullanacağınızı ve hangi çözücüyü ayarlayacağınızı seçmeniz gerekiyor. Eğitme için, bir çok sınıflı ayarında LogisticRegression ve liblinear çözücüsünü kullanın.

  1. multi_class'ı ovr ve solver'ı liblinear olarak ayarlayarak bir lojistik regresyon oluşturun:

    lr = LogisticRegression(multi_class='ovr',solver='liblinear')
    model = lr.fit(X_train, np.ravel(y_train))
    
    accuracy = model.score(X_test, y_test)
    print ("Accuracy is {}".format(accuracy))
    

    Genelde varsayılan olarak ayarlanan lbfgs gibi farklı bir çözücü deneyin.

    Not olarak, gerektiğinde verinizi düzleştirmek için Pandas ravel fonksiyonunu kullanın.

    Doğruluk %80 üzerinde iyidir!

  2. Bir satır veriyi (#50) sınayarak bu modeli eylem halinde görebilirsiniz:

    print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}')
    print(f'cuisine: {y_test.iloc[50]}')
    

    Sonuç bastırılır:

    ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object')
    cuisine: indian
    

    Farklı bir satır sayısı deneyin ve sonuçları kontrol edin

  3. Daha derinlemesine inceleyerek, bu öngörünün doğruluğunu kontrol edebilirsiniz:

    test= X_test.iloc[50].values.reshape(-1, 1).T
    proba = model.predict_proba(test)
    classes = model.classes_
    resultdf = pd.DataFrame(data=proba, columns=classes)
    
    topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])
    topPrediction.head()
    

    Sonuç bastırılır - Hint mutfağı iyi olasılıkla en iyi öngörü:

    0
    indian 0.715851
    chinese 0.229475
    japanese 0.029763
    korean 0.017277
    thai 0.007634

    :while_check_mark: Modelin, bunun bir Hint mutfağı olduğundan nasıl emin olduğunu açıklayabilir misiniz?

  4. Regresyon derslerinde yaptığınız gibi, bir sınıflandırma raporu bastırarak daha fazla detay elde edin:

    y_pred = model.predict(X_test)
    print(classification_report(y_test,y_pred))
    
    precision recall f1-score support
    chinese 0.73 0.71 0.72 229
    indian 0.91 0.93 0.92 254
    japanese 0.70 0.75 0.72 220
    korean 0.86 0.76 0.81 242
    thai 0.79 0.85 0.82 254
    accuracy 0.80 1199
    macro avg 0.80 0.80 0.80 1199
    weighted avg 0.80 0.80 0.80 1199

🚀 Meydan Okuma

Bu derste, bir grup malzemeyi baz alarak bir ulusal mutfağı öngörebilen bir makine öğrenimi modeli oluşturmak için temiz verinizi kullandınız. Scikit-learn'ün veri sınıflandırmak için sağladığı birçok yöntemi okumak için biraz vakit ayırın. Arka tarafta neler olduğunu anlamak için 'çözücü' kavramını derinlemesine inceleyin.

Ders sonrası kısa sınavı

Gözden geçirme & kendi kendine çalışma

Bu deste lojistik regresyonun arkasındaki matematiği derinlemesine inceleyin.

Ödev

Çözücüleri çalışın