Tutorial do Scikit-Learn: como instalar e exemplos do Scikit-Learn

O que รฉ Scikit-learn?

Scikit-learn รฉ um open-source Python biblioteca para aprendizado de mรกquina. Ela suporta algoritmos de รบltima geraรงรฃo, como KNN, XGBoost, random forest e SVM. Ela รฉ construรญda sobre NumPy. O Scikit-learn รฉ amplamente usado na competiรงรฃo Kaggle, bem como em empresas de tecnologia proeminentes. Ela ajuda no prรฉ-processamento, reduรงรฃo de dimensionalidade (seleรงรฃo de parรขmetros), classificaรงรฃo, regressรฃo, agrupamento e seleรงรฃo de modelos.

Scikit-learn possui a melhor documentaรงรฃo de todas as bibliotecas de cรณdigo aberto. Ele fornece um grรกfico interativo em https://scikit-learn.org/stable/tutorial/machine_learning_map/index.html.

Como funciona o Scikit Learn
Como funciona o Scikit Learn

O Scikit-learn nรฃo รฉ muito difรญcil de usar e oferece excelentes resultados. No entanto, o scikit learn nรฃo oferece suporte a cรกlculos paralelos. ร‰ possรญvel executar um algoritmo de aprendizado profundo com ele, mas nรฃo รฉ uma soluรงรฃo ideal, especialmente se vocรช souber como usar o TensorFlow.

Como baixar e instalar o Scikit-learn

Agora neste Python Tutorial do Scikit-learn, aprenderemos como baixar e instalar o Scikit-learn:

Opรงรฃo 1: AWS

scikit-learn pode ser usado na AWS. Por favor referir A imagem docker que tem o scikit-learn prรฉ-instalado.

Para usar a versรฃo do desenvolvedor, use o comando em Jupyter

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

Opรงรฃo 2: Mac ou Windows usando Anaconda

Para saber mais sobre a instalaรงรฃo do Anaconda, consulte https://www.guru99.com/download-install-tensorflow.html

Recentemente, os desenvolvedores do scikit lanรงaram uma versรฃo de desenvolvimento que aborda problemas comuns enfrentados pela versรฃo atual. Achamos mais conveniente usar a versรฃo do desenvolvedor em vez da versรฃo atual.

Como instalar o scikit-learn com ambiente Conda

Se vocรช instalou o scikit-learn com o ambiente conda, siga a etapa para atualizar para a versรฃo 0.20

Passo 1) Ativar ambiente tensorflow

source activate hello-tf

Passo 2) Remova o scikit lean usando o comando conda

conda remove scikit-learn

Passo 3) Instale a versรฃo do desenvolvedor.
Instale a versรฃo do desenvolvedor do scikit learn junto com as bibliotecas necessรกrias.

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

OBSERVAร‡รƒO: Windows o usuรกrio precisarรก instalar Microsoft visual C++ 14. Vocรช pode obtรช-lo em aqui.

Exemplo do Scikit-Learn com aprendizado de mรกquina

Este tutorial do Scikit estรก dividido em duas partes:

  1. Aprendizado de mรกquina com scikit-learn
  2. Como confiar em seu modelo com LIME

A primeira parte detalha como construir um pipeline, criar um modelo e ajustar os hiperparรขmetros, enquanto a segunda parte fornece o que hรก de mais moderno em termos de seleรงรฃo de modelos.

Etapa 1) Importe os dados

Durante este tutorial de aprendizagem do Scikit, vocรช usarรก o conjunto de dados adulto.

Para obter informaรงรตes bรกsicas sobre este conjunto de dados, consulte Se vocรช estiver interessado em saber mais sobre as estatรญsticas descritivas, use as ferramentas Dive e Overview.

Consulte Neste tutorial saiba mais sobre mergulho e visรฃo geral

Vocรช importa o conjunto de dados com o Pandas. Observe que vocรช precisa converter o tipo das variรกveis โ€‹โ€‹contรญnuas em formato flutuante.

Este conjunto de dados inclui oito variรกveis โ€‹โ€‹categรณricas:

As variรกveis โ€‹โ€‹categรณricas estรฃo listadas em CATE_FEATURES

  • classe de trabalho
  • educaรงรฃo
  • marital
  • ocupaรงรฃo
  • relacionamento
  • raรงa
  • sexo
  • paรญs nativo

alรฉm disso, seis variรกveis โ€‹โ€‹contรญnuas:

As variรกveis โ€‹โ€‹contรญnuas estรฃo listadas em CONTI_FEATURES

  • idade
  • fnlwgt
  • nรบmero_educaรงรฃo
  • Ganho de capital
  • perda_capital
  • horas_semana

Observe que preenchemos a lista manualmente para que vocรช tenha uma ideia melhor de quais colunas estamos usando. Uma maneira mais rรกpida de construir uma lista categรณrica ou contรญnua รฉ usar:

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

Aqui estรก o cรณdigo para importar os dados:

# 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()
idade fnlwgt nรบmero_educaรงรฃo Ganho de capital perda_capital horas_semana
contar 32561.000000 3.256100e + 04 32561.000000 32561.000000 32561.000000 32561.000000
significar 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

Vocรช pode verificar a contagem de valores exclusivos dos recursos native_country. Vocรช pode ver que apenas uma famรญlia vem da Holanda-Holanda. Este agregado familiar nรฃo nos trarรก nenhuma informaรงรฃo, mas sim atravรฉs de um erro durante o treino.

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

Vocรช pode excluir esta linha nรฃo informativa do conjunto de dados

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

A seguir, vocรช armazena a posiรงรฃo dos recursos contรญnuos em uma lista. Vocรช precisarรก dele na prรณxima etapa para construir o pipeline.

O cรณdigo abaixo irรก percorrer todos os nomes de colunas em CONTI_FEATURES e obter sua localizaรงรฃo (ou seja, seu nรบmero) e, em seguida, anexรก-lo a uma lista chamada 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]

O cรณdigo abaixo faz o mesmo trabalho acima, mas para a variรกvel categรณrica. O cรณdigo abaixo repete o que vocรช fez anteriormente, exceto com os recursos categรณricos.

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

Vocรช pode dar uma olhada no conjunto de dados. Observe que cada recurso categรณrico รฉ uma string. Vocรช nรฃo pode alimentar um modelo com um valor de string. Vocรช precisa transformar o conjunto de dados usando uma variรกvel fictรญcia.

df_train.head(5)

Na verdade, vocรช precisa criar uma coluna para cada grupo do recurso. Primeiro, vocรช pode executar o cรณdigo abaixo para calcular a quantidade total de colunas necessรกrias.

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

Todo o conjunto de dados contรฉm 101 grupos conforme mostrado acima. Por exemplo, os recursos da classe de trabalho possuem nove grupos. Vocรช pode visualizar o nome dos grupos com os seguintes cรณdigos

unique() retorna os valores exclusivos dos recursos categรณricos.

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

Portanto, o conjunto de dados de treinamento conterรก 101 + 7 colunas. As รบltimas sete colunas sรฃo os recursos contรญnuos.

O Scikit-learn pode cuidar da conversรฃo. Isso รฉ feito em duas etapas:

  • Primeiro, vocรช precisa converter a string em ID. Por exemplo, State-gov terรก o ID 1, Self-emp-not-inc ID 2 e assim por diante. A funรงรฃo LabelEncoder faz isso para vocรช
  • Transponha cada ID para uma nova coluna. Conforme mencionado anteriormente, o conjunto de dados possui 101 IDs de grupo. Portanto, haverรก 101 colunas capturando todos os grupos de recursos categรณricos. Scikit-learn possui uma funรงรฃo chamada OneHotEncoder que realiza esta operaรงรฃo

Etapa 2) Crie o conjunto de treinamento/teste

Agora que o conjunto de dados estรก pronto, podemos dividi-lo em 80/20.

80% para o conjunto de treinamento e 20% para o conjunto de teste.

Vocรช pode usar train_test_split. O primeiro argumento รฉ o dataframe sรฃo os recursos e o segundo argumento รฉ o rรณtulo dataframe. Vocรช pode especificar o tamanho do conjunto de testes com 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)

Etapa 3) Construir o pipeline

O pipeline facilita alimentar o modelo com dados consistentes.

A ideia por trรกs รฉ colocar os dados brutos em um โ€˜pipelineโ€™ para realizar operaรงรตes.

Por exemplo, com o conjunto de dados atual, vocรช precisa padronizar as variรกveis โ€‹โ€‹contรญnuas e converter os dados categรณricos. Observe que vocรช pode realizar qualquer operaรงรฃo dentro do pipeline. Por exemplo, se vocรช tiver 'NA's' no conjunto de dados, poderรก substituรญ-los pela mรฉdia ou mediana. Vocรช tambรฉm pode criar novas variรกveis.

Vocรช tem a escolha; codifique os dois processos ou crie um pipeline. A primeira escolha pode levar ao vazamento de dados e criar inconsistรชncias ao longo do tempo. Uma opรงรฃo melhor รฉ usar o pipeline.

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

O pipeline realizarรก duas operaรงรตes antes de alimentar o classificador logรญstico:

  1. Padronize a variรกvel: `StandardScaler()โ€œ
  2. Converta os recursos categรณricos: OneHotEncoder(sparse=False)

Vocรช pode executar as duas etapas usando make_column_transformer. Esta funรงรฃo nรฃo estรก disponรญvel na versรฃo atual do scikit-learn (0.19). Nรฃo รฉ possรญvel com a versรฃo atual realizar o codificador de rรณtulo e um codificador ativo no pipeline. Esse รฉ um dos motivos pelos quais decidimos usar a versรฃo de desenvolvedor.

make_column_transformer รฉ fรกcil de usar. Vocรช precisa definir quais colunas aplicar a transformaรงรฃo e qual transformaรงรฃo operar. Por exemplo, para padronizar o recurso contรญnuo, vocรช pode fazer:

  • conti_features, StandardScaler() dentro de make_column_transformer.
    • conti_features: lista com a variรกvel contรญnua
    • StandardScaler: padroniza a variรกvel

O objeto OneHotEncoder dentro de make_column_transformer codifica automaticamente o rรณtulo.

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

Vocรช pode testar se o pipeline funciona com fit_transform. O conjunto de dados deve ter o seguinte formato: 26048, 107

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

O transformador de dados estรก pronto para uso. Vocรช pode criar o pipeline com make_pipeline. Depois que os dados forem transformados, vocรช poderรก alimentar a regressรฃo logรญstica.

model = make_pipeline(
    preprocess,
    LogisticRegression())

Treinar um modelo com o scikit-learn รฉ trivial. Vocรช precisa usar o ajuste do objeto precedido pelo pipeline, ou seja, modelo. Vocรช pode imprimir a precisรฃo com o objeto score da biblioteca scikit-learn

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

Finalmente, vocรช pode prever as classes com predizer_proba. Ele retorna a probabilidade para cada classe. Observe que isso soma um.

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

Etapa 4) Usando nosso pipeline em uma pesquisa em grade

Ajustar o hiperparรขmetro (variรกveis โ€‹โ€‹que determinam a estrutura da rede como unidades ocultas) pode ser tedioso e exaustivo.

Uma forma de avaliar o modelo poderia ser alterar o tamanho do conjunto de treinamento e avaliar o desempenho.

Vocรช pode repetir esse mรฉtodo dez vezes para ver as mรฉtricas de pontuaรงรฃo. No entanto, รฉ muito trabalhoso.

Em vez disso, o scikit-learn fornece uma funรงรฃo para realizar ajuste de parรขmetros e validaรงรฃo cruzada.

Validaรงรฃo cruzada

Validaรงรฃo cruzada significa que durante o treinamento, o conjunto de treinamento desliza n nรบmero de vezes em dobras e entรฃo avalia o modelo n vezes. Por exemplo, se cv for definido como 10, o conjunto de treinamento รฉ treinado e avaliado dez vezes. A cada rodada, o classificador escolhe aleatoriamente nove dobras para treinar o modelo, sendo a 10ยช dobra destinada ร  avaliaรงรฃo.

Pesquisa de grade

Cada classificador possui hiperparรขmetros para ajustar. Vocรช pode tentar valores diferentes ou definir uma grade de parรขmetros. Se vocรช acessar o site oficial do scikit-learn, verรก que o classificador logรญstico tem diferentes parรขmetros para ajustar. Para tornar o treinamento mais rรกpido, vocรช escolhe ajustar o parรขmetro C. Ele controla o parรขmetro de regularizaรงรฃo. Deveria ser positivo. Um valor pequeno dรก mais peso ao regularizador.

Vocรช pode usar o objeto GridSearchCV. Vocรช precisa criar um dicionรกrio contendo os hiperparรขmetros a serem ajustados.

Vocรช lista os hiperparรขmetros seguidos dos valores que deseja testar. Por exemplo, para ajustar o parรขmetro C, vocรช usa:

  • 'logisticregression__C': [0.1, 1.0, 1.0]: O parรขmetro รฉ precedido do nome, em letras minรบsculas, do classificador e dois sublinhados.

O modelo tentarรก quatro valores diferentes: 0.001, 0.01, 0.1 e 1.

Vocรช treina o modelo usando 10 dobras: cv=10

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

Vocรช pode treinar o modelo usando GridSearchCV com os parรขmetros gri e cv.

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

SAรDA

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)

Para acessar os melhores parรขmetros, vocรช usa best_params_

grid_clf.best_params_

SAรDA

{'logisticregression__C': 1.0}

Depois de treinar o modelo com quatro valores de regularizaรงรฃo diferentes, o parรขmetro ideal รฉ

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

melhor regressรฃo logรญstica da pesquisa em grade: 0.850891

Para acessar as probabilidades previstas:

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

Modelo XGBoost com scikit-learn

Vamos tentar exemplos do Scikit-learn para treinar um dos melhores classificadores do mercado. XGBoost รฉ uma melhoria em relaรงรฃo ร  floresta aleatรณria. A base teรณrica do classificador fora do escopo deste Python Tutorial do Scikit. Tenha em mente que o XGBoost ganhou muitas competiรงรตes kaggle. Com um tamanho mรฉdio de conjunto de dados, ele pode ter um desempenho tรฃo bom quanto um algoritmo de aprendizado profundo ou atรฉ melhor.

O classificador รฉ difรญcil de treinar porque possui um grande nรบmero de parรขmetros para ajustar. Vocรช pode, รฉ claro, usar GridSearchCV para escolher o parรขmetro para vocรช.

Em vez disso, vamos ver como usar uma maneira melhor de encontrar os parรขmetros ideais. GridSearchCV pode ser entediante e muito demorado para treinar se vocรช passar muitos valores. O espaรงo de busca cresce junto com o nรบmero de parรขmetros. Uma soluรงรฃo preferรญvel รฉ usar RandomizedSearchCV. Este mรฉtodo consiste em escolher aleatoriamente os valores de cada hiperparรขmetro apรณs cada iteraรงรฃo. Por exemplo, se o classificador for treinado em 1000 iteraรงรตes, entรฃo 1000 combinaรงรตes serรฃo avaliadas. Funciona mais ou menos assim. GridSearchCV

Vocรช precisa importar o xgboost. Se a biblioteca nรฃo estiver instalada, use pip3 install xgboost ou

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

In Jupyter meio Ambiente

Em seguida,

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

A prรณxima etapa neste Scikit Python O tutorial inclui a especificaรงรฃo dos parรขmetros a serem ajustados. Vocรช pode consultar a documentaรงรฃo oficial para ver todos os parรขmetros a serem ajustados. Por uma questรฃo de Python Tutorial do Sklearn, vocรช escolhe apenas dois hiperparรขmetros com dois valores cada. O XGBoost leva muito tempo para treinar; quanto mais hiperparรขmetros na grade, mais tempo vocรช precisa esperar.

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

Vocรช constrรณi um novo pipeline com o classificador XGBoost. Vocรช escolhe definir 600 estimadores. Observe que n_estimators sรฃo um parรขmetro que vocรช pode ajustar. Um valor alto pode levar ao overfitting. Vocรช pode tentar valores diferentes por conta prรณpria, mas esteja ciente de que isso pode levar horas. Vocรช usa o valor padrรฃo para os outros parรขmetros

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

Vocรช pode melhorar a validaรงรฃo cruzada com o validador cruzado Stratified K-Folds. Vocรช constrรณi apenas trรชs dobras aqui para acelerar o cรกlculo, mas diminuindo a qualidade. Aumente esse valor para 5 ou 10 em casa para melhorar os resultados.

Vocรช escolhe treinar o modelo em quatro iteraรงรตes.

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)

A pesquisa aleatรณria estรก pronta para uso, vocรช pode treinar o modelo

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

Como vocรช pode ver, o XGBoost tem uma pontuaรงรฃo melhor do que a regressรฃo logรญstica anterior.

print("Melhor parameter", random_search.best_params_)
print("best logistic regression from grid search: %f" % random_search.best_estimator_.score(X_test, y_test))
Melhor 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)

Crie DNN com MLPClassifier no scikit-learn

Finalmente, vocรช pode treinar um algoritmo de aprendizado profundo com o scikit-learn. O mรฉtodo รฉ igual ao outro classificador. O classificador estรก disponรญvel em MLPClassifier.

from sklearn.neural_network import MLPClassifier

Vocรช define o seguinte algoritmo de aprendizado profundo:

  • Solucionador de Adam
  • Funรงรฃo de ativaรงรฃo Relu
  • Alfa = 0.0001
  • tamanho do lote de 150
  • Duas camadas ocultas com 100 e 50 neurรดnios respectivamente
model_dnn = make_pipeline(
    preprocess,
    MLPClassifier(solver='adam',
                  alpha=0.0001,
                  activation='relu',
                    batch_size=150,
                    hidden_layer_sizes=(200, 100),
                    random_state=1))

Vocรช pode alterar o nรบmero de camadas para melhorar o modelo

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

Pontuaรงรฃo de regressรฃo DNN: 0.821253

LIME: Confie no seu modelo

Agora que vocรช tem um bom modelo, precisa de uma ferramenta para confiar nele. Aprendizado de mรกquinas algoritmos, especialmente florestas aleatรณrias e redes neurais, sรฃo conhecidos como algoritmos de caixa preta. Diga o contrรกrio, funciona, mas ninguรฉm sabe por quรช.

Trรชs pesquisadores criaram uma รณtima ferramenta para ver como o computador faz uma previsรฃo. O artigo se chama Por que devo confiar em vocรช?

Eles desenvolveram um algoritmo chamado Explicaรงรตes agnรณsticas de modelos interpretรกveis โ€‹โ€‹locais (LIME).

Veja um exemplo:

ร s vezes vocรช nรฃo sabe se pode confiar em uma previsรฃo de aprendizado de mรกquina:

Um mรฉdico, por exemplo, nรฃo pode confiar num diagnรณstico sรณ porque um computador o disse. Vocรช tambรฉm precisa saber se pode confiar no modelo antes de colocรก-lo em produรงรฃo.

Imagine que podemos entender por que qualquer classificador estรก fazendo uma previsรฃo atรฉ mesmo de modelos incrivelmente complicados, como redes neurais, florestas aleatรณrias ou svms com qualquer kernel

Serรก mais fรกcil confiar em uma previsรฃo se pudermos compreender as razรตes por trรกs dela. A partir do exemplo do mรฉdico, se a modelo lhe dissesse quais sintomas sรฃo essenciais, vocรช confiaria nela, tambรฉm seria mais fรกcil descobrir se vocรช nรฃo deveria confiar na modelo.

O Lime pode dizer quais recursos afetam as decisรตes do classificador

Preparaรงรฃo de dados

Sรฃo algumas coisas que vocรช precisa alterar para executar o LIME python. Em primeiro lugar, รฉ necessรกrio instalar cal no terminal. Vocรช pode usar pip install lime

O Lime faz uso do objeto LimeTabularExplainer para aproximar o modelo localmente. Este objeto requer:

  • um conjunto de dados em formato numpy
  • O nome dos recursos: feature_names
  • O nome das classes: class_names
  • O รญndice da coluna dos recursos categรณricos: categorical_features
  • O nome do grupo para cada recurso categรณrico: categorical_names

Crie um conjunto de trem entorpecido

Vocรช pode copiar e converter df_train de pandas para numpy muito facilmente

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

Obtenha o nome da classe O rรณtulo รฉ acessรญvel com o objeto unique(). Vocรช deveria ver:

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

รญndice da coluna dos recursos categรณricos

Vocรช pode usar o mรฉtodo que vocรช usou antes para obter o nome do grupo. Vocรช codifica o rรณtulo com LabelEncoder. Vocรช repete a operaรงรฃo em todos os recursos categรณricos.

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

Agora que o conjunto de dados estรก pronto, vocรช pode construir os diferentes conjuntos de dados, conforme mostrado nos exemplos de aprendizado do Scikit abaixo. Na verdade, vocรช transforma os dados fora do pipeline para evitar erros com o LIME. O conjunto de treinamento no LimeTabularExplainer deve ser um array numpy sem string. Com o mรฉtodo acima, vocรช jรก tem um conjunto de dados de treinamento convertido.

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)

Vocรช pode fazer o pipeline com os parรขmetros ideais do 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))])

Vocรช recebe um aviso. O aviso explica que nรฃo รฉ necessรกrio criar um codificador de rรณtulo antes do pipeline. Se nรฃo quiser usar LIME, vocรช pode usar o mรฉtodo da primeira parte do tutorial Machine Learning with Scikit-learn. Caso contrรกrio, vocรช pode continuar com este mรฉtodo, primeiro crie um conjunto de dados codificado e defina o codificador mais quente dentro do 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)

Antes de usar o LIME em aรงรฃo, vamos criar um array numpy com os recursos da classificaรงรฃo errada. Vocรช pode usar essa lista posteriormente para ter uma ideia do que enganou o classificador.

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)

Vocรช cria uma funรงรฃo lambda para recuperar a previsรฃo do modelo com os novos dados. Vocรช precisarรก disso em breve.

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

Vocรช converte o dataframe do pandas em um array numpy

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)

Vamos escolher um domicรญlio aleatรณrio do conjunto de teste e ver a previsรฃo do modelo e como o computador fez sua escolha.

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

Vocรช pode usar o explicador com explica_instance para verificar a explicaรงรฃo por trรกs do modelo

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

Preparaรงรฃo de dados

Podemos ver que o classificador previu o agregado familiar corretamente. A renda estรก, de fato, acima de 50 mil.

A primeira coisa que podemos dizer รฉ que o classificador nรฃo tem tanta certeza sobre as probabilidades previstas. A mรกquina prevรช que a famรญlia tenha uma renda superior a 50 mil com probabilidade de 64%. Esses 64% sรฃo compostos por Ganho de Capital e Conjugal. A cor azul contribui negativamente para a classe positiva e a linha laranja, positivamente.

O classificador fica confuso porque o ganho de capital desta famรญlia รฉ nulo, enquanto o ganho de capital รฉ normalmente um bom preditor de riqueza. Alรฉm disso, o agregado familiar trabalha menos de 40 horas por semana. Idade, ocupaรงรฃo e sexo contribuem positivamente para o classificador.

Se o estado civil fosse solteiro, o classificador teria previsto uma renda abaixo de 50 mil (0.64-0.18 = 0.46)

Podemos tentar com outra famรญlia que tenha sido classificada incorretamente

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)

Preparaรงรฃo de dados

O classificador previu uma renda abaixo de 50 mil, embora isso nรฃo seja verdade. Esta casa parece estranha. Nรฃo possui ganho de capital, nem perda de capital. Ele รฉ divorciado e tem 60 anos, e รฉ uma pessoa instruรญda, ou seja, nรบmero_educaรงรฃo > 12. De acordo com o padrรฃo geral, este agregado familiar deveria, tal como explicado pelo classificador, obter um rendimento inferior a 50k.

Vocรช tenta brincar com o LIME. Vocรช notarรก erros grosseiros do classificador.

Vocรช pode verificar o GitHub do proprietรกrio da biblioteca. Eles fornecem documentaรงรฃo extra para classificaรงรฃo de imagens e textos.

Resumo

Abaixo estรก uma lista de alguns comandos รบteis com a versรฃo scikit learn >=0.20

criar conjunto de dados de treinamento/teste estagiรกrios divididos
Construir um pipeline
selecione a coluna e aplique a transformaรงรฃo fazercolunatransformador
tipo de transformaรงรฃo
estandardizar StandardScaler
mรญnimo mรกximo MinMax Scaler
Normalizar Normalizador
Imputar valor ausente imputar
Converter categรณrico OneHotEncoder
Ajuste e transforme os dados ajuste_transform
Faรงa o pipeline make_pipeline
Modelo bรกsico
regressรฃo logรญstica LogรญsticaRegressรฃo
XGBoostName Classificador XGB
Rede neural Classificador MLP
Pesquisa de grade GradeSearchCV
Pesquisa aleatรณria CV de pesquisa randomizado

Resuma esta postagem com: