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.az.md

16 KiB

Mətbəx qruplaşdırıcıları - hissə 1

Bu dərsdə əvvəlki dərsdən əldə etdiyimiz balanslı və təmizlənmiş mətbəx datasetindən istifadə edəcəksiniz.

Bu dataseti müxtəlif qruplaşdırıcılarda istifadə edərək inqrediyentlər əsasında milli mətbəxləri təxmin edəcəksiniz. Bunu edərkən alqoritmi başqa hansı qruplaşdırma tapşırıqlarında istifadə edə biləcəyinizi də öyrənəcəksiniz.

Mühazirədən əvvəl test

Hazırlıq

Sizin 1-ci dərsi bitirdiyinizi güman edirik. Əlavə olaraq isə bu 4 dərsdə istifadə edəcəyimiz cleaned_cuisines.csv faylının /data qovluğunda olduğundan əmin olun.

Tapşırıq - milli mətbəxi təxmin et

  1. Bu dərsin qovluğunda olan notebook.ipynb faylını açın və aşağıdakı kodu (Pandas kitabxanasını) daxil edin:

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

    Yuxarıdakı kod, məlumatları belə çap edəcəkdir:

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. İndi isə digər kitabxanaları da əlavə edin:

    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 və y koordinatlarını öyrənmək üçün iki data qrupuna ayırın. cuisine data qrupunun adı ola bilər:

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

    Nəticə belə görünəcək:

    0    indian
    1    indian
    2    indian
    3    indian
    4    indian
    Name: cuisine, dtype: object
    
  3. Unnamed: 0 və cuisine sütunlarını drop() kodu ilə silin. Qalan məlumatları öyrənmə alqoritmi üçün saxlayın:

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

    Artıq məlumatlar belə olacaq:

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

Modelimizi öyrətməyə hazır sayılırıq!

Qruplaşdırıcı seçimi

Artıq datanız təmizlənib və öyrədilmək üçün hazırdır. İndi siz bu iş üçün hansı alqoritmi seçməli olduğunuza qərar verməlisiniz.

Scikit-learn kitabxanası qruplaşdırmanı "Supervised Learning (Nəzarətli öyrənmə)" adı altında qruplaşdırır və siz burada çoxlu qruplaşdırma üsullarını tapa bilərsiniz. Seçimlər ilk baxışdan həddindən artıq çox görünəcəkdir. Aşağıdakı metodların hamısı qruplaşdırma texnikalarıdır:

  • Linear Models (Xətti modellər)
  • Support Vector Machines (Dəstək Vektor Maşını)
  • Stochastic Gradient Descent (Stoxastik qradient eniş)
  • Nearest Neighbors (Yaxın qonşular)
  • Gaussian Processes (Qauss emalları)
  • Decision Trees (Qərar sxemləri)
  • Ensemble methods (voting Classifier) Ansambl üsullar (səsvermə əsaslı qruplaşdırma)
  • Çoxsaylı etiket və çoxsaylı çıxış alqoritmləri (multiclass and multilabel classification, multiclass-multioutput classification)

Siz həmçinin qruplaşdırma üçün neyron şəbəkələr də istifadə edə bilərsiniz, lakin bu mövzu bizim dərsimizdən kənardır.

Hansı qruplaşdırıcı seçilməlidir?

İndi siz hansı qruplaşdırıcı seçməlisiniz? Adətən bunun cavabını bir çox üsulu yoxlamaq və daha yaxşı nəticə göstərəni seçməklə tapmaq olur. Yaratdığınız data qruplarını Scikit-learn kitabxanasında yanbayan müqayisə edə bilərsiniz. Aşağıda nümunə kimi KNeighbors, SVC two ways, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB and QuadraticDiscrinationAnalysis alqoritmləri müqayisəsi göstərilib:

qruplaşdırıcıların müqayisəsi

Qrafiklər Scikit-learn sənədlərindən yaradılmışdır

Auto ML platforması bulud mühitində belə nəticələri özü müqayisə edərək sizə ən yaxşı alqoritmi tapmaqda kömək edə bilər. Buradan pulsuz yoxlaya bilərsiniz.

Daha yaxşı yanaşma

Özünüz təxmin etməkdənsə, ML hazır cavablar siyahısından ideyalara əməl edərək daha yaxşı seçim edə bilərsiniz. Misal üçün bizim çoxsaylı etiketləndirmə məsələmizdə bir neçə seçim vardır:

çoxsaylı etiketləmə problemlərinə hazır cavablar

Çoxsaylı etiket qruplaşdırma seçimləri üçün Microsoft Alqoritm Hazır Cavablar siyahısından bir fraqment

✅ Bu hazır cavablar siyahısını yüklə, çap et və divardan as!

Əsaslandırma

Gəlin baxaq biz seçimimizi aşağıdakı şərtlərə əsasən də əsaslandıra bilirikmi:

  • Neyron şəbəkələr çox qəlizdir. Bizim təmiz və sadə datasetimizi yalnız öz komputerimizdə öyrədəcəyimizi nəzərə alsaq, neyron şəbəkələr bu tapşırıq üçün çox çətin bir seçimdir.
  • İki-etiket qruplaşdırıcısına yox. Biz iki-etiket qruplaşdırıcısı istifadə etmirik, buna görə də digər oxşar seçimləri nəzərə almırıq.
  • Qərar sxemləri və ya logistik reqressiya işi görə bilər. Qərar sxemi işimizə yaraya bilər. Logistik reqressiyə isə çoxsaylı etiket datası üçün istifadə oluna bilər.
  • Çoxsaylı etiket gücləndirilmiş qərar sxemləri başqa problemləri həll edir. Çoxsaylı etiket gücləndirilmiş qərar sxemləri parametirsiz tapşırıqlar üçün daha uyğundur, misal üçün sıralandırma tapşırıqları. Lakin bizim üçün uyğun deyil.

Scikit-learn istifadə etmək

Data analizi üçün Scikit-learn istifadə edəcəyik. Scikit-learn kitabxanasında logistik reqressiyanın istifadəsi üçün bir çox üsul mövcuddur. Hansı parametrlərin ötürülməsinin lazım olduğunu bilmək üçün sənədlə tanış olun.

Scikit-learn kitabxanasında logistik reqressiyanı icra etmək üçün bizə əsas iki parametr ötürmək vacibdir - multi_class və solver. multi_class parametri müəyyən olunmuş davranışı bildirir. solver parametri isə istifadə olunacaq alqoritmi təyin edir. Nəzərə almaq lazımdır ki, hər alqoritm multi_class parametri ilə uyğunlaşmır.

Sənədlərə əsasən multi_class seçimində aşağıdakı öyrənmə alqoritmləri seçilə bilər:

  • one-vs-rest (OvR) sxemi istifadə edənlər, əgər multi_class parametri ovr seçilmişdirsə.
  • cross-entropy loss (çarpaz-entropiya itkisi) istifadə edənlər, əgər multi_class parametri multinomial seçilmişdirsə. (Hazırda multinomial seçimi yalnız ‘lbfgs’, ‘sag’, ‘saga’ və ‘newton-cg’ alqoritmləri tərəfindən dəstəklənir)"

🎓 Burada 'scheme' parametri 'ovr' (one-vs-rest) və ya 'multinomial' ola bilər. Logistik reqressiya əslində ikili qruplaşdırma üçün tərtib olunduğu üçün bu sxemlər çoxsaylı etiket qruplaşdırma tapşırıqları üçün daha uyğundur. mənbə

🎓 'solver' parametri "optimizasiya üçün istifadə olunacaq alqoritmi" nəzərdə tutur. mənbə.

Aşağıdakı cədvəldə Scikit-learn kitabxanasındakı alqoritmlərlə müxtəlif növ tapşırıqları və data strukturlarını necə idarə edə biləcəyiniz göstərilib:

alqoritmlər

Tapşırıq - datanı bölün

Biz indi ilk öyrənmə cəhdimizdə logistik reqressiyasına fokuslana bilərik. train_test_split() istifadə etməklə datanı öyrətmə və test üçün iki qrupa ayırın:

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

Tapşırıq - logistik reqressiyanın tətbiqi

Biz çoxsaylı etiket məsələsinə baxdığımız üçün scheme və solver parametrləri üçün müvafiq dəyərləri ötürməliyik. Bunun üçün çoxsaylı etiket (multiclass ovr) və liblinear alqoritmini seçin.

  1. Logistik reqressiya modeli yaradın və ovr dəyərini multi_class parametri, liblinear dəyərini isə solver parametri kimi ötürün:

    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))
    

    ✅ Başqa bir alqoritmi seçib yoxlayın, misal üçün lbfgs.

    Qeyd. Pandas kitabxanasında ravel funksiyasını istifadə edərək data modelinizi daha səthi (az-ölçülü) formaya keçirə bilərsiniz.

    Dəqiqliyin 80%-dən yuxarı olması yaxşıdır!

  2. Siz bu modelin işlədiyini bir sətir data (#50-ci sıra) ilə yoxlaya bilərsiniz:

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

    Nəticə belə çap olunacaq:

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

    ✅ Fərqli sıra nömrələrini yoxla və nəticəyə bax.

  3. Daha dərinə getsək, qruplaşdırma modelinin dəqiqliyini belə yoxlaya bilərsiniz:

    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()
    

    Nəticə çap olundu - Hindisdan mətbəxi ən yuxarı dəqiqliklə qruplaşdırılır:

    0
    indian 0.715851
    chinese 0.229475
    japanese 0.029763
    korean 0.017277
    thai 0.007634

    ✅ Bu modelin Hindistan mətbəxini nə üçün seçdiyini izah edə bilərsən?

  4. Daha çox məlumat almaq üçün qruplaşdırma hesabatını çap 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

🚀 Məşğələ

Bu dərsdə siz təmizlənmiş data istifadə edərək inqrediyentlər əsasında milli mətbəxi təxmin edə biləcək maşın öyrənməsi modelini qurdunuz. Scikit-learn kitabxanası istifadə etməklə daha hansı üsullarla qruplaşdırma etmək mümkün olduğunu oxuyun. "Solver (alqoritm)" anlayışı üzərində daha dərinə gedərək arxa planda necə işlədiyini öyrənin.

Mühazirə sonrası test

Təkrarlayın və özünüz öyrənin

Logistik reqressiya metodunda hansı riyazı modellər istifadə olunduğunu bu dərsdə daha dərindən öyrənin.

Tapşırıq

Qruplaşdırıcı alqoritmlərini araşdır