Tutorial de Machine Learning com Python - Iniciantes - Parte 2



Em continuação á parte 1 do tutorial de machine learning para iniciantes, que pode ser encontrado em https://incubedatascience.blogspot.com/2020/02/tutorial-de-machine-learning-com-python.html
vamos iniciar a segunda parte deste tutorial, onde valos abordar mais diretamente Machine Learning, Aprendizado Supervisionado e Não Supervisionado, Deep Learning, Predição de Séries Temporais e um pouco do uso de Pytorch.

Vamos iniciar importante as principais bibliotecas que vamos trabalhar do Python


Os arquivos de dados de entrada estão disponíveis no diretório "../input/". Por exemplo, executar isso (clicando em executar ou pressionando Shift + Enter) listará os arquivos no diretório de entrada


Todos os resultados que você escreve no diretório atual são salvos como saída.


Ler o  csv (valor separado por vírgula) nos dados



MACHINE LEARNING (ML)



  1. Aprendizado Supervisionado


  • Aprendizado supervisionado: usa dados que possuem rótulos. Por exemplo, existem dados de pacientes ortopédicos com rótulos normais e anormais.
    • Existem recursos (variável preditora) e variável de destino. Os recursos são como raio pélvico ou inclinação sacral (se você não tem idéia do que são como eu, pode ver imagens no google como o que eu fiz :)) As variáveis-alvo são rótulos normais e anormais.
    • O objetivo é que, conforme determinados recursos (entrada), prevejam se a variável de destino (saída) é normal ou anormal.
    • Classificação: a variável alvo consiste em categorias como normal ou anormal.
    • Regressão: a variável alvo é contínua como o mercado de ações
    • Se essas explicações não forem suficientes, basta pesquisar aprimorar sua pesquisa no Google (afinal isto é só um Tutorial). No entanto, tenha cuidado com a terminologia: características || variável preditora || variável independente || colunas || entrada.variável de destino || variável de resposta || classe || variável dependente || saída || resultado


ANÁLISE EXPLORATÓRIA DE DADOS (EDA)


  • Para criar algo nos dados, como você sabe, é necessário explorar os dados.
  • Eu sempre começo com head() para ver os recursos que são pelvic_incidence, pelvic_tilt numeric, lumbar_lordosis_angle, sacral_slope, pelvic_radius and degree_spondyloli e variável de destino que é class.
  • head(): o valor padrão mostra as primeiras 5 linhas (amostras). Se você quiser ver, por exemplo, 100 linhas, basta escrever head(100


Bem, a pergunta é: existe algum valor de NaN e comprimento desses dados, então vamos ver as informações


Como você pode ver:


  • length: 310 (índice de intervalo)
  • Os recursos são flutuantes
  • Variáveis de destino são objetos tipo string
  • OK, já temos algumas idéias sobre os dados, mas vamos olhar mais profundamente
  • describe() - Efetua um resumo estatístico do Data Frame, com quartis, mediana, média, etc
    • Por que precisamos ver estatísticas como média, std, max ou min? Eu odeio os testes :) então responda: Para visualizar dados, os valores devem estar mais próximos. Como você pode ver, os valores parecem mais próximos. Pelo menos não há valores incompatíveis, como a média de um recurso é 0,1 e o outro é 1000. Também há outros motivos que mencionarei nas próximas partes.



pd.plotting.scatter_matrix


  • verde: normal e vermelho: anormal (abnormal)
  • c: cor
  • figsize: tamanho da figura
  • diagonal: histograma de cada recurso
  • alfa: opacidade
  • s: tamanho do marcador
  • marker: tipo de marcador




Ok, como você entende na matriz de dispersão, existem relações entre cada recurso, mas quantas classes normais (verde) e anormais (vermelhas) existem.

  • A biblioteca Searborn possui countplot() que conta o número de classes
  • Além disso, você pode imprimi-lo com o método value_counts()

Esses dados parecem equilibrados. Na verdade, não existe um valor definitivo ou numérico para os dados balanceados, mas esses dados são suficientemente balanceados para nós.

Agora vamos aprender o primeiro método de classificação KNN


K-NEAREST NEIGHBORS (KNN)


  • KNN: veja os K pontos de dados mais próximos rotulados
  • Método de classificação.
  • Primeiro, precisamos treinar nossos dados. Train = fit
  • fit(): ajusta os dados, treina os dados.
  • predict(): prediz os dados
  • x : recursos
  • y: variáveis alvo (normal, anormal)
  • n_neighbors: K. Neste exemplo, é 3. significa que observe os 3 pontos de dados mais próximos




  • Bem, ajustamos os dados e prevemos com o KNN.
  • Então, prevemos correto ou qual é a nossa precisão ou a melhor métrica para avaliar nosso resultado? Vamos dar uma resposta a estas perguntas.

Medindo o desempenho do modelo:


  • A precisão, que é uma fração das previsões corretas, é uma métrica comumente usada. Vamos usá-la sabe, mas há outro problema!! Como você vê, treinei dados com x (recursos) e prevejo novamente x (recursos). Portanto, precisamos dividir nosso treino de dados e conjuntos de testes.
  • train: use o conjunto de treino por encaixe
  • test: faça uma previsão no conjunto de testes.
  • Com conjuntos de treino e teste, os dados ajustados e os dados testados são completamente diferentes
  • train_test_split (x, y, test_size = 0,3, random_state = 1)
    • x: recursos
    • y: variáveis alvo (normal, anormal(abnormal))
    • test_size: porcentagem do tamanho do teste. Exemplo test_size = 0,3, tamanho do teste = 30% e tamanho do treino = 70%
    • random_state: define uma semente. Se essa semente for o mesmo número, train_test_split() produzirá exatamente a mesma divisão a cada momento
    • fit (x_train, y_train): ajuste em conjuntos de treino
    • score (x_test, y_test)): prever e fornecer precisão nos conjuntos de testes



A precisão é de 86%, então é bom? Eu não sei, na verdade, vamos ver no final do tutorial. Agora, a pergunta é por que escolhemos K = 3 ou qual valor precisamos escolher para K. A resposta está na complexidade do modelo

Complexidade do modelo:


  • K tem nome geral. É chamado de hiperparâmetro. Por enquanto, apenas saiba que K é hiperparâmetro e precisamos escolher o que oferece melhor desempenho.
  • A literatura diz que se k é pequeno, modelo é modelo complexo, pode levar a superajuste(overfit). Isso significa que o modelo memoriza os conjuntos de treino e não pode prever os conjuntos de testes com boa precisão.
  • Se k for grande, o modelo menos complexo pode levar à falta de ajuste(underfit).
  • Abaixo, eu mostro o valor de K de 1 a 25 (excluo) e encontro precisão para cada valor de K. Como você pode ver na plotagem, quando K é 1, ele memoriza os conjuntos de treino e não pode fornecer boa precisão no conjunto de testes (super ajuste / overfit). Além disso, se K tiver 18, o modelo é levado a desajustar (underfit). Novamente, a precisão não é suficiente. No entanto, observe quando K tem 18 (melhor desempenho), a precisão tem o valor mais alto, quase 88%.



O que você aprendeu até agora


  • Aprendizado supervisionado
  • Análise exploratória de dados
  • KNN
    • Como dividir dados
    • Como ajustar a previsão de dados
    • Como medir o desempenho do modelo (precisão)
    • Como escolher o hiperparâmetro (K)

O que acontece se eu der uma chance ao KNN e transformá-lo em outra técnica de classificação como a Random Forest?


  • A resposta é nada. Porque a ideia e até a maioria dos códigos (apenas o KNeighborsClassifier precisa ser RandomForestClassifier) são os mesmos. Você precisa dividir, ajustar, prever seus dados e medir o desempenho e escolher o hiperparâmetro do Random Forest (como max_depth).

REGRESSÃO (REGRESSION)


  • Aprendizado Supervisionado
  • Vamos aprender regressões lineares e logísticas
  • Esses dados de pacientes ortopédicos não são adequados para regressão, portanto, utilizo apenas dois recursos que são sacral_slope e pelvic_incidence de alterações anormais.
    • Considero que o recurso é pelvic_incidence e o alvo é sacral_slope
    • Vamos olhar para o gráfico de dispersão, para entendê-lo melhor
    • reshape(-1,1): se você não usar a forma de x ou y becaomes(210) e não pudermos usá-la no sklearn, usaremos a shape(-1,1) e a shape de x ou y será ( 210, 1).


Agora, temos nossos dados para fazer regressão. Nos problemas de regressão, o valor alvo é variável e variável contínua, como preço da casa ou inclinação sacral. Vamos ajustar a linha nestes pontos.

Regressão Linear (Linear regression)


  • y = ax + b onde y = alvo, x = característica e a = parâmetro do modelo
  • Escolhemos o parâmetro do modelo(a) de acordo com a função de erro mínima que é função perdida
  • Na regressão linear, usamos o Mínimo Quadrado Ordinário (Ordinary Least Square - OLS) como função perdida.
  • OLS: soma todos os resíduos, mas alguns resíduos positivos e negativos podem se cancelar, portanto, somamos o quadrado dos resíduos. É chamado OLS
  • Pontuação: a pontuação usa o método R ^ 2 que é ((y_pred - y_mean) ^ 2) / (y_actual - y_mean) ^ 2


VALIDAÇÃO CRUZADA (CROSS VALIDATION)

Como você sabe no método KNN, usamos o teste de treino dividido com random_state que se divide exatamente o mesmo a cada vez. No entanto, se não usarmos random_state, os dados serão divididos de maneira diferente a cada momento e de acordo com a precisão da divisão será diferente. Portanto, podemos concluir que o desempenho do modelo depende do train_test_split. Por exemplo, você divide, ajusta e prevê dados 5 vezes e as precisões são 0,89, 0,9, 0,91, 0,92 e 0,93, respectivamente. Qual precisão você usa? Você sabe qual será a precisão na 6ª vez dividida, treinada e prevista. A resposta é que eu não sei, mas se eu usar a validação cruzada, posso encontrar uma precisão aceitável.

Validação Cruzada (Cross Validation (CV))


  • K folds = K fold CV.
  • Quando K é aumentado, o custo computacional é aumentado
  • cross_val_score (reg, x, y, cv = 5): use reg (regressão linear) com x e y que definimos acima e K é 5. Significa 5 vezes (dividir, treinar, prever)


Regressão Regularizada (Regularized Regression)

À medida que aprendemos a regressão linear, escolha parâmetros (coeficientes) enquanto minimiza a função perdida. Se a regressão linear considerar que um dos recursos é importante, ele fornece um coeficiente alto para esse recurso. No entanto, isso pode causar um ajuste excessivo (overfitting) que é como memorizar no KNN. Para evitar ajustes excessivos (overfitting), usamos a regularização que penaliza grandes coeficientes.


  • Regressão de Ridge: Primeira técnica de regularização. Também é chamado de regularização L2.
    • A regressão de Ridge função Perdida = OLS + alfa * soma(parâmetro ^ 2)
    • alpha é o parâmetro que precisamos escolher para ajustar e prever. A escolha de alfa é semelhante à escolha K no KNN. Como pode ver, alfa é um hiperparâmetro que precisamos escolher para obter a melhor precisão e complexidade do modelo. Esse processo é chamado de ajuste de hiperparâmetro.
    • E se alfa for zero? função perdida = OLS, de modo que é rigidez linear :)
    • Se alfa é pequeno, pode causar super ajuste(overfitting)
    • Se alfa é grande, isso pode causar falta de ajuste( underfitting). Mas não pergunte o que é pequeno e grande. Estes podem ser alterados de um problema para outro.
  • Lasso regression ( regressão de laço): segunda técnica de regularização. Também é chamado de regularização L1.
    • Lasso regression função perdida = OLS + alfa * soma (valor_ absoluto (parâmetro))
    • Pode ser usado para selecionar recursos importantes dos dados. Como os recursos cujos valores não são reduzidos a zero, são escolhidos pela Lasso regression.
    • Para escolher um recurso, adiciono novos recursos aos nossos dados de regressão

Linear vs Ridge vs Lasso Primeira impressão: Linear Feature Selection: 1.Lasso 2.Ridge Regression model: 1.Ridge 2.Lasso 3.Linear


Como você pode ver, pelvic_incidence e pelvic_tilt number são características importantes, mas outras não são importantes

Agora vamos discutir a precisão. É suficiente para medir a seleção do modelo. Por exemplo, existem dados que incluem 95% de amostras normais e 5% de anormais e nosso modelo usa precisão para a métrica de medição. Em seguida, nosso modelo prevê 100% de normalidade para todas as amostras e a precisão é de 95%, mas classifica todas as amostras anormais de forma incorreta. Portanto, precisamos usar a matriz de confusão como uma matriz de medição de modelo nos dados de desequilíbrio.

Ao usar a matriz de confusão, vamos usar o Random forest classifie aleatório para diversificar os métodos de classificação.


  • tp = positivo verdadeiro (20), fp = falso positivo (7), fn = falso negativo (8), tn = negativo verdadeiro (58)
  • tp = A previsão é positiva (normal) e a real é positiva (normal).
  • fp = A previsão é positiva (normal) e a real é negativa (anormal).
  • fn = A previsão é negativa (anormal) e a real é positiva (normal).
  • tn = A previsão é negativa (anormal) e a real é negativa (anormal)
  • precisão = tp / (tp + fp)
  • recall = tp / (tp + fn)
  • f1 = 2 recuperação de precisão / (precisão + recuperação)



Curva ROC com Regressão Logística


  • A saída de regressão logística é probabilidade
  • Se a probabilidade for maior que 0,5, os dados serão rotulados como 1 (anormal) ou 0 (normal)
  • Por padrão, o limite de regressão logística é 0,5
  • ROC é a operação do receptor e característica. Nesta curva, o eixo x é a taxa de falsos positivos e o eixo y é a taxa de verdadeiros positivos
  • Se a curva na plotagem estiver mais próxima do canto superior esquerdo, o teste será mais preciso.
  • A pontuação da curva Roc é AUC que é a área de computação sob a curva a partir das pontuações de previsão
  • Queremos AUC o mais pŕoximo de 1
  • fpr = taxa de falsos positivos
  • tpr = taxa positiva verdadeira


TUNING DE HIPERPARÊMETROS

Como mencionei no KNN, existem hiperparâmetros que precisam ser ajustados


  • Por Exemplo:
    • o k no KNN
    • Alpha no Risge e Lasso
    • Parâmetros no Ramdom Forest como max_depth
    • Parâmetros de Regressão Linear (coeficientes)
  • Tuning de Hiperparâmetros
    • tente todas as combinações de diferentes parâmetros
    • ajuste todos elas
    • medir o desempenho da previsão
    • ver quão bem cada um executa
    • finalmente escolha os melhores hiperparâmetros
  • Só precisamos de um código de linha que é GridSearchCV
    • grid: K é de 1 a 50 (excluir)
    • GridSearchCV pega knn e grid e faz a pesquisa em grid. Significa combinação de todos os hiperparâmetros.



Outro exemplo de pesquisa de grade com 2 hiperparâmetros


  • O primeiro hiperparâmetro é C: parâmetro de regularização da regressão logística
    • Se C for alto: excesso de ajuste (overfit)
    • Se C é baixo: fata de ajuste (underfit)
  • O segundo hiperparâmetro é a penalidade (função perdida): l1 (Lasso) ou l2 (Ridge), como aprendemos na parte da regressão linear.


DADOS DE PRÉ-PROCESSAMENTO


  • Na vida real, os dados podem incluir objetos ou dados categóricos. Para usá-los no sklearn, precisamos codificá-los em dados numéricos.
  • Nos dados, a classe é anormal e normal. Vamos convertê-los em valor numérico (na verdade, eu fiz isso na parte de regressão logística com método diferente)
  • 2 recursos diferentes são criados com o nome class_Abnormal e class_Normal
  • No entanto, precisamos apagar (drop) uma das colunas porque elas são duplicadas


Outra etapa de pré-processamento é centralizar, dimensionar ou normalizar


  • O KNN usa forma de distância para classificação como alguns outros métodos. Portanto, precisamos escalar dados. Por esse motivo, usamos:
    • padronização: (x - x.mean) / x.variance ou x - x.min / x.range
  • pipeline: O objetivo do pipeline é montar várias etapas, como svm (classificador) e padronização (pré-processamento)
  • Como criamos o nome dos parâmetros: por exemplo SVM_ _C: stepName__parameterName
  • Em seguida, procure na grid para encontrar os melhores parâmetros


APRENDIZAGEM NÃO SUPERVISIONADA


  • Aprendizado não supervisionado: usa dados que não rotularam e descobriram padrões ocultos a partir de dados não rotulados. Exemplo, existem dados de pacientes ortopédicos que não possuem rótulos. Você não sabe qual paciente ortopédico é normal ou anormal.
  • Como você sabe, os dados de pacientes ortopédicos são dados rotulados (supervisionados). Possui variáveis de destino. Para trabalhar no aprendizado não supervisionado, vamos largar as variáveis-alvo e visualizar apenas e considerar pelvic_radius e degree_spondylolisthesis

KMEANS


  • Vamos tentar o nosso primeiro método não supervisionado que é o KMeans Cluster
  • Cluster do KMeans: o algoritmo trabalha iterativamente para atribuir cada ponto de dados a um dos grupos K com base nos recursos fornecidos. Os pontos de dados são agrupados com base na similaridade de recursos
  • KMeans (n_clusters = 2): n_clusters = 2 significa que cria 2 clusters


AVALIAÇÃO DO CLUSTER

Agrupamos dados em dois grupos. OK, bem, esse cluster está correto? Para avaliar o clustering, usaremos a tabela de tabulação cruzada.

  • Existem dois clusters que são 0 e 1
  • A primeira classe 0 inclui 138 pacientes anormais e 100 normais
  • A segunda classe 1 inclui 72 pacientes anormais e 0 normais - A maioria dos dois grupos são pacientes anormais


A nova pergunta é que sabemos quantos dados de classe incluem, mas e se o número de classes não for conhecido nos dados. É como um hiperparâmetro no KNN ou regressões.


  • inércia(inertia): como os clusters estão espalhados à distância de cada amostra
  • menor inércia significa mais clusters
  • Qual é o melhor número de clusters? - Há baixa inércia e não há troca de cluster demais para que possamos escolher.


PADRONIZAÇÃO


  • A padronização é importante para a aprendizagem supervisionada e não supervisionada
  • Não se esqueça da padronização como pré-processamento
  • Como já visualizamos dados, você entendeu a ideia. Agora podemos usar todos os recursos para cluster.
  • Podemos usar pipeline como aprendizado supervisionado.


HIERAQUIA


  • linhas verticais são clusters
  • height on dendogram: distância entre o cluster mesclado
  • method = 'single': pontos mais próximos dos clusters


T - Distributed Stochastic Neighbor Embedding (T - SNE)


  • taxa de aprendizagem: 50-200 no normal
  • fit_transform: é ao mesmo tempo apto e transformado. t-sne possui apenas fit_transform
  • As variedades têm a mesma posição uma em relação à outra


PRINCÍPIO DA ANÁLISE DE COMPONENTES (PRINCIPLE COMPONENT ANALYSIS (PCA))

  • Técnica de redução de dimensão fundamental
  • O primeiro passo é a correlação:
    • rotação de amostras de dados para serem alinhadas com os eixos
    • desloca dados como exemplo, para que eles tenham média zero
    • nenhuma informação perdida
    • fit(): aprenda a mudar amostras
    • transform(): aplica a transformação aprendida. Também pode ser aplicado dados de teste
  • Os recursos resultantes do PCA não são linearmente correlacionados
  • Componentes principais: direções de variação
  • Segundo passo: dimensão intrínseca: número de recursos necessários para aproximar a ideia essencial dos dados por trás da redução de dimensão
  • O PCA identifica a dimensão intrínseca quando as amostras possuem vários recursos
  • dimensão intrínseca = número de recursos de PCA com variação significativa
  • Para escolher a dimensão intrínseca, tente todos eles e encontre a melhor precisão


Espero que tenham gostado do artigo, e que possa ser útil para vocês.
Como falei no inicio da parte 1, o objetivo não á aprofundar os conhecimentos em Machine Learning, mas sim desmistificar o aprendizado de máquina e elucidar todos aqueles que estão iniciando sua caminhada no Universo da Ciência de Dados, qual o caminho que vão percorrer.

Grande Abraço e não esqueçam de deixar vossa opinião!
Bons estudos!

Parte 1:  

Notebook :

Referências:

Comentários

Postagens mais visitadas deste blog

Tutorial de Machine Learning com Python - Iniciantes - Parte 1

Regressão Múltipla com R