Lazy Predict

Sınıflandırma ve regresyon algoritması için en iyi sonucu veren algoritmayı hızlıca seçmek

Posted on February 21, 2023

Lazy Predict kütüphanesi, Python'da kullanıcı tarafından verilen veri kümesine göre birçok makine öğrenimi algoritmasını otomatik olarak test eder ve sonuçları bir tablo şeklinde görüntüler.

  • Makine öğrenimi modelleri, karmaşık bir yapıya sahip olabilir ve uygun bir hiperparametre ayarlaması gerektirir.
  • Model seçimi ve uygun hiperparametre ayarlaması için, birçok deneme ve yanılma süreci gereklidir.
  • Bu süreci kolaylaştırmak için Lazy Predict kütüphanesi geliştirilmiştir.
  • Bu kütüphane, bir dizi sınıflandırma ve regresyon algoritması için varsayılan hiperparametreler kullanarak, model performansını hızlı bir şekilde test etmek ve hangi algoritmanın veri kümesi için en iyi performansı gösterdiğini belirlemek için kullanılabilir. Bu, daha gelişmiş bir hiperparametre ayarlaması yapmak için iyi bir başlangıç noktası olabilir.

    Lazy Predict kütüphanesini pip aracılığıyla yükleyebiliriz.

    pip install lazypredict

    Aşağıdaki kod Lazy Predict kütüphanesinin kullanımına bir örnektir

    from lazypredict.Supervised import LazyClassifier
    from sklearn.datasets import load_digits
    from sklearn.model_selection import train_test_split
    
    data = load_digits()
    X = data.data
    y= data.target
    
    X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=.3,random_state =12)
    
    clf = LazyClassifier(verbose=0,ignore_warnings=True, custom_metric=None)
    models,predictions = clf.fit(X_train, X_test, y_train, y_test)
    
    print(models)

    Kodun çıktısı aşağıdaki gibidir

    100%|█████████████████████████████████████████████████████████████████| 29/29 [00:03<00:00,  7.60it/s]
                                   Accuracy  Balanced Accuracy ROC AUC  F1 Score  \
    Model
    ExtraTreesClassifier               0.98               0.98    None      0.98
    SVC                                0.98               0.98    None      0.98
    RandomForestClassifier             0.97               0.97    None      0.97
    LGBMClassifier                     0.97               0.97    None      0.97
    LogisticRegression                 0.97               0.97    None      0.97
    XGBClassifier                      0.96               0.96    None      0.96
    KNeighborsClassifier               0.96               0.96    None      0.96
    CalibratedClassifierCV             0.96               0.96    None      0.96
    LinearSVC                          0.95               0.95    None      0.95
    PassiveAggressiveClassifier        0.95               0.95    None      0.95
    SGDClassifier                      0.94               0.94    None      0.95
    LinearDiscriminantAnalysis         0.94               0.94    None      0.94
    NuSVC                              0.94               0.94    None      0.94
    LabelSpreading                     0.94               0.94    None      0.94
    LabelPropagation                   0.94               0.94    None      0.94
    Perceptron                         0.94               0.94    None      0.94
    RidgeClassifierCV                  0.93               0.93    None      0.93
    RidgeClassifier                    0.93               0.93    None      0.93
    BaggingClassifier                  0.91               0.91    None      0.91
    NearestCentroid                    0.88               0.88    None      0.88
    BernoulliNB                        0.88               0.88    None      0.88
    QuadraticDiscriminantAnalysis      0.83               0.84    None      0.82
    DecisionTreeClassifier             0.84               0.84    None      0.84
    GaussianNB                         0.79               0.79    None      0.79
    ExtraTreeClassifier                0.77               0.77    None      0.77
    AdaBoostClassifier                 0.30               0.33    None      0.22
    DummyClassifier                    0.09               0.10    None      0.01
    
                                   Time Taken
    Model
    ExtraTreesClassifier                 0.21
    SVC                                  0.09
    RandomForestClassifier               0.30
    LGBMClassifier                       0.66
    LogisticRegression                   0.13
    XGBClassifier                        0.43
    KNeighborsClassifier                 0.05
    CalibratedClassifierCV               0.63
    LinearSVC                            0.14
    PassiveAggressiveClassifier          0.05
    SGDClassifier                        0.05
    LinearDiscriminantAnalysis           0.04
    NuSVC                                0.18
    LabelSpreading                       0.14
    LabelPropagation                     0.16
    Perceptron                           0.03
    RidgeClassifierCV                    0.04
    RidgeClassifier                      0.01
    BaggingClassifier                    0.13
    NearestCentroid                      0.02
    BernoulliNB                          0.01
    QuadraticDiscriminantAnalysis        0.05
    DecisionTreeClassifier               0.02
    GaussianNB                           0.02
    ExtraTreeClassifier                  0.01
    AdaBoostClassifier                   0.22
    DummyClassifier                      0.01  

    "KNeighborsClassifier" için sonucu test edebiliriz

    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.datasets import load_digits
    from sklearn.model_selection import train_test_split
    
    # Veri kümesini yükle
    digits = load_digits()
    
    # Verileri ve hedef değişkeni (etiketleri) ayır
    X = digits.data
    y = digits.target
    
    # Eğitim ve test setlerini ayır
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=12)
    
    # KNeighborsClassifier sınıfını kullanarak bir sınıflandırıcı oluştur
    knn = KNeighborsClassifier(n_neighbors=3)
    
    # Sınıflandırıcıyı eğit
    knn.fit(X_train, y_train)
    
    # Test seti üzerinde tahmin yap
    y_pred = knn.predict(X_test)
    
    # Doğruluk oranını hesapla
    accuracy = knn.score(X_test, y_test)
    
    # Sonuçları yazdır
    # print("Tahminler:", y_pred)
    # print("Gerçek Değerler:", y_test)
    print("Doğruluk Oranı:", accuracy)
    

    Kodun çıktısı aşağıdaki gibidir. Bu sonuç yuvarlandığında "lazypredict" ile aynı değere sahiptir. Karşılaştırma yaparken test_size ve random_state değerlerinin aynı olmasına dikkat edilmelidir.

    Doğruluk Oranı: 0.9851851851851852

    Veri kümesi büyük ve yüksek boyutlu olduğunda veya özel bir makine öğrenimi algoritması kullanmanız gerektiğinde Lazy Predict kullanımı sınırlı olabilir. Aşağıdaki kodda "fashion mnist" dataset i kullanılmıştır. GPU kullanılmadığı için sınırlı sayıda örneklem ile kod çalıştırılmaktadır. Aksi takdirde kodun çalışması çok çok uzun sürebilir .

    Bu tür durumlarda tüm modellerin değilde belirli modellerin ölçümü yapılabilir. Bunun için LazyClassifier'in "classifiers" özelliği kullanılacaktır.

    import tensorflow as tf
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from lazypredict.Supervised import LazyClassifier
    
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.neighbors import KNeighborsClassifier
    
    from sklearn.linear_model import LogisticRegression
    from sklearn.ensemble import AdaBoostClassifier
    
    # Load Fashion-MNIST dataset
    (x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()
    
    # Select first 1000 images
    x_train = x_train[:1000]
    y_train = y_train[:1000]
    
    x_test = x_test[:1000]
    y_test = y_test[:1000]
    
    # Flatten images to 1D array
    x_train = x_train.reshape((x_train.shape[0], -1))
    x_test = x_test.reshape((x_test.shape[0], -1))
    
    # Split dataset into train and test sets
    x_train, x_val, y_train, y_val = train_test_split(x_train, y_train, test_size=0.2, random_state=42)
    
    # Normalize data
    scaler = StandardScaler()
    x_train = scaler.fit_transform(x_train)
    x_val = scaler.transform(x_val)
    x_test = scaler.transform(x_test)
    
    # Define the models you want to test
    classifiers = [LogisticRegression,AdaBoostClassifier, KNeighborsClassifier, RandomForestClassifier]
    
    # Initialize LazyClassifier with classifiers parameter
    #clf = LazyClassifier(verbose=0, ignore_warnings=True, custom_metric=None)
    clf = LazyClassifier(verbose=0, ignore_warnings=True, custom_metric=None,  classifiers =classifiers)
    
    # Fit and train the model
    models, predictions = clf.fit(x_train, x_val, y_train, y_val)
    
    # Print the performance summary of the models
    print(models)
    

    Kodun çıktısı aşağıdaki gibidir

    100%|█████████████████████████████████████████████████████████████████| 4/4 [00:03<00:00,  1.31it/s]
                            Accuracy  Balanced Accuracy ROC AUC  F1 Score  \
    Model
    RandomForestClassifier      0.83               0.83    None      0.82
    LogisticRegression          0.78               0.77    None      0.77
    KNeighborsClassifier        0.73               0.73    None      0.73
    AdaBoostClassifier          0.22               0.20    None      0.10
    
                            Time Taken
    Model
    RandomForestClassifier        0.92
    LogisticRegression            0.25
    KNeighborsClassifier          0.08
    AdaBoostClassifier            1.82