Scikit-Learn Tutorial: Hur man installerar & Scikit-Learn Exempel

Vad รคr Scikit-learn?

Scikit lรคra รคr en รถppen kรคllkod Python bibliotek fรถr maskininlรคrning. Den stรถder toppmoderna algoritmer som KNN, XGBoost, random forest och SVM. Den รคr byggd ovanpรฅ NumPy. Scikit-learn anvรคnds ofta i Kaggle-tรคvlingar sรฅvรคl som framstรฅende teknikfรถretag. Det hjรคlper till med fรถrbearbetning, dimensionsreduktion (parameterval), klassificering, regression, klustring och modellval.

Scikit-learn har den bรคsta dokumentationen av alla bibliotek med รถppen kรคllkod. Det ger dig ett interaktivt diagram pรฅ https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html.

Hur Scikit Learn fungerar
Hur Scikit Learn fungerar

Scikit-learn รคr inte sรคrskilt svรฅrt att anvรคnda och ger utmรคrkta resultat. Men scikit learning stรถder inte parallella berรคkningar. Det รคr mรถjligt att kรถra en djupinlรคrningsalgoritm med den men det รคr inte en optimal lรถsning, speciellt om du vet hur man anvรคnder TensorFlow.

Hur man laddar ner och installerar Scikit-learn

Nu i detta Python Scikit-learn handledning, vi kommer att lรคra oss hur du laddar ner och installerar Scikit-learn:

Alternativet 1: AWS

scikit-learn kan anvรคndas รถver AWS. Snรคlla du hรคnvisa Docker-avbildningen som har scikit-learn fรถrinstallerat.

Fรถr att anvรคnda utvecklarversionen anvรคnd kommandot i Jupyter

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

Alternativet 2: Mac eller Windows anvรคnder Anaconda

Fรถr att lรคra dig om Anaconda-installation se https://www.guru99.com/download-install-tensorflow.html

Nyligen har utvecklarna av scikit slรคppt en utvecklingsversion som tar itu med vanliga problem med den nuvarande versionen. Vi tyckte att det var bekvรคmare att anvรคnda utvecklarversionen istรคllet fรถr den nuvarande versionen.

Hur man installerar scikit-learn med Conda Environment

Om du installerade scikit-learn med conda-miljรถn, fรถlj steget fรถr att uppdatera till version 0.20

Steg 1) Aktivera tensorflรถdesmiljรถn

source activate hello-tf

Steg 2) Ta bort scikit lean med kommandot conda

conda remove scikit-learn

Steg 3) Installera utvecklarversionen.
Installera scikit learn utvecklarversion tillsammans med nรถdvรคndiga bibliotek.

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

OBS: Windows anvรคndaren mรฅste installera Microsoft Visuell C++ 14. Du kan fรฅ det frรฅn hรคr.

Scikit-Learn-exempel med maskininlรคrning

Denna Scikit-handledning รคr uppdelad i tvรฅ delar:

  1. Maskininlรคrning med scikit-learn
  2. Hur du litar pรฅ din modell med LIME

Den fรถrsta delen beskriver hur man bygger en pipeline, skapar en modell och justerar hyperparametrarna medan den andra delen ger toppmoderna nรคr det gรคller val av modell.

Steg 1) Importera data

Under denna Scikit-lรคrhandledning kommer du att anvรคnda vuxendatauppsรคttningen.

Fรถr en bakgrund i denna datauppsรคttning, se Om du รคr intresserad av att veta mer om den beskrivande statistiken, anvรคnd verktygen Dyk och ร–versikt.

Se denna handledning lรคs mer om dyk och รถversikt

Du importerar datasetet med Pandas. Observera att du mรฅste konvertera typen av de kontinuerliga variablerna i float-format.

Denna datauppsรคttning innehรฅller รฅtta kategoriska variabler:

De kategoriska variablerna listas i CATE_FEATURES

  • arbetsklass
  • utbildning
  • รคktenskaplig
  • ockupation
  • relation
  • lopp
  • kรถn
  • hemland

dessutom sex kontinuerliga variabler:

De kontinuerliga variablerna listas i CONTI_FEATURES

  • รฅlder
  • fnlwgt
  • utbildningsnummer
  • kapitalvinsten
  • kapitalfรถrlust
  • timmar_vecka

Observera att vi fyller listan fรถr hand sรฅ att du har en bรคttre uppfattning om vilka kolumner vi anvรคnder. Ett snabbare sรคtt att konstruera en lista med kategoriska eller kontinuerliga รคr att anvรคnda:

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

Hรคr รคr koden fรถr att importera data:

# 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()
รฅlder fnlwgt utbildningsnummer kapitalvinsten kapitalfรถrlust timmar_vecka
rรคkna 32561.000000 3.256100e + 04 32561.000000 32561.000000 32561.000000 32561.000000
betyda 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
min 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
max 90.000000 1.484705e + 06 16.000000 99999.000000 4356.000000 99.000000

Du kan kontrollera antalet unika vรคrden fรถr funktionerna native_country. Du kan se att endast ett hushรฅll kommer frรฅn Holand-Nederlรคnderna. Detta hushรฅll kommer inte att ge oss nรฅgon information, men kommer genom ett fel under utbildningen.

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

Du kan utesluta denna oinformativa rad frรฅn datamรคngden

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

Dรคrefter lagrar du positionen fรถr de kontinuerliga funktionerna i en lista. Du kommer att behรถva det i nรคsta steg fรถr att bygga pipelinen.

Koden nedan kommer att gรฅ รถver alla kolumnnamn i CONTI_FEATURES och fรฅ dess plats (dvs. dess nummer) och sedan lรคgga till den i en lista som heter conti_features

## 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]

Koden nedan gรถr samma jobb som ovan men fรถr den kategoriska variabeln. Koden nedan upprepar vad du har gjort tidigare, fรถrutom med de kategoriska funktionerna.

## 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]

Du kan ta en titt pรฅ datasetet. Observera att varje kategorisk funktion รคr en strรคng. Du kan inte mata en modell med ett strรคngvรคrde. Du mรฅste transformera datasetet med en dummyvariabel.

df_train.head(5)

Faktum รคr att du mรฅste skapa en kolumn fรถr varje grupp i funktionen. Fรถrst kan du kรถra koden nedan fรถr att berรคkna det totala antalet kolumner som behรถvs.

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

Hela datasetet innehรฅller 101 grupper som visas ovan. Till exempel har arbetsklassens funktioner nio grupper. Du kan visualisera namnet pรฅ grupperna med fรถljande koder

unique() returnerar de unika vรคrdena fรถr de kategoriska funktionerna.

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']

Dรคrfรถr kommer trรคningsdatauppsรคttningen att innehรฅlla 101 + 7 kolumner. De sista sju kolumnerna รคr de kontinuerliga funktionerna.

Scikit-learn kan ta hand om konverteringen. Det gรถrs i tvรฅ steg:

  • Fรถrst mรฅste du konvertera strรคngen till ID. Till exempel kommer State-gov att ha ID 1, Self-emp-not-inc ID 2 och sรฅ vidare. Funktionen LabelEncoder gรถr detta รฅt dig
  • Transponera varje ID till en ny kolumn. Som nรคmnts tidigare har datasetet 101-gruppens ID. Dรคrfรถr kommer det att finnas 101 kolumner som fรฅngar alla kategoriska funktioners grupper. Scikit-learn har en funktion som heter OneHotEncoder som utfรถr denna operation

Steg 2) Skapa tรฅget/testsetet

Nu nรคr datasetet รคr klart kan vi dela upp det 80/20.

80 procent fรถr trรคningssetet och 20 procent fรถr testsetet.

Du kan anvรคnda train_test_split. Det fรถrsta argumentet รคr dataramen รคr funktionerna och det andra argumentet รคr etikettdataramen. Du kan ange storleken pรฅ testsetet med test_size.

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)

Steg 3) Bygg pipeline

Pipelinen gรถr det lรคttare att mata modellen med konsekventa data.

Tanken bakom รคr att lรคgga rรฅdata i en "pipeline" fรถr att utfรถra operationer.

Till exempel, med den aktuella datamรคngden, mรฅste du standardisera de kontinuerliga variablerna och konvertera kategoridata. Observera att du kan utfรถra vilken operation som helst inne i pipelinen. Om du till exempel har "NA" i datamรคngden kan du ersรคtta dem med medelvรคrdet eller medianen. Du kan ocksรฅ skapa nya variabler.

Du har valet; hรฅrdkoda de tvรฅ processerna eller skapa en pipeline. Det fรถrsta valet kan leda till datalรคckage och skapa inkonsekvenser รถver tid. Ett bรคttre alternativ รคr att anvรคnda rรถrledningen.

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

Pipeledningen kommer att utfรถra tvรฅ operationer innan den logistiska klassificeraren matas:

  1. Standardisera variabeln: `StandardScaler()โ€œ
  2. Konvertera de kategoriska funktionerna: OneHotEncoder(sparse=False)

Du kan utfรถra de tvรฅ stegen med hjรคlp av make_column_transformer. Denna funktion รคr inte tillgรคnglig i den aktuella versionen av scikit-learn (0.19). Det รคr inte mรถjligt med den aktuella versionen att utfรถra etikettkodaren och en varmkodare i pipeline. Det รคr en anledning till att vi valde att anvรคnda utvecklarversionen.

make_column_transformer รคr lรคtt att anvรคnda. Du mรฅste definiera vilka kolumner som ska tillรคmpas pรฅ transformationen och vilken transformation som ska anvรคndas. Till exempel, fรถr att standardisera den kontinuerliga funktionen kan du gรถra:

  • conti_features, StandardScaler() inuti make_column_transformer.
    • conti_features: lista med den kontinuerliga variabeln
    • StandardScaler: standardisera variabeln

Objektet OneHotEncoder inuti make_column_transformer kodar automatiskt etiketten.

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

Du kan testa om pipelinen fungerar med fit_transform. Datauppsรคttningen ska ha fรถljande form: 26048, 107

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

Datatransformatorn รคr klar att anvรคndas. Du kan skapa pipelinen med make_pipeline. Nรคr data har transformerats kan du mata den logistiska regressionen.

model = make_pipeline(
    preprocess,
    LogisticRegression())

Att trรคna en modell med scikit-learn รคr trivialt. Du mรฅste anvรคnda objektpassningen som fรถregรฅs av pipeline, dvs modellen. Du kan skriva ut exaktheten med partiturobjektet frรฅn scikit-learn-biblioteket

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

Slutligen kan du fรถrutsรคga klasserna med predict_proba. Det returnerar sannolikheten fรถr varje klass. Observera att det summerar till en.

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

Steg 4) Anvรคnda vรฅr pipeline i en rutnรคtssรถkning

Justera hyperparametern (variabler som bestรคmmer nรคtverksstruktur som dolda enheter) kan vara trรฅkigt och anstrรคngande.

Ett sรคtt att utvรคrdera modellen kan vara att รคndra storleken pรฅ trรคningsuppsรคttningen och utvรคrdera prestationerna.

Du kan upprepa denna metod tio gรฅnger fรถr att se poรคngen. Det รคr dock fรถr mycket arbete.

Istรคllet tillhandahรฅller scikit-learn en funktion fรถr att utfรถra parameterjustering och korsvalidering.

Korsvalidering

Cross-Validation innebรคr under trรคningen, trรคningssetet glider n antal gรฅnger i veck och utvรคrderar sedan modellen n tid. Till exempel, om cv รคr satt till 10, trรคnas och utvรคrderas trรคningssetet tio gรฅnger. Vid varje omgรฅng vรคljer klassificeraren slumpmรคssigt nio veck fรถr att trรคna modellen, och den 10:e vecken รคr avsedd fรถr utvรคrdering.

Rutnรคtssรถkning

Varje klassificerare har hyperparametrar att stรคlla in. Du kan prova olika vรคrden, eller sรฅ kan du stรคlla in ett parameterrutnรคt. Om du gรฅr till den officiella webbplatsen fรถr scikit-learn kan du se att den logistiska klassificeraren har olika parametrar att stรคlla in. Fรถr att gรถra trรคningen snabbare vรคljer du att stรคlla in C-parametern. Den kontrollerar fรถr regulariseringsparametern. Det ska vara positivt. Ett litet vรคrde ger mer vikt รฅt regularizern.

Du kan anvรคnda objektet GridSearchCV. Du mรฅste skapa en ordbok som innehรฅller hyperparametrarna fรถr att stรคlla in.

Du listar hyperparametrarna fรถljt av de vรคrden du vill prova. Till exempel, fรถr att stรคlla in C-parametern, anvรคnder du:

  • 'logisticregression__C': [0.1, 1.0, 1.0]: Parametern fรถregรฅs av namnet, med gemener, pรฅ klassificeraren och tvรฅ understreck.

Modellen kommer att prova fyra olika vรคrden: 0.001, 0.01, 0.1 och 1.

Du trรคnar modellen med 10 veck: cv=10

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

Du kan trรคna modellen med hjรคlp av GridSearchCV med parametern gri och cv.

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

PRODUKTION

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)

Fรถr att komma รฅt de bรคsta parametrarna anvรคnder du best_params_

grid_clf.best_params_

PRODUKTION

{'logisticregression__C': 1.0}

Efter att ha trรคnat modellen med fyra olika regulariseringsvรคrden รคr den optimala parametern

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

bรคsta logistiska regression frรฅn rutnรคtssรถkning: 0.850891

Fรถr att komma รฅt de fรถrutspรฅdda sannolikheterna:

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

XGBoost-modell med scikit-learn

Lรฅt oss prova Scikit-learn-exempel fรถr att trรคna en av de bรคsta klassificerarna pรฅ marknaden. XGBoost รคr en fรถrbรคttring jรคmfรถrt med den slumpmรคssiga skogen. Klassificerarens teoretiska bakgrund utanfรถr ramen fรถr detta Python Scikit handledning. Tรคnk pรฅ att XGBoost har vunnit massor av kaggletรคvlingar. Med en genomsnittlig datauppsรคttningsstorlek kan den fungera lika bra som en djupinlรคrningsalgoritm eller รคnnu bรคttre.

Klassificeraren รคr utmanande att trรคna eftersom den har ett stort antal parametrar att stรคlla in. Du kan naturligtvis anvรคnda GridSearchCV fรถr att vรคlja parametern รฅt dig.

Lรฅt oss istรคllet se hur man anvรคnder ett bรคttre sรคtt att hitta de optimala parametrarna. GridSearchCV kan vara trรฅkigt och vรคldigt lรฅngt att trรคna om du klarar mรฅnga vรคrden. Sรถkutrymmet vรคxer tillsammans med antalet parametrar. En att fรถredra lรถsningen รคr att anvรคnda RandomizedSearchCV. Denna metod bestรฅr av att slumpmรคssigt vรคlja vรคrdena fรถr varje hyperparameter efter varje iteration. Till exempel, om klassificeraren trรคnas รถver 1000 iterationer, utvรคrderas 1000 kombinationer. Det fungerar ungefรคr som. GridSearchCV

Du mรฅste importera xgboost. Om biblioteket inte รคr installerat, anvรคnd pip3 install xgboost eller

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

In Jupyter miljรถ

Hรคrnรคst

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

Nรคsta steg i denna Scikit Python handledningen inkluderar att specificera parametrarna som ska stรคllas in. Du kan hรคnvisa till den officiella dokumentationen fรถr att se alla parametrar som ska stรคllas in. Fรถr den skull Python Sklearn tutorial, du vรคljer bara tvรฅ hyperparametrar med tvรฅ vรคrden vardera. XGBoost tar mycket tid att trรคna, ju fler hyperparametrar i rutnรคtet, desto lรคngre tid behรถver du vรคnta.

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

Du konstruerar en ny pipeline med XGBoost-klassificerare. Du vรคljer att definiera 600 estimatorer. Observera att n_estimators รคr en parameter som du kan stรคlla in. Ett hรถgt vรคrde kan leda till รถvermontering. Du kan prova olika vรคrden sjรคlv men var medveten om att det kan ta timmar. Du anvรคnder standardvรคrdet fรถr de andra parametrarna

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

Du kan fรถrbรคttra korsvalideringen med den Stratified K-Folds korsvalidatorn. Du konstruerar bara tre veck hรคr fรถr att snabbare berรคkningen men sรคnka kvaliteten. ร–ka detta vรคrde till 5 eller 10 hemma fรถr att fรถrbรคttra resultaten.

Du vรคljer att trรคna modellen รถver fyra iterationer.

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)

Den randomiserade sรถkningen รคr redo att anvรคndas, du kan trรคna modellen

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

Som du kan se har XGBoost ett bรคttre resultat รคn den tidigare logistiska regressionen.

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)

Skapa DNN med MLPClassifier i scikit-learn

Slutligen kan du trรคna en djupinlรคrningsalgoritm med scikit-learn. Metoden รคr densamma som den andra klassificeraren. Klassificeraren finns tillgรคnglig pรฅ MLPClassifier.

from sklearn.neural_network import MLPClassifier

Du definierar fรถljande algoritm fรถr djupinlรคrning:

  • Adam lรถsare
  • Relu aktiveringsfunktion
  • Alfa = 0.0001
  • satsstorlek 150
  • Tvรฅ dolda lager med 100 respektive 50 neuroner
model_dnn = make_pipeline(
    preprocess,
    MLPClassifier(solver='adam',
                  alpha=0.0001,
                  activation='relu',
                    batch_size=150,
                    hidden_layer_sizes=(200, 100),
                    random_state=1))

Du kan รคndra antalet lager fรถr att fรถrbรคttra modellen

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

DNN-regressionspoรคng: 0.821253

LIME: Lita pรฅ din modell

Nu nรคr du har en bra modell behรถver du ett verktyg fรถr att lita pรฅ den. Maskininlรคrning algoritmer, sรคrskilt slumpmรคssiga skogar och neurala nรคtverk, รคr kรคnda fรถr att vara black-box-algoritmer. Sรคg annorlunda, det fungerar men ingen vet varfรถr.

Tre forskare har tagit fram ett bra verktyg fรถr att se hur datorn gรถr en fรถrutsรคgelse. Tidningen heter Why Should I Trust You?

De utvecklade en algoritm som heter Lokala tolkbara modellagnostiska fรถrklaringar (LIME).

Ta ett exempel:

ibland vet du inte om du kan lita pรฅ en maskininlรคrningsfรถrutsรคgelse:

En lรคkare kan till exempel inte lita pรฅ en diagnos bara fรถr att en dator sa det. Du mรฅste ocksรฅ veta om du kan lita pรฅ modellen innan du sรคtter i produktion.

Fรถrestรคll dig att vi kan fรถrstรฅ varfรถr nรฅgon klassificerare gรถr en fรถrutsรคgelse รคven otroligt komplicerade modeller som neurala nรคtverk, slumpmรคssiga skogar eller svms med vilken kรคrna som helst

kommer att bli mer tillgรคnglig fรถr att lita pรฅ en fรถrutsรคgelse om vi kan fรถrstรฅ orsakerna bakom den. Frรฅn exemplet med lรคkaren, om modellen berรคttade fรถr honom vilka symtom som รคr viktiga skulle du lita pรฅ den, รคr det ocksรฅ lรคttare att ta reda pรฅ om du inte ska lita pรฅ modellen.

Lime kan berรคtta vilka funktioner som pรฅverkar klassificerarens beslut

Fรถrberedelse av data

De รคr ett par saker du behรถver รคndra fรถr att kรถra LIME med pytonorm. Fรถrst och frรคmst mรฅste du installera kalk i terminalen. Du kan anvรคnda pipinstallera kalk

Lime anvรคnder sig av LimeTabularExplainer-objektet fรถr att approximera modellen lokalt. Detta objekt krรคver:

  • en datauppsรคttning i numpy-format
  • Namnet pรฅ funktionerna: feature_names
  • Namnet pรฅ klasserna: klassnamn
  • Indexet fรถr kolumnen med kategoriska funktioner: categorical_features
  • Namnet pรฅ gruppen fรถr varje kategoriskt inslag: categorical_names

Skapa numpy tรฅgset

Du kan kopiera och konvertera df_train frรฅn pandor till numpy vรคldigt lรคtt

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

Fรฅ klassnamnet Etiketten รคr tillgรคnglig med objektet unique(). Du borde se:

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

index fรถr kolumnen fรถr de kategoriska dragen

Du kan anvรคnda metoden du lutar innan fรถr att fรฅ namnet pรฅ gruppen. Du kodar etiketten med LabelEncoder. Du upprepar operationen pรฅ alla kategoriska funktioner.

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

Nu nรคr datauppsรคttningen รคr klar kan du konstruera den olika datauppsรคttningen som visas i Scikit-lรคrexemplen nedan. Du transformerar faktiskt data utanfรถr pipelinen fรถr att undvika fel med LIME. Trรคningsuppsรคttningen i LimeTabularExplainer bรถr vara en numpy array utan strรคng. Med metoden ovan har du ett trรคningsdataset redan konverterat.

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)

Du kan gรถra pipelinen med de optimala parametrarna frรฅn XGBoost

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

Du fรฅr en varning. Varningen fรถrklarar att du inte behรถver skapa en etikettkodare innan pipelinen. Om du inte vill anvรคnda LIME gรฅr det bra att anvรคnda metoden frรฅn den fรถrsta delen av Machine Learning with Scikit-learn-handledningen. Annars kan du fortsรคtta med den hรคr metoden, skapa fรถrst en kodad datauppsรคttning, stรคll in att hรคmta den heta kodaren inom pipeline.

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)

Innan vi anvรคnder LIME i aktion, lรฅt oss skapa en numpy array med funktionerna i fel klassificering. Du kan anvรคnda den listan senare fรถr att fรฅ en uppfattning om vad som vilseleder klassificeraren.

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)

Du skapar en lambdafunktion fรถr att hรคmta fรถrutsรคgelsen frรฅn modellen med den nya datan. Du kommer att behรถva det snart.

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

Du konverterar pandas dataram till numpy array

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)

Lรฅt oss vรคlja ett slumpmรคssigt hushรฅll frรฅn testsetet och se modellfรถrutsรคgelsen och hur datorn gjorde sitt val.

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

Du kan anvรคnda fรถrklararen med explain_instance fรถr att kontrollera fรถrklaringen bakom modellen

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

Fรถrberedelse av data

Vi kan se att klassificeraren fรถrutspรฅdde hushรฅllet korrekt. Inkomsten รคr faktiskt รถver 50k.

Det fรถrsta vi kan sรคga รคr att klassificeraren inte รคr sรฅ sรคker pรฅ de fรถrutspรฅdda sannolikheterna. Maskinen fรถrutspรฅr att hushรฅllet har en inkomst รถver 50k med en sannolikhet pรฅ 64%. Dessa 64 % bestรฅr av kapitalvinst och รคktenskap. Den blรฅ fรคrgen bidrar negativt till den positiva klassen och den orange linjen, positivt.

Klassificeraren รคr fรถrvirrad eftersom kapitalvinsten fรถr detta hushรฅll รคr noll, medan kapitalvinsten vanligtvis รคr en bra prediktor fรถr vรคlstรฅnd. Dessutom arbetar hushรฅllet mindre รคn 40 timmar per vecka. ร…lder, yrke och kรถn bidrar positivt till klassificeraren.

Om civilstรฅndet var singel skulle klassificeraren ha fรถrutspรฅtt en inkomst under 50k (0.64-0.18 = 0.46)

Vi kan fรถrsรถka med ett annat hushรฅll som har blivit felaktigt klassificerat

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)

Fรถrberedelse av data

Klassificeraren fรถrutspรฅdde en inkomst under 50k medan det inte รคr sant. Det hรคr hushรฅllet verkar konstigt. Den har ingen kapitalvinst eller kapitalfรถrlust. Han รคr skild och รคr 60 รฅr gammal, och det รคr ett utbildat folk, dvs education_num > 12. Enligt det รถvergripande mรถnstret bรถr detta hushรฅll, som klassificeraren fรถrklarar, fรฅ en inkomst under 50k.

Du fรถrsรถker leka med LIME. Du kommer att mรคrka grova misstag frรฅn klassificeraren.

Du kan kontrollera GitHub fรถr รคgaren av biblioteket. De tillhandahรฅller extra dokumentation fรถr bild- och textklassificering.

Sammanfattning

Nedan รคr en lista รถver nรฅgra anvรคndbara kommandon med scikit learning version >=0.20

skapa tรฅg/testdatauppsรคttning praktikanter splittras
Bygg en pipeline
vรคlj kolumnen och tillรคmpa omvandlingen gรถra kolumntransformator
typ av transformation
standardisera Standardskalare
min Max MinMaxScaler
Normalisera normaliserare
Berรคkna saknat vรคrde tillrรคkna
Konvertera kategorisk OneHotEncoder
Anpassa och transformera data fit_transform
Gรถr rรถrledningen make_pipeline
Grundmodell
logistisk รฅtergรฅng Logistisk tillbakagรฅng
XGBoost XGBClassifier
Neuralt nรคt MLPClassifierare
Rutnรคtssรถkning GridSearchCV
Randomiserad sรถkning RandomizedSearchCV

Sammanfatta detta inlรคgg med: