Scikit-Learn Eğitimi: Nasıl Kurulur ve Scikit-Learn Örnekleri

Scikit-learn nedir?

Scikit-öğrenme açık kaynaklı Python makine öğrenimi için kütüphane. KNN, XGBoost, rastgele orman ve SVM gibi son teknoloji algoritmaları destekler. NumPy üzerine kurulmuştur. Scikit-learn, Kaggle rekabetinde ve önde gelen teknoloji şirketlerinde yaygın olarak kullanılır. Ön işleme, boyut azaltma (parametre seçimi), sınıflandırma, regresyon, kümeleme ve model seçiminde yardımcı olur.

Scikit-learn tüm açık kaynak kütüphaneler arasında en iyi dokümantasyona sahiptir. Size şu adreste etkileşimli bir grafik sunar: https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html.

Scikit Learn Nasıl Çalışır?
Scikit Learn nasıl çalışır?

Scikit-learn'ün kullanımı çok zor değildir ve mükemmel sonuçlar verir. Ancak scikit Learn paralel hesaplamaları desteklemez. Bununla derin bir öğrenme algoritması çalıştırmak mümkündür ancak özellikle TensorFlow'u nasıl kullanacağınızı biliyorsanız bu optimal bir çözüm değildir.

Scikit-learn Nasıl İndirilir ve Kurulur

Şimdi bunda Python Scikit-learn eğitimi, Scikit-learn'ün nasıl indirilip kurulacağını öğreneceğiz:

Seçenek 1: AWS

scikit-learn AWS üzerinden kullanılabilir. Lütfen başvurmak Scikit-learn'in önceden yüklendiği liman işçisi görüntüsü.

Geliştirici sürümünü kullanmak için şu komutu kullanın: Jupyter

import sys
!{sys.executable} -m pip install git+git://github.com/scikit-learn/scikit-learn.git

Seçenek 2: Mac veya Windows Anaconda'yı kullanma

Anaconda kurulumu hakkında bilgi edinmek için bkz. https://www.guru99.com/download-install-tensorflow.html

Son zamanlarda scikit geliştiricileri, mevcut sürümde karşılaşılan yaygın sorunları çözen bir geliştirme sürümü yayınladı. Güncel sürüm yerine geliştirici sürümünü kullanmayı daha uygun bulduk.

Conda Environment ile scikit-learn nasıl kurulur

Scikit-learn'ü conda ortamıyla yüklediyseniz lütfen 0.20 sürümüne güncelleme adımını izleyin.

) 1 Adım Tensorflow ortamını etkinleştirin

source activate hello-tf

) 2 Adım Conda komutunu kullanarak scikit yalınını kaldırın

conda remove scikit-learn

) 3 Adım Geliştirici sürümünü yükleyin.
Scikit Learn geliştirici sürümünü gerekli kütüphanelerle birlikte yükleyin.

conda install -c anaconda git
pip install Cython
pip install h5py
pip install git+git://github.com/scikit-learn/scikit-learn.git

NOT: Windows kullanıcının yüklemesi gerekecek Microsoft Görsel C++ 14. Şu adresten alabilirsiniz: okuyun

Makine Öğrenimi ile Scikit-Learn Örneği

Bu Scikit eğitimi iki bölüme ayrılmıştır:

  1. Scikit-learn ile makine öğrenimi
  2. LIME ile modelinize nasıl güvenebilirsiniz?

İlk bölümde bir boru hattının nasıl oluşturulacağı, bir modelin nasıl oluşturulacağı ve hiperparametrelerin nasıl ayarlanacağı ayrıntılarıyla açıklanırken, ikinci bölümde model seçimi açısından son durum sunulmaktadır.

Adım 1) Verileri içe aktarın

Bu Scikit öğrenme eğitimi sırasında yetişkinlere yönelik veri kümesini kullanacaksınız.

Bu veri kümesinin arka planı için bkz. Tanımlayıcı istatistikler hakkında daha fazla bilgi edinmek istiyorsanız lütfen Dalış ve Genel Bakış araçlarını kullanın.

Toplam Bu eğitimde Dalış ve Genel Bakış hakkında daha fazla bilgi edinin

Veri kümesini Pandas ile içe aktarırsınız. Sürekli değişkenlerin türünü float biçiminde dönüştürmeniz gerektiğini unutmayın.

Bu veri kümesi sekiz kategorik değişken içerir:

Kategorik değişkenler CATE_FEATURES'ta listelenmiştir

  • çalışma sınıfı
  • eğitim
  • evlilik
  • işgal
  • ilişki
  • yarış
  • seks
  • ana vatan

ayrıca altı sürekli değişken:

Sürekli değişkenler CONTI_FEATURES içinde listelenmiştir

  • yaş
  • fnlwgt
  • eğitim_num
  • Sermaye kazancı
  • sermaye_kaybı
  • saat_hafta

Hangi sütunları kullandığımız hakkında daha iyi bir fikir sahibi olmanız için listeyi elle doldurduğumuzu unutmayın. Kategorik veya sürekli bir liste oluşturmanın daha hızlı bir yolu şunu kullanmaktır:

## List Categorical
CATE_FEATURES = df_train.iloc[:,:-1].select_dtypes('object').columns
print(CATE_FEATURES)

## List continuous
CONTI_FEATURES =  df_train._get_numeric_data()
print(CONTI_FEATURES)

Verileri içe aktarmak için gereken kod:

# Import dataset
import pandas as pd

## Define path data
COLUMNS = ['age','workclass', 'fnlwgt', 'education', 'education_num', 'marital',
           'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss',
           'hours_week', 'native_country', 'label']
### Define continuous list
CONTI_FEATURES  = ['age', 'fnlwgt','capital_gain', 'education_num', 'capital_loss', 'hours_week']
### Define categorical list
CATE_FEATURES = ['workclass', 'education', 'marital', 'occupation', 'relationship', 'race', 'sex', 'native_country']

## Prepare the data
features = ['age','workclass', 'fnlwgt', 'education', 'education_num', 'marital',
           'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss',
           'hours_week', 'native_country']

PATH = "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data"

df_train = pd.read_csv(PATH, skipinitialspace=True, names = COLUMNS, index_col=False)
df_train[CONTI_FEATURES] =df_train[CONTI_FEATURES].astype('float64')
df_train.describe()
yaş fnlwgt eğitim_num Sermaye kazancı sermaye_kaybı saat_hafta
saymak 32561.000000 3.256100e + 04 32561.000000 32561.000000 32561.000000 32561.000000
ortalama 38.581647 1.897784e + 05 10.080679 1077.648844 87.303830 40.437456
std 13.640433 1.055500e + 05 2.572720 7385.292085 402.960219 12.347429
dk 17.000000 1.228500e + 04 1.000000 0.000000 0.000000 1.000000
25% 28.000000 1.178270e + 05 9.000000 0.000000 0.000000 40.000000
50% 37.000000 1.783560e + 05 10.000000 0.000000 0.000000 40.000000
75% 48.000000 2.370510e + 05 12.000000 0.000000 0.000000 45.000000
maksimum 90.000000 1.484705e + 06 16.000000 99999.000000 4356.000000 99.000000

Native_country özelliklerinin benzersiz değerlerinin sayısını kontrol edebilirsiniz. Hollanda-Hollanda'dan sadece bir hanenin geldiğini görüyorsunuz. Bu hane bize herhangi bir bilgi getirmeyecek ama eğitim sırasında bir hata yapacak.

df_train.native_country.value_counts()
United-States                 29170
Mexico                          643
?                               583
Philippines                     198
Germany                         137
Canada                          121
Puerto-Rico                     114
El-Salvador                     106
India                           100
Cuba                             95
England                          90
Jamaica                          81
South                            80
China                            75
Italy                            73
Dominican-Republic               70
Vietnam                          67
Guatemala                        64
Japan                            62
Poland                           60
Columbia                         59
Taiwan                           51
Haiti                            44
Iran                             43
Portugal                         37
Nicaragua                        34
Peru                             31
France                           29
Greece                           29
Ecuador                          28
Ireland                          24
Hong                             20
Cambodia                         19
Trinadad&Tobago                  19
Thailand                         18
Laos                             18
Yugoslavia                       16
Outlying-US(Guam-USVI-etc)       14
Honduras                         13
Hungary                          13
Scotland                         12
Holand-Netherlands                1
Name: native_country, dtype: int64

Bilgilendirici olmayan bu satırı veri kümesinden hariç tutabilirsiniz

## Drop Netherland, because only one row
df_train = df_train[df_train.native_country != "Holand-Netherlands"]

Daha sonra sürekli özelliklerin konumunu bir listede saklarsınız. Boru hattını oluşturmak için bir sonraki adımda buna ihtiyacınız olacak.

Aşağıdaki kod, CONTI_FEATURES içindeki tüm sütun adları üzerinde döngü yapacak ve konumunu (yani numarasını) alacak ve ardından bunu conti_features adlı bir listeye ekleyecektir.

## Get the column index of the categorical features
conti_features = []
for i in CONTI_FEATURES:
    position = df_train.columns.get_loc(i)
    conti_features.append(position)
print(conti_features)  
[0, 2, 10, 4, 11, 12]

Aşağıdaki kod yukarıdakiyle aynı işi yapar ancak kategorik değişken için. Aşağıdaki kod, kategorik özellikler dışında daha önce yaptıklarınızı tekrarlar.

## Get the column index of the categorical features
categorical_features = []
for i in CATE_FEATURES:
    position = df_train.columns.get_loc(i)
    categorical_features.append(position)
print(categorical_features)  
[1, 3, 5, 6, 7, 8, 9, 13]

Veri setine göz atabilirsiniz. Her kategorik özelliğin bir dize olduğunu unutmayın. Bir modeli dize değeriyle besleyemezsiniz. Veri kümesini yapay bir değişken kullanarak dönüştürmeniz gerekir.

df_train.head(5)

Aslında özellikteki her grup için bir sütun oluşturmanız gerekiyor. Öncelikle gereken toplam sütun miktarını hesaplamak için aşağıdaki kodu çalıştırabilirsiniz.

print(df_train[CATE_FEATURES].nunique(),
      'There are',sum(df_train[CATE_FEATURES].nunique()), 'groups in the whole dataset')
workclass          9
education         16
marital            7
occupation        15
relationship       6
race               5
sex                2
native_country    41
dtype: int64 There are 101 groups in the whole dataset

Tüm veri seti yukarıda gösterildiği gibi 101 grup içerir. Örneğin, workclass'ın özellikleri dokuz gruba sahiptir. Grupların adını aşağıdaki kodlarla görselleştirebilirsiniz

Unique(), kategorik özelliklerin benzersiz değerlerini döndürür.

for i in CATE_FEATURES:
    print(df_train[i].unique())
['State-gov' 'Self-emp-not-inc' 'Private' 'Federal-gov' 'Local-gov' '?'
 'Self-emp-inc' 'Without-pay' 'Never-worked']
['Bachelors' 'HS-grad' '11th' 'Masters' '9th' 'Some-college' 'Assoc-acdm'
 'Assoc-voc' '7th-8th' 'Doctorate' 'Prof-school' '5th-6th' '10th'
 '1st-4th' 'Preschool' '12th']
['Never-married' 'Married-civ-spouse' 'Divorced' 'Married-spouse-absent'
 'Separated' 'Married-AF-spouse' 'Widowed']
['Adm-clerical' 'Exec-managerial' 'Handlers-cleaners' 'Prof-specialty'
 'Other-service' 'Sales' 'Craft-repair' 'Transport-moving'
 'Farming-fishing' 'Machine-op-inspct' 'Tech-support' '?'
 'Protective-serv' 'Armed-Forces' 'Priv-house-serv']
['Not-in-family' 'Husband' 'Wife' 'Own-child' 'Unmarried' 'Other-relative']
['White' 'Black' 'Asian-Pac-Islander' 'Amer-Indian-Eskimo' 'Other']
['Male' 'Female']
['United-States' 'Cuba' 'Jamaica' 'India' '?' 'Mexico' 'South'
 'Puerto-Rico' 'Honduras' 'England' 'Canada' 'Germany' 'Iran'
 'Philippines' 'Italy' 'Poland' 'Columbia' 'Cambodia' 'Thailand' 'Ecuador'
 'Laos' 'Taiwan' 'Haiti' 'Portugal' 'Dominican-Republic' 'El-Salvador'
 'France' 'Guatemala' 'China' 'Japan' 'Yugoslavia' 'Peru'
 'Outlying-US(Guam-USVI-etc)' 'Scotland' 'Trinadad&Tobago' 'Greece'
 'Nicaragua' 'Vietnam' 'Hong' 'Ireland' 'Hungary']

Bu nedenle eğitim veri seti 101 + 7 sütun içerecektir. Son yedi sütun sürekli özelliklerdir.

Scikit-learn dönüşümle ilgilenebilir. İki adımda yapılır:

  • İlk önce dizeyi kimliğe dönüştürmeniz gerekir. Örneğin, State-gov ID 1'e, Self-emp-not-inc ID 2'ye vb. sahip olacaktır. LabelEncoder işlevi bunu sizin için yapar
  • Her kimliği yeni bir sütuna aktarın. Daha önce de belirtildiği gibi veri kümesinde 101 grubun kimliği bulunmaktadır. Bu nedenle, tüm kategorik özellik gruplarını kapsayan 101 sütun olacaktır. Scikit-learn'de bu işlemi gerçekleştiren OneHotEncoder adında bir fonksiyon bulunmaktadır.

Adım 2) Eğitim/test setini oluşturun

Artık veri seti hazır olduğuna göre 80/20'ye bölebiliriz.

Eğitim seti için yüzde 80 ve test seti için yüzde 20.

train_test_split'i kullanabilirsiniz. İlk argüman veri çerçevesinin özellikler ve ikinci argüman ise etiket veri çerçevesidir. Test setinin boyutunu test_size ile belirleyebilirsiniz.

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df_train[features],
                                                    df_train.label,
                                                    test_size = 0.2,
                                                    random_state=0)
X_train.head(5)
print(X_train.shape, X_test.shape)
(26048, 14) (6512, 14)

Adım 3) Boru hattını oluşturun

İşlem hattı, modelin tutarlı verilerle beslenmesini kolaylaştırır.

Arkasındaki fikir, işlemleri gerçekleştirmek için ham verileri bir 'boru hattına' koymaktır.

Örneğin mevcut veri seti ile sürekli değişkenleri standartlaştırmanız ve kategorik verileri dönüştürmeniz gerekiyor. İşlem hattının içinde herhangi bir işlemi gerçekleştirebileceğinizi unutmayın. Örneğin, veri kümesinde 'NA'lar varsa bunları ortalama veya medyanla değiştirebilirsiniz. Ayrıca yeni değişkenler de oluşturabilirsiniz.

Seçeneğiniz var; iki süreci sabit kodlayın veya bir işlem hattı oluşturun. İlk tercih veri sızıntısına yol açabilir ve zamanla tutarsızlıklar yaratabilir. Daha iyi bir seçenek boru hattını kullanmaktır.

from sklearn.preprocessing import StandardScaler, OneHotEncoder, LabelEncoder
from sklearn.compose import ColumnTransformer, make_column_transformer
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression

Boru hattı, lojistik sınıflandırıcıyı beslemeden önce iki işlem gerçekleştirecektir:

  1. Değişkeni standartlaştırın: `StandardScaler()“
  2. Kategorik özellikleri dönüştürün: OneHotEncoder(sparse=False)

Make_column_transformer'ı kullanarak iki adımı gerçekleştirebilirsiniz. Bu işlev scikit-learn'in mevcut sürümünde (0.19) mevcut değildir. Mevcut sürümde etiket kodlayıcıyı ve bir sıcak kodlayıcıyı üretim hattında gerçekleştirmek mümkün değildir. Geliştirici sürümünü kullanmaya karar vermemizin bir nedeni de budur.

make_column_transformer'ın kullanımı kolaydır. Dönüşümün hangi sütunlara uygulanacağını ve hangi dönüşümün işleneceğini tanımlamanız gerekir. Örneğin sürekli özelliği standartlaştırmak için şunları yapabilirsiniz:

  • conti_features, make_column_transformer içindeki StandardScaler().
    • conti_features: sürekli değişkenli liste
    • StandardScaler: değişkeni standartlaştırın

make_column_transformer içindeki OneHotEncoder nesnesi etiketi otomatik olarak kodlar.

preprocess = make_column_transformer(
    (conti_features, StandardScaler()),
    ### Need to be numeric not string to specify columns name 
    (categorical_features, OneHotEncoder(sparse=False))
)

Boru hattının fit_transform ile çalışıp çalışmadığını test edebilirsiniz. Veri kümesi aşağıdaki şekle sahip olmalıdır: 26048, 107

preprocess.fit_transform(X_train).shape
(26048, 107)

Veri transformatörü kullanıma hazırdır. Make_pipeline ile boru hattını oluşturabilirsiniz. Veriler dönüştürüldükten sonra lojistik regresyonu besleyebilirsiniz.

model = make_pipeline(
    preprocess,
    LogisticRegression())

Bir modeli scikit-learn ile eğitmek önemsizdir. Pipeline'dan önce gelen nesne uyumunu, yani modeli kullanmanız gerekir. Doğruluğu scikit-learn kütüphanesindeki puan nesnesi ile yazdırabilirsiniz.

model.fit(X_train, y_train)
print("logistic regression score: %f" % model.score(X_test, y_test))
logistic regression score: 0.850891

Son olarak, tahmin_proba ile sınıfları tahmin edebilirsiniz. Her sınıf için olasılığı döndürür. Toplamının bire eşit olduğunu unutmayın.

model.predict_proba(X_test)
array([[0.83576663, 0.16423337],
       [0.94582765, 0.05417235],
       [0.64760587, 0.35239413],
       ...,
       [0.99639252, 0.00360748],
       [0.02072181, 0.97927819],
       [0.56781353, 0.43218647]])

Adım 4) Izgara aramasında boru hattımızı kullanma

Hiperparametreyi (gizli birimler gibi ağ yapısını belirleyen değişkenler) ayarlamak sıkıcı ve yorucu olabilir.

Modeli değerlendirmenin bir yolu eğitim setinin boyutunu değiştirmek ve performansları değerlendirmek olabilir.

Puan metriklerini görmek için bu yöntemi on kez tekrarlayabilirsiniz. Ancak bu çok fazla iş.

Bunun yerine scikit-learn, parametre ayarlama ve çapraz doğrulamayı gerçekleştirecek bir işlev sağlar.

Çapraz doğrulama

Çapraz Doğrulama, eğitim sırasında eğitim setinin n kez katlanarak kaydırılması ve ardından modelin n kez değerlendirilmesi anlamına gelir. Örneğin CV 10 olarak ayarlanırsa eğitim seti on kez eğitilir ve değerlendirilir. Her turda, sınıflandırıcı modeli eğitmek için rastgele dokuz kat seçer ve 10. kat değerlendirme içindir.

ızgara arama

Her sınıflandırıcının ayarlanması gereken hiperparametreleri vardır. Farklı değerleri deneyebilir veya bir parametre ızgarası ayarlayabilirsiniz. Scikit-learn resmi web sitesine giderseniz, lojistik sınıflandırıcının ayarlanması gereken farklı parametrelere sahip olduğunu görebilirsiniz. Eğitimi daha hızlı hale getirmek için C parametresini ayarlamayı seçersiniz. Düzenlileştirme parametresini kontrol eder. Olumlu olmalı. Küçük bir değer, düzenleyiciye daha fazla ağırlık verir.

GridSearchCV nesnesini kullanabilirsiniz. Ayarlamak için hiperparametreleri içeren bir sözlük oluşturmanız gerekir.

Hiperparametreleri ve ardından denemek istediğiniz değerleri listelersiniz. Örneğin, C parametresini ayarlamak için şunu kullanırsınız:

  • 'logisticregression__C': [0.1, 1.0, 1.0]: Parametrenin önünde, küçük harfle, sınıflandırıcının adı ve iki alt çizgi bulunur.

Model dört farklı değeri deneyecektir: 0.001, 0.01, 0.1 ve 1.

Modeli 10 katlama kullanarak eğitiyorsunuz: cv=10

from sklearn.model_selection import GridSearchCV
# Construct the parameter grid
param_grid = {
    'logisticregression__C': [0.001, 0.01,0.1, 1.0],
    }

GridSearchCV'yi gri ve cv parametreleriyle kullanarak modeli eğitebilirsiniz.

# Train the model
grid_clf = GridSearchCV(model,
                        param_grid,
                        cv=10,
                        iid=False)
grid_clf.fit(X_train, y_train)

ÇIKTI

GridSearchCV(cv=10, error_score='raise-deprecating',
       estimator=Pipeline(memory=None,
     steps=[('columntransformer', ColumnTransformer(n_jobs=1, remainder='drop', transformer_weights=None,
         transformers=[('standardscaler', StandardScaler(copy=True, with_mean=True, with_std=True), [0, 2, 10, 4, 11, 12]), ('onehotencoder', OneHotEncoder(categorical_features=None, categories=None,...ty='l2', random_state=None, solver='liblinear', tol=0.0001,
          verbose=0, warm_start=False))]),
       fit_params=None, iid=False, n_jobs=1,
       param_grid={'logisticregression__C': [0.001, 0.01, 0.1, 1.0]},
       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',
       scoring=None, verbose=0)

En iyi parametrelere erişmek için best_params_'ı kullanırsınız

grid_clf.best_params_

ÇIKTI

{'logisticregression__C': 1.0}

Model dört farklı düzenleme değeriyle eğitildikten sonra en uygun parametre şu şekildedir:

print("best logistic regression from grid search: %f" % grid_clf.best_estimator_.score(X_test, y_test))

grid aramasından en iyi lojistik regresyon: 0.850891

Tahmin edilen olasılıklara erişmek için:

grid_clf.best_estimator_.predict_proba(X_test)
array([[0.83576677, 0.16423323],
       [0.9458291 , 0.0541709 ],
       [0.64760416, 0.35239584],
       ...,
       [0.99639224, 0.00360776],
       [0.02072033, 0.97927967],
       [0.56782222, 0.43217778]])

Scikit-learn ile XGBoost Modeli

Piyasadaki en iyi sınıflandırıcılardan birini eğitmek için Scikit-learn örneklerini deneyelim. XGBoost, rastgele ormana göre bir gelişmedir. Bu kapsamın dışında kalan sınıflandırıcının teorik arka planı Python Scikit öğreticisi. XGBoost'un birçok kaggle yarışmasını kazandığını unutmayın. Ortalama bir veri kümesi boyutuyla derin öğrenme algoritması kadar iyi, hatta daha iyi performans gösterebilir.

Sınıflandırıcının eğitilmesi zordur çünkü ayarlanması gereken çok sayıda parametre vardır. Elbette sizin için parametreyi seçmek için GridSearchCV'yi kullanabilirsiniz.

Bunun yerine, en uygun parametreleri bulmanın daha iyi bir yolunu nasıl kullanabileceğimizi görelim. GridSearchCV'nin çok sayıda değer iletilmesi durumunda eğitilmesi sıkıcı olabilir ve çok uzun sürebilir. Arama alanı parametre sayısıyla birlikte büyür. Tercih edilen bir çözüm RandomizedSearchCV'yi kullanmaktır. Bu yöntem, her yinelemeden sonra her hiperparametrenin değerinin rastgele seçilmesinden oluşur. Örneğin, sınıflandırıcı 1000 yinelemeden fazla eğitilmişse 1000 kombinasyon değerlendirilir. Aşağı yukarı şu şekilde çalışır. Izgara Arama CV'si

Xgboost'u içe aktarmanız gerekiyor. Kitaplık kurulu değilse lütfen pip3 install xgboost'u kullanın veya

use import sys
!{sys.executable} -m pip install xgboost

In Jupyter çevre

Daha sonra,

import xgboost
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import StratifiedKFold

Bu Scikit'teki bir sonraki adım Python öğretici, ayarlanacak parametrelerin belirtilmesini içerir. Ayarlanacak tüm parametreleri görmek için resmi belgelere başvurabilirsiniz. uğruna Python Sklearn eğitiminde yalnızca her biri iki değere sahip iki hiper parametre seçersiniz. XGBoost'un eğitilmesi çok zaman alır; ızgarada ne kadar çok hiperparametre varsa, beklemeniz de o kadar uzun sürer.

params = {
        'xgbclassifier__gamma': [0.5, 1],
        'xgbclassifier__max_depth': [3, 4]
        }

XGBoost sınıflandırıcısıyla yeni bir işlem hattı oluşturursunuz. 600 tahminci tanımlamayı seçersiniz. N_estimators'ın ayarlayabileceğiniz bir parametre olduğunu unutmayın. Yüksek bir değer, aşırı uyuma yol açabilir. Farklı değerleri kendiniz deneyebilirsiniz ancak bunun saatler sürebileceğini unutmayın. Diğer parametreler için varsayılan değeri kullanırsınız

model_xgb = make_pipeline(
    preprocess,
    xgboost.XGBClassifier(
                          n_estimators=600,
                          objective='binary:logistic',
                          silent=True,
                          nthread=1)
)

Katmanlı K-Folds çapraz doğrulayıcıyla çapraz doğrulamayı iyileştirebilirsiniz. Hesaplamayı hızlandırmak, ancak kaliteyi düşürmek için burada yalnızca üç kat oluşturursunuz. Sonuçları iyileştirmek için bu değeri evde 5 veya 10'a yükseltin.

Modeli dört yineleme üzerinden eğitmeyi seçersiniz.

skf = StratifiedKFold(n_splits=3,
                      shuffle = True,
                      random_state = 1001)

random_search = RandomizedSearchCV(model_xgb,
                                   param_distributions=params,
                                   n_iter=4,
                                   scoring='accuracy',
                                   n_jobs=4,
                                   cv=skf.split(X_train, y_train),
                                   verbose=3,
                                   random_state=1001)

Rastgele arama kullanıma hazırdır, modeli eğitebilirsiniz

#grid_xgb = GridSearchCV(model_xgb, params, cv=10, iid=False)
random_search.fit(X_train, y_train)
Fitting 3 folds for each of 4 candidates, totalling 12 fits
[CV] xgbclassifier__max_depth=3, xgbclassifier__gamma=0.5 ............
[CV] xgbclassifier__max_depth=3, xgbclassifier__gamma=0.5 ............
[CV] xgbclassifier__max_depth=3, xgbclassifier__gamma=0.5 ............
[CV] xgbclassifier__max_depth=4, xgbclassifier__gamma=0.5 ............
[CV]  xgbclassifier__max_depth=3, xgbclassifier__gamma=0.5, score=0.8759645283888057, total= 1.0min
[CV] xgbclassifier__max_depth=4, xgbclassifier__gamma=0.5 ............
[CV]  xgbclassifier__max_depth=3, xgbclassifier__gamma=0.5, score=0.8729701715996775, total= 1.0min
[CV]  xgbclassifier__max_depth=3, xgbclassifier__gamma=0.5, score=0.8706519235199263, total= 1.0min
[CV] xgbclassifier__max_depth=4, xgbclassifier__gamma=0.5 ............
[CV] xgbclassifier__max_depth=3, xgbclassifier__gamma=1 ..............
[CV]  xgbclassifier__max_depth=4, xgbclassifier__gamma=0.5, score=0.8735460094437406, total= 1.3min
[CV] xgbclassifier__max_depth=3, xgbclassifier__gamma=1 ..............
[CV]  xgbclassifier__max_depth=3, xgbclassifier__gamma=1, score=0.8722791661868018, total=  57.7s
[CV] xgbclassifier__max_depth=3, xgbclassifier__gamma=1 ..............
[CV]  xgbclassifier__max_depth=3, xgbclassifier__gamma=1, score=0.8753886905447426, total= 1.0min
[CV] xgbclassifier__max_depth=4, xgbclassifier__gamma=1 ..............
[CV]  xgbclassifier__max_depth=4, xgbclassifier__gamma=0.5, score=0.8697304768486523, total= 1.3min
[CV] xgbclassifier__max_depth=4, xgbclassifier__gamma=1 ..............
[CV]  xgbclassifier__max_depth=4, xgbclassifier__gamma=0.5, score=0.8740066797189912, total= 1.4min
[CV] xgbclassifier__max_depth=4, xgbclassifier__gamma=1 ..............
[CV]  xgbclassifier__max_depth=3, xgbclassifier__gamma=1, score=0.8707671043538355, total= 1.0min
[CV]  xgbclassifier__max_depth=4, xgbclassifier__gamma=1, score=0.8729701715996775, total= 1.2min
[Parallel(n_jobs=4)]: Done  10 out of  12 | elapsed:  3.6min remaining:   43.5s
[CV]  xgbclassifier__max_depth=4, xgbclassifier__gamma=1, score=0.8736611770125533, total= 1.2min
[CV]  xgbclassifier__max_depth=4, xgbclassifier__gamma=1, score=0.8692697535130154, total= 1.2min
[Parallel(n_jobs=4)]: Done  12 out of  12 | elapsed:  3.6min finished
/Users/Thomas/anaconda3/envs/hello-tf/lib/python3.6/site-packages/sklearn/model_selection/_search.py:737: DeprecationWarning: The default of the `iid` parameter will change from True to False in version 0.22 and will be removed in 0.24. This will change numeric results when test-set sizes are unequal. DeprecationWarning)
RandomizedSearchCV(cv=<generator object _BaseKFold.split at 0x1101eb830>,
          error_score='raise-deprecating',
          estimator=Pipeline(memory=None,
     steps=[('columntransformer', ColumnTransformer(n_jobs=1, remainder='drop', transformer_weights=None,
         transformers=[('standardscaler', StandardScaler(copy=True, with_mean=True, with_std=True), [0, 2, 10, 4, 11, 12]), ('onehotencoder', OneHotEncoder(categorical_features=None, categories=None,...
       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,
       silent=True, subsample=1))]),
          fit_params=None, iid='warn', n_iter=4, n_jobs=4,
          param_distributions={'xgbclassifier__gamma': [0.5, 1], 'xgbclassifier__max_depth': [3, 4]},
          pre_dispatch='2*n_jobs', random_state=1001, refit=True,
          return_train_score='warn', scoring='accuracy', verbose=3)

Gördüğünüz gibi XGBoost önceki logisitc regresyondan daha iyi bir puana sahip.

print("Best parameter", random_search.best_params_)
print("best logistic regression from grid search: %f" % random_search.best_estimator_.score(X_test, y_test))
Best parameter {'xgbclassifier__max_depth': 3, 'xgbclassifier__gamma': 0.5}
best logistic regression from grid search: 0.873157
random_search.best_estimator_.predict(X_test)
array(['<=50K', '<=50K', '<=50K', ..., '<=50K', '>50K', '<=50K'],      dtype=object)

Scikit-learn'de MLPClassifier ile DNN oluşturun

Son olarak scikit-learn ile derin öğrenme algoritmasını eğitebilirsiniz. Yöntem diğer sınıflandırıcıyla aynıdır. Sınıflandırıcı MLPClassifier'da mevcuttur.

from sklearn.neural_network import MLPClassifier

Aşağıdaki derin öğrenme algoritmasını tanımlayın:

  • Adem çözücü
  • Relu aktivasyon fonksiyonu
  • Alfa = 0.0001
  • parti büyüklüğü 150
  • Sırasıyla 100 ve 50 nöronlu iki gizli katman
model_dnn = make_pipeline(
    preprocess,
    MLPClassifier(solver='adam',
                  alpha=0.0001,
                  activation='relu',
                    batch_size=150,
                    hidden_layer_sizes=(200, 100),
                    random_state=1))

Modeli geliştirmek için katman sayısını değiştirebilirsiniz

model_dnn.fit(X_train, y_train)
  print("DNN regression score: %f" % model_dnn.score(X_test, y_test))

DNN regresyon puanı: 0.821253

LIME: Modelinize Güvenin

Artık iyi bir modele sahip olduğunuza göre, ona güvenebileceğiniz bir araca ihtiyacınız var. Makine öğrenme algoritma, özellikle rastgele orman ve sinir ağı, kara kutu algoritması olarak bilinir. Başka bir deyişle, işe yarıyor ama kimse nedenini bilmiyor.

Üç araştırmacı, bilgisayarın nasıl tahmin yaptığını görmek için harika bir araç geliştirdi. Makalenin adı Sana Neden Güvenmeliyim?

adında bir algoritma geliştirdiler. Yerel Yorumlanabilir Model-Agnostik Açıklamalar (LIME).

Bir örnek alın:

Bazen bir makine öğrenimi tahminine güvenip güvenemeyeceğinizi bilemezsiniz:

Örneğin bir doktor, sırf bilgisayar öyle söyledi diye tanıya güvenemez. Ayrıca modele üretime geçmeden önce güvenip güvenemeyeceğinizi de bilmeniz gerekir.

Herhangi bir sınıflandırıcının sinir ağları, rastgele ormanlar veya herhangi bir çekirdeğe sahip svm'ler gibi inanılmaz derecede karmaşık modellerde bile neden tahmin yaptığını anlayabildiğimizi hayal edin.

Arkasındaki nedenleri anlayabilirsek, bir tahmine güvenmemiz daha kolay hale gelecektir. Doktor örneğinden, eğer model ona hangi semptomların önemli olduğunu ona güveneceğinizi söylerse, modele güvenmemeniz gerektiğini anlamak da daha kolay olur.

Lime, sınıflandırıcının kararlarını hangi özelliklerin etkilediğini size söyleyebilir

Veri Hazırlama

LIME'ı çalıştırmak için değiştirmeniz gereken birkaç şey bunlar piton. Öncelikle terminale kireç takmanız gerekiyor. Pip kurulum kireçini kullanabilirsiniz

Lime, modele yerel olarak yaklaşmak için LimeTabularExplainer nesnesini kullanır. Bu nesne şunları gerektirir:

  • numpy formatında bir veri kümesi
  • Özelliklerin adı: feature_names
  • Sınıfların adı: class_names
  • Kategorik özellikler sütununun dizini: categorical_features
  • Her kategorik özellik için grubun adı: kategorik_isimler

Numpy tren seti oluştur

Df_train'i pandalardan kopyalayıp dönüştürebilirsiniz. dizi çok kolayca

df_train.head(5)
# Create numpy data
df_lime = df_train
df_lime.head(3)

Sınıf adını alın Etikete benzersiz() nesnesi ile erişilebilir. Görmelisin:

  • "<=50K"
  • '>50K'
# Get the class name
class_names = df_lime.label.unique()
class_names
array(['<=50K', '>50K'], dtype=object)

kategorik özellikler sütununun dizini

Grubun adını almak için daha önce eğildiğiniz yöntemi kullanabilirsiniz. Etiketi LabelEncoder ile kodlarsınız. İşlemi tüm kategorik özelliklerde tekrarlarsınız.

## 
import sklearn.preprocessing as preprocessing
categorical_names = {}
for feature in CATE_FEATURES:
    le = preprocessing.LabelEncoder()
    le.fit(df_lime[feature])
    df_lime[feature] = le.transform(df_lime[feature])
    categorical_names[feature] = le.classes_
print(categorical_names)    
{'workclass': array(['?', 'Federal-gov', 'Local-gov', 'Never-worked', 'Private',
       'Self-emp-inc', 'Self-emp-not-inc', 'State-gov', 'Without-pay'],
      dtype=object), 'education': array(['10th', '11th', '12th', '1st-4th', '5th-6th', '7th-8th', '9th',
       'Assoc-acdm', 'Assoc-voc', 'Bachelors', 'Doctorate', 'HS-grad',
       'Masters', 'Preschool', 'Prof-school', 'Some-college'],
      dtype=object), 'marital': array(['Divorced', 'Married-AF-spouse', 'Married-civ-spouse',
       'Married-spouse-absent', 'Never-married', 'Separated', 'Widowed'],
      dtype=object), 'occupation': array(['?', 'Adm-clerical', 'Armed-Forces', 'Craft-repair',
       'Exec-managerial', 'Farming-fishing', 'Handlers-cleaners',
       'Machine-op-inspct', 'Other-service', 'Priv-house-serv',
       'Prof-specialty', 'Protective-serv', 'Sales', 'Tech-support',
       'Transport-moving'], dtype=object), 'relationship': array(['Husband', 'Not-in-family', 'Other-relative', 'Own-child',
       'Unmarried', 'Wife'], dtype=object), 'race': array(['Amer-Indian-Eskimo', 'Asian-Pac-Islander', 'Black', 'Other',
       'White'], dtype=object), 'sex': array(['Female', 'Male'], dtype=object), 'native_country': array(['?', 'Cambodia', 'Canada', 'China', 'Columbia', 'Cuba',
       'Dominican-Republic', 'Ecuador', 'El-Salvador', 'England',
       'France', 'Germany', 'Greece', 'Guatemala', 'Haiti', 'Honduras',
       'Hong', 'Hungary', 'India', 'Iran', 'Ireland', 'Italy', 'Jamaica',
       'Japan', 'Laos', 'Mexico', 'Nicaragua',
       'Outlying-US(Guam-USVI-etc)', 'Peru', 'Philippines', 'Poland',
       'Portugal', 'Puerto-Rico', 'Scotland', 'South', 'Taiwan',
       'Thailand', 'Trinadad&Tobago', 'United-States', 'Vietnam',
       'Yugoslavia'], dtype=object)}

df_lime.dtypes
age               float64
workclass           int64
fnlwgt            float64
education           int64
education_num     float64
marital             int64
occupation          int64
relationship        int64
race                int64
sex                 int64
capital_gain      float64
capital_loss      float64
hours_week        float64
native_country      int64
label              object
dtype: object

Artık veri seti hazır olduğuna göre aşağıdaki Scikit öğrenme örneklerinde gösterildiği gibi farklı veri setini oluşturabilirsiniz. LIME ile ilgili hataları önlemek için aslında verileri işlem hattının dışında dönüştürürsünüz. LimeTabularExplainer'daki eğitim seti dizesiz bir numpy dizisi olmalıdır. Yukarıdaki yöntemle zaten dönüştürülmüş bir eğitim veri kümeniz olur.

from sklearn.model_selection import train_test_split
X_train_lime, X_test_lime, y_train_lime, y_test_lime = train_test_split(df_lime[features],
                                                    df_lime.label,
                                                    test_size = 0.2,
                                                    random_state=0)
X_train_lime.head(5)

Boru hattını XGBoost'tan en uygun parametrelerle yapabilirsiniz

model_xgb = make_pipeline(
    preprocess,
    xgboost.XGBClassifier(max_depth = 3,
                          gamma = 0.5,
                          n_estimators=600,
                          objective='binary:logistic',
                          silent=True,
                          nthread=1))

model_xgb.fit(X_train_lime, y_train_lime)
/Users/Thomas/anaconda3/envs/hello-tf/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py:351: FutureWarning: The handling of integer data will change in version 0.22. Currently, the categories are determined based on the range [0, max(values)], while in the future they will be determined based on the unique values.
If you want the future behavior and silence this warning, you can specify "categories='auto'."In case you used a LabelEncoder before this OneHotEncoder to convert the categories to integers, then you can now use the OneHotEncoder directly.
  warnings.warn(msg, FutureWarning)
Pipeline(memory=None,
     steps=[('columntransformer', ColumnTransformer(n_jobs=1, remainder='drop', transformer_weights=None,
         transformers=[('standardscaler', StandardScaler(copy=True, with_mean=True, with_std=True), [0, 2, 10, 4, 11, 12]), ('onehotencoder', OneHotEncoder(categorical_features=None, categories=None,...
       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,
       silent=True, subsample=1))])

Bir uyarı alırsınız. Uyarı, boru hattından önce bir etiket kodlayıcısı oluşturmanıza gerek olmadığını açıklar. LIME kullanmak istemiyorsanız, Scikit-learn ile Makine Öğrenmesi öğreticisinin ilk bölümündeki yöntemi kullanabilirsiniz. Aksi takdirde, bu yöntemle devam edebilirsiniz, önce kodlanmış bir veri kümesi oluşturun, boru hattı içinde sıcak olanı kodlayıcıyı ayarlayın.

print("best logistic regression from grid search: %f" % model_xgb.score(X_test_lime, y_test_lime))
best logistic regression from grid search: 0.873157
model_xgb.predict_proba(X_test_lime)
array([[7.9646105e-01, 2.0353897e-01],
       [9.5173013e-01, 4.8269872e-02],
       [7.9344827e-01, 2.0655173e-01],
       ...,
       [9.9031430e-01, 9.6856682e-03],
       [6.4581633e-04, 9.9935418e-01],
       [9.7104281e-01, 2.8957171e-02]], dtype=float32)

LIME'ı eylemde kullanmadan önce, yanlış sınıflandırmanın özelliklerine sahip bir numpy dizisi oluşturalım. Sınıflandırıcıyı neyin yanlış yönlendirdiğine dair bir fikir edinmek için bu listeyi daha sonra kullanabilirsiniz.

temp = pd.concat([X_test_lime, y_test_lime], axis= 1)
temp['predicted'] = model_xgb.predict(X_test_lime)
temp['wrong']=  temp['label'] != temp['predicted']
temp = temp.query('wrong==True').drop('wrong', axis=1)
temp= temp.sort_values(by=['label'])
temp.shape

(826, 16)

Tahmini yeni verilerle modelden almak için bir lambda işlevi yaratırsınız. Yakında ihtiyacınız olacak.

predict_fn = lambda x: model_xgb.predict_proba(x).astype(float)
X_test_lime.dtypes
age               float64
workclass           int64
fnlwgt            float64
education           int64
education_num     float64
marital             int64
occupation          int64
relationship        int64
race                int64
sex                 int64
capital_gain      float64
capital_loss      float64
hours_week        float64
native_country      int64
dtype: object
predict_fn(X_test_lime)
array([[7.96461046e-01, 2.03538969e-01],
       [9.51730132e-01, 4.82698716e-02],
       [7.93448269e-01, 2.06551731e-01],
       ...,
       [9.90314305e-01, 9.68566816e-03],
       [6.45816326e-04, 9.99354184e-01],
       [9.71042812e-01, 2.89571714e-02]])

Pandaların veri çerçevesini numpy dizisine dönüştürürsünüz

X_train_lime = X_train_lime.values
X_test_lime = X_test_lime.values
X_test_lime
array([[4.00000e+01, 5.00000e+00, 1.93524e+05, ..., 0.00000e+00,
        4.00000e+01, 3.80000e+01],
       [2.70000e+01, 4.00000e+00, 2.16481e+05, ..., 0.00000e+00,
        4.00000e+01, 3.80000e+01],
       [2.50000e+01, 4.00000e+00, 2.56263e+05, ..., 0.00000e+00,
        4.00000e+01, 3.80000e+01],
       ...,
       [2.80000e+01, 6.00000e+00, 2.11032e+05, ..., 0.00000e+00,
        4.00000e+01, 2.50000e+01],
       [4.40000e+01, 4.00000e+00, 1.67005e+05, ..., 0.00000e+00,
        6.00000e+01, 3.80000e+01],
       [5.30000e+01, 4.00000e+00, 2.57940e+05, ..., 0.00000e+00,
        4.00000e+01, 3.80000e+01]])
model_xgb.predict_proba(X_test_lime)
array([[7.9646105e-01, 2.0353897e-01],
       [9.5173013e-01, 4.8269872e-02],
       [7.9344827e-01, 2.0655173e-01],
       ...,
       [9.9031430e-01, 9.6856682e-03],
       [6.4581633e-04, 9.9935418e-01],
       [9.7104281e-01, 2.8957171e-02]], dtype=float32)
print(features,
      class_names,
      categorical_features,
      categorical_names)
['age', 'workclass', 'fnlwgt', 'education', 'education_num', 'marital', 'occupation', 'relationship', 'race', 'sex', 'capital_gain', 'capital_loss', 'hours_week', 'native_country'] ['<=50K' '>50K'] [1, 3, 5, 6, 7, 8, 9, 13] {'workclass': array(['?', 'Federal-gov', 'Local-gov', 'Never-worked', 'Private',
       'Self-emp-inc', 'Self-emp-not-inc', 'State-gov', 'Without-pay'],
      dtype=object), 'education': array(['10th', '11th', '12th', '1st-4th', '5th-6th', '7th-8th', '9th',
       'Assoc-acdm', 'Assoc-voc', 'Bachelors', 'Doctorate', 'HS-grad',
       'Masters', 'Preschool', 'Prof-school', 'Some-college'],
      dtype=object), 'marital': array(['Divorced', 'Married-AF-spouse', 'Married-civ-spouse',
       'Married-spouse-absent', 'Never-married', 'Separated', 'Widowed'],
      dtype=object), 'occupation': array(['?', 'Adm-clerical', 'Armed-Forces', 'Craft-repair',
       'Exec-managerial', 'Farming-fishing', 'Handlers-cleaners',
       'Machine-op-inspct', 'Other-service', 'Priv-house-serv',
       'Prof-specialty', 'Protective-serv', 'Sales', 'Tech-support',
       'Transport-moving'], dtype=object), 'relationship': array(['Husband', 'Not-in-family', 'Other-relative', 'Own-child',
       'Unmarried', 'Wife'], dtype=object), 'race': array(['Amer-Indian-Eskimo', 'Asian-Pac-Islander', 'Black', 'Other',
       'White'], dtype=object), 'sex': array(['Female', 'Male'], dtype=object), 'native_country': array(['?', 'Cambodia', 'Canada', 'China', 'Columbia', 'Cuba',
       'Dominican-Republic', 'Ecuador', 'El-Salvador', 'England',
       'France', 'Germany', 'Greece', 'Guatemala', 'Haiti', 'Honduras',
       'Hong', 'Hungary', 'India', 'Iran', 'Ireland', 'Italy', 'Jamaica',
       'Japan', 'Laos', 'Mexico', 'Nicaragua',
       'Outlying-US(Guam-USVI-etc)', 'Peru', 'Philippines', 'Poland',
       'Portugal', 'Puerto-Rico', 'Scotland', 'South', 'Taiwan',
       'Thailand', 'Trinadad&Tobago', 'United-States', 'Vietnam',
       'Yugoslavia'], dtype=object)}
import lime
import lime.lime_tabular
### Train should be label encoded not one hot encoded
explainer = lime.lime_tabular.LimeTabularExplainer(X_train_lime ,
                                                   feature_names = features,
                                                   class_names=class_names,
                                                   categorical_features=categorical_features, 
                                                   categorical_names=categorical_names,
                                                   kernel_width=3)

Test setinden rastgele bir hane seçelim ve model tahminini ve bilgisayarın seçimini nasıl yaptığını görelim.

import numpy as np
np.random.seed(1)
i = 100
print(y_test_lime.iloc[i])
>50K
X_test_lime[i]
array([4.20000e+01, 4.00000e+00, 1.76286e+05, 7.00000e+00, 1.20000e+01,
       2.00000e+00, 4.00000e+00, 0.00000e+00, 4.00000e+00, 1.00000e+00,
       0.00000e+00, 0.00000e+00, 4.00000e+01, 3.80000e+01])

Modelin arkasındaki açıklamayı kontrol etmek için açıklayıcıyı açıklayıcı_instance ile kullanabilirsiniz.

exp = explainer.explain_instance(X_test_lime[i], predict_fn, num_features=6)
exp.show_in_notebook(show_all=False)

Veri Hazırlama

Sınıflandırıcının hane halkını doğru tahmin ettiğini görebiliriz. Gelir gerçekten 50 binin üzerinde.

Söyleyebileceğimiz ilk şey, sınıflandırıcının tahmin edilen olasılıklardan pek emin olmadığıdır. Makine, hane halkının %50 olasılıkla 64 binin üzerinde gelire sahip olduğunu tahmin ediyor. Bu %64 sermaye kazancı ve evlilikten oluşuyor. Mavi renk pozitif sınıfa olumsuz, turuncu çizgi ise olumlu katkı sağlar.

Sınıflandırıcının kafası karışık çünkü bu hane halkının sermaye kazancı sıfır, sermaye kazancı ise genellikle zenginliğin iyi bir göstergesi. Ayrıca hane haftada 40 saatten az çalışmaktadır. Yaş, meslek ve cinsiyet sınıflandırıcıya olumlu katkıda bulunur.

Medeni durum bekar olsaydı, sınıflandırıcı 50 binin altında bir gelir öngörürdü (0.64-0.18 = 0.46)

Yanlış sınıflandırılmış başka bir evle deneyebiliriz

temp.head(3)
temp.iloc[1,:-2]
age                  58
workclass             4
fnlwgt            68624
education            11
education_num         9
marital               2
occupation            4
relationship          0
race                  4
sex                   1
capital_gain          0
capital_loss          0
hours_week           45
native_country       38
Name: 20931, dtype: object
i = 1
print('This observation is', temp.iloc[i,-2:])
This observation is label        <=50K
predicted     >50K
Name: 20931, dtype: object
exp = explainer.explain_instance(temp.iloc[1,:-2], predict_fn, num_features=6)
exp.show_in_notebook(show_all=False)

Veri Hazırlama

Sınıflandırıcı, doğru olmasa da 50 binin altında bir gelir öngördü. Bu ev tuhaf görünüyor. Sermaye kazancı da yok, sermaye kaybı da yok. Kendisi boşanmış, 60 yaşında ve eğitimli bir kişi, yani eğitim_numu > 12. Genel örneğe göre, bu hanenin, sınıflandırıcının da açıkladığı gibi, 50 binin altında bir gelir elde etmesi gerekiyor.

LIME ile oynamaya çalışıyorsun. Sınıflandırıcıdaki büyük hataları fark edeceksiniz.

Kütüphane sahibinin GitHub'unu kontrol edebilirsiniz. Görüntü ve metin sınıflandırması için ekstra belgeler sağlarlar.

ÖZET

Aşağıda scikit Learn sürümü >=0.20 olan bazı yararlı komutların listesi bulunmaktadır.

eğitim/test veri kümesi oluştur stajyerler ayrıldı
Bir boru hattı oluşturun
sütunu seçin ve dönüşümü uygulayın makecolumntransformer
dönüşüm türü
standartlaştırmak Standart Ölçekleyici
en az en çok MinMaksÖlçekleyici
Normale Normalleştirici
Eksik değeri yükle atfetmek
Kategorik dönüştür OneHotKodlayıcı
Verileri sığdırın ve dönüştürün uyum_dönüşümü
Boru hattını yapın make_pipeline
Temel model
lojistik regresyon Lojistik regresyon
XGBoost XGBSınıflandırıcı
Sinir ağı MLP Sınıflandırıcı
ızgara arama IzgaraAramaCV
Rastgele arama Rastgele AramaCV