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)
- 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
Postar um comentário