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/translations/tr/4-Classification/2-Classifiers-1/README.md

16 KiB

Yemek Kültürü Sınıflandırıcıları 1

Bu derste, önceki derste kaydettiğiniz dengeli ve temiz yemek kültürleri verileriyle dolu veri setini kullanacaksınız.

Bu veri setini, bir grup malzemeye dayanarak belirli bir ulusal yemek kültürünü tahmin etmek için çeşitli sınıflandırıcılarla kullanacaksınız. Bunu yaparken, algoritmaların sınıflandırma görevlerinde nasıl kullanılabileceği hakkında daha fazla bilgi edineceksiniz.

Ders Öncesi Testi

Hazırlık

1. Ders'i tamamladığınızı varsayarak, bu dört ders için kök /data klasöründe cleaned_cuisines.csv dosyasının bulunduğundan emin olun.

Alıştırma - ulusal bir yemek kültürünü tahmin etme

  1. Bu dersin notebook.ipynb klasöründe çalışarak, Pandas kütüphanesiyle birlikte bu dosyayı içe aktarın:

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

    Veriler şu şekilde 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 içe aktarı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ğitim için iki veri çerçevesine ayırın. cuisine etiketler veri çerçevesi 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 sütununu ve cuisine sütununu drop() kullanarak kaldırın. Geri kalan verileri eğitilebilir özellikler olarak kaydedin:

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

    Özellikleriniz şu şekilde görünecek:

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 0
1 1 0 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 0
3 0 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 0

Artık modelinizi eğitmeye hazırsınız!

Sınıflandırıcı Seçimi

Verileriniz temiz ve eğitime hazır olduğuna göre, iş için hangi algoritmayı kullanacağınıza karar vermelisiniz.

Scikit-learn, sınıflandırmayı Denetimli Öğrenme altında gruplandırır ve bu kategoride birçok sınıflandırma yöntemi bulabilirsiniz. Çeşitlilik ilk bakışta oldukça kafa karıştırıcı olabilir. Aşağıdaki yöntemlerin tümü sınıflandırma tekniklerini içerir:

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

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

Hangi sınıflandırıcıyı seçmeli?

Peki, hangi sınıflandırıcıyı seçmelisiniz? Çoğu zaman, birkaçını deneyip iyi bir sonuç aramak bir test yöntemi olabilir. Scikit-learn, oluşturulmuş bir veri setinde KNeighbors, SVC iki şekilde, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB ve QuadraticDiscriminationAnalysis'ı karşılaştıran bir yan yana karşılaştırma sunar ve sonuçları görselleştirir:

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

Grafikler Scikit-learn belgelerinde oluşturulmuştur

AutoML, bu karşılaştırmaları bulutta çalıştırarak ve verileriniz için en iyi algoritmayı seçmenize olanak tanıyarak bu sorunu kolayca çözer. Buradan deneyin

Daha iyi bir yaklaşım

Ancak rastgele tahmin etmekten daha iyi bir yol, bu indirilebilir ML Cheat Sheet üzerindeki fikirleri takip etmektir. Burada, çok sınıflı problemimiz için bazı seçeneklerimiz olduğunu keşfediyoruz:

çok sınıflı problemler için cheat sheet

Microsoft'un Algoritma Cheat Sheet'inin bir bölümü, çok sınıflı sınıflandırma seçeneklerini detaylandırıyor

Bu cheat sheet'i indirin, yazdırın ve duvarınıza asın!

Mantık Yürütme

Kısıtlamalarımızı göz önünde bulundurarak farklı yaklaşımları mantıkla değerlendirelim:

  • Sinir ağları çok ağır. Temiz ama minimal veri setimiz ve eğitimi yerel olarak notebooklar üzerinden çalıştırdığımız gerçeği göz önüne alındığında, sinir ağları bu görev için çok ağırdır.
  • İki sınıflı sınıflandırıcı yok. İki sınıflı bir sınıflandırıcı kullanmıyoruz, bu nedenle one-vs-all seçeneği eleniyor.
  • Karar ağacı veya lojistik regresyon işe yarayabilir. Çok sınıflı veriler için bir karar ağacı veya lojistik regresyon işe yarayabilir.
  • Çok sınıflı Boosted Karar Ağaçları farklı bir problemi çözer. Çok sınıflı Boosted Karar Ağacı, sıralamalar oluşturmak için tasarlanmış parametrik olmayan görevler için en uygundur, bu nedenle bizim için kullanışlı değildir.

Scikit-learn Kullanımı

Verilerimizi analiz etmek için Scikit-learn kullanacağız. Ancak, Scikit-learn'de lojistik regresyonu kullanmanın birçok yolu vardır. Geçilecek parametrelere bir göz atın.

Temelde, Scikit-learn'den lojistik regresyon yapmasını istediğimizde belirtmemiz gereken iki önemli parametre vardır - multi_class ve solver. multi_class değeri belirli bir davranışı uygular. Solver'ın değeri ise hangi algoritmanın kullanılacağını belirler. Tüm solver'lar tüm multi_class değerleriyle eşleştirilemez.

Belgelerden öğrendiğimize göre, çok sınıflı durumda eğitim algoritması:

  • one-vs-rest (OvR) şemasını kullanır, eğer multi_class seçeneği ovr olarak ayarlanmışsa
  • çapraz entropi kaybını kullanır, eğer multi_class seçeneği multinomial olarak ayarlanmışsa. (Şu anda multinomial seçeneği yalnızca lbfgs, sag, saga ve newton-cg solver'ları tarafından desteklenmektedir.)

🎓 Buradaki 'şema', 'ovr' (one-vs-rest) veya '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 almasına olanak tanır. kaynak

🎓 'solver', "optimizasyon probleminde kullanılacak algoritma" olarak tanımlanır. kaynak.

Scikit-learn, solver'ların farklı veri yapılarının sunduğu zorlukları nasıl ele aldığınııklamak için şu tabloyu sunar:

solver'lar

Alıştırma - veriyi bölmek

Son dersinizde lojistik regresyon hakkında bilgi edindiğiniz için, ilk eğitim denemeniz için lojistik regresyona odaklanabiliriz. Verilerinizi train_test_split() çağırarak eğitim ve test gruplarına ayırı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 uygulamak

Çok sınıflı durumu kullandığınız için hangi şemayı kullanacağınızı ve hangi solver'ı ayarlayacağınızı seçmeniz gerekiyor. Multi_class ayarı ovr ve solver ayarı liblinear olan LogisticRegression kullanarak eğitin.

  1. Multi_class ovr ve solver liblinear olarak ayarlanmış 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))
    

    Varsayılan olarak sıkça ayarlanan lbfgs gibi farklı bir solver deneyin Not: Verilerinizi düzleştirmeniz gerektiğinde Pandas ravel fonksiyonunu kullanın. Doğruluk oranı %80'in üzerinde oldukça iyi!

  2. Bu modeli bir veri satırını test ederek (#50) çalışırken görebilirsiniz:

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

    Sonuç yazdırılır:

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

    Farklı bir satır numarası deneyin ve sonuçları kontrol edin.

  3. Daha derine inerek, bu tahminin 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ç yazdırılır - Hint mutfağı en iyi tahmin olarak, yüksek bir olasılıkla:

    0
    indian 0.715851
    chinese 0.229475
    japanese 0.029763
    korean 0.017277
    thai 0.007634

    Modelin neden Hint mutfağı olduğundan bu kadar emin olduğunu açıklayabilir misiniz?

  4. Regresyon derslerinde yaptığınız gibi bir sınıflandırma raporu yazdırarak daha fazla ayrıntı 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, temizlenmiş verilerinizi kullanarak bir dizi malzemeye dayanarak ulusal bir mutfağı tahmin edebilen bir makine öğrenimi modeli oluşturdunuz. Scikit-learn'ün verileri sınıflandırmak için sunduğu birçok seçeneği incelemek için biraz zaman ayırın. Sahne arkasında neler olduğunu anlamak için 'solver' kavramını daha derinlemesine araştırın.

Ders sonrası test

Gözden Geçirme ve Kendi Kendine Çalışma

Lojistik regresyonun matematiğini biraz daha derinlemesine inceleyin: bu derste

Ödev

Solver'ları inceleyin


Feragatname:
Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çevirilerin hata veya yanlışlık içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalardan sorumlu değiliz.