Olá, tudo bem? Meu nome é Thiago e lhe dou as boas vindas a mais um curso de Machine Learning da Alura, no qual aprenderemos o que é a dimensão de um dado, o que são dados de alta dimensionalidade e como lidar com eles.
Nosso projeto tem a proposta de desenvolver a Alura_care, uma startup fictícia que tem por objetivo reduzir o número de exames necessários para o diagnóstico de um tipo específico de câncer. Para isso, iniciaremos um pré-processamento dos dados, aprendendo a identificar, por exemplo, células vazias, e como lidar com esse tipo de problema. Também identificaremos valores constantes nos dados e como eles podem impactar ou não no processo de classificação, além de como a correlação influe neste mesmo processo.
Feito isso, iniciaremos os métodos de seleção de features automáticos, como o SelectKBest e o RFE. Além disso, conseguiremos determinar qual o conjunto que nos gerará o melhor resultado possível no processo de classificação, quantas features precisaremos e quais são essas features.
Por último, aprenderemos como visualizar em um plano um dado de alta dimensionalidade, reduzindo a dimensão mas mantendo o maior número possível de informações.
Nesse curso de Machine Learning aprenderemos a lidar com dados de alta dimensionalidade. Na construção de um modelo de Machine Learning, começamos com a entrada de dados. Após essa etapa, precisamos fazer um pré-processamento e a transformação dos dados recebidos para torná-los acessíveis aos algoritmos de Machine Learning. Depois, realizamos a segregação entre dados de teste e dados de treinamento.
Com os dados de treinamento, iniciamos a construção do modelo de Machine Learning. Feita essa construção, realizamos um teste e uma validação do modelo. Caso os resultados não sejam os esperados, retornamos para a construção do modelo, entrando em um loop chamado de "loop de treino e teste". Já se atingimos o resultado esperado, partimos para a implementação do modelo.
Nosso curso passará por praticamente todo o fluxo da construção de um modelo de Machine Learning, com foco principalmente no pré-processamento e na transformação de dados com alta dimensionalidade. Mas o que são dimensões de um dado?
Temos uma base de dados contendo diagnóstico, glicemia, pressão, tipo sanguíneo e idade. Essa base de dados representa a sala de triagem do hospital, na qual uma enfermeira coleta algumas informações e passa um diagnóstico positivo, caso seja necessário um atendimento de emergência, ou negativo caso esse atendimento possa aguardar.
Diagnóstico | Glicemia | Pressão | Tipo Sanguíneo | Idade |
---|---|---|---|---|
Positivo | 130 | 14/10 | A | 43 |
Negativo | 90 | 12/08 | B | 73 |
Cada propriedade que caracteriza um diagnóstico como positivo ou negativo é uma dimensão. Sendo assim, glicemia, pressão, tipo sanguíneo e idade são dimensões. Um dado com alta dimensionalidade nada mais é do que um dado com muitas dimensões. Na nossa base de dados, isso está representado por três pontos (...
), o que significa que a enfermeira coletou diversas outras informações para chegar a um diagnóstico.
Diagnóstico | Glicemia | Pressão | ... | Tipo Sanguíneo | Idade |
---|---|---|---|---|---|
Positivo | 130 | 14/10 | ... | A | 43 |
Negativo | 90 | 12/08 | ... | B | 73 |
Quando temos dados com alta dimensionalidade, uma das coisas que precisamos fazer é reduzir o número de dimensões, isto é, diminuir a dimensionalidade do dado. Mas por que?
Para os algoritmos de Machine Learning, quanto maior o número de dimensões, mais lento é o processo e mais espaço de armazenamento é necessário. Além disso, a alta dimensionalidade pode superajustar os nossos modelos aos dados do treinamento.
Aproveitamento esse exemplo na área médica, criaremos um projeto chamado Alura Care, uma startup fictícia do segmento de saúde que tem por objetivo tornar mais rápida e efetiva a detecção de determinados tipos de câncer. A Alura Care possui uma base de dados contendo o diagnóstico do tipo de câncer, que pode ser maligno (M) ou benigno (B), e diversos exames/dimensões que caracterizam esse diagnóstico.
Diagnóstico | Exame 1 | Exame 2 | ... | Exame 32 | Exame 33 |
---|---|---|---|---|---|
M | 52.123 | 14.983 | ... | 93.543 | 74.634 |
B | 50.128 | 11.934 | ... | 97.762 | 72.961 |
... | ... | ... | ... | ... | ... |
B | 43.123 | 12.983 | ... | 98.543 | 73.634 |
M | 50.128 | 16.934 | ... | 93.762 | 73.961 |
Temos 33 dimensões nessa base de dados, e a questão que a Alura Care deseja responder é: será possível reduzirmos a necessidade de tantos exames para chegar a um diagnóstico de maneira efetiva? Juntos, responderemos essa questão!
Para realizarmos esse curso, usaremos o Jupyter Notebook, mas você pode, se preferir, utilizar qualquer outro Notebook Python da sua preferência, como o Google Colab ou o Kaggle. De início, precisaremos base de dados disponibiliza neste link. Acessando essa página, basta clicar em "Clone or Download" e em seguida em "Download".
Caso você tenha o Git instalado, poderá abrir o Prompt de Comando, selecionar um diretório para armazenar os dados e executar git clone https://github.com/alura-cursos/reducao-dimensionalidade
.
Esse é um conjunto de dados fictício criado com base no Breast Cancer Wisconsin (Diagnostic) Data Set, uma base de dados real, que usaremos durante o curso para demonstrar os algoritmos e passar por todos os processos da redução de dimensionalidade.
Para importarmos essa base de dados, usaremos o pd.read_csv()
da biblioteca Pandas, passando o diretório do arquivo baixadop. Em seguida, plotaremos os dados na tela.
import pandas as pd
resultados_exames = pd.read_csv("Dataset-master/exames.csv")
resultados_exames
Teremos uma tabela com colunas representando o "id", o "diagnostico" e todos os exames realizados para identificar o tipo de câncer. Ao final da tabela, podemos verificar que existem nessa base de dados 569 linhas (ou seja, 569 diagnósticos) e 35 colunas, das quais 33 são exames. Queremos ter um valor como base, e para isso teremos que criar um modelo com todos os dados de exames e medí-lo. Tal valor base será usado como comparativo em nosso processo de redução de dimensionalidade.
Começaremos, então, segregando nossos dados em treino e teste. Usaremos a função train_test_split()
do SKlearn, que nos retornará os dados de treino, os dados de teste, as labels de treino e as labels de teste (no nosso caso, os diagnósticos). Importaremos essa função do módulo sklearn.model_selection
e criaremos quatro variáveis que armazenarão os retornos dela.
from sklearn.model_selection import train_test_split
treino_x, teste_x, treino_y, teste_y = train_test_split()
Passaremos como parâmetros de train_test_split()
os valores dos exames (valores_exames
) e os diagnósticos (diagnostico
). Essa função também recebe um valor de aleatoriedade, chamado SEED
, que precisa ser setado para conseguirmos reproduzir os mesmos testes futuramente. Para isso, importaremos a função random
do Numpy e criaremos um SEED
com valor aleatório, como 123143
. Em seguida, chamaremos random.seed()
pasando esse SEED
como parâmetro.
from sklearn.model_selection import train_test_split
from numpy import random
SEED = 123143
random.seed(SEED)
treino_x, teste_x, treino_y, teste_y = train_test_split(valores_exames, diagnostico)
A variável valores_exames
receberá toda a nossa base de dados, excluindo as colunas "id" e "diagnostico". Sendo assim, removeremos essas colunas com um drop()
, passando as colunas especificadas.
valores_exames = resultados_exames.drop(columns=["id", "diagnostico"])
Dessa forma, obteremos a variável valores_exames
. Ainda precisamos do diagnostico
, qe conseguiremos com resultados_exames.diagnostico
, ou seja, somente a coluna "diagnostico" do nosso conjunto de dados.
valores_exames = resultados_exames.drop(columns=["id", "diagnostico"])
diagnostico = resultados_exames.diagnostico
Teremos então, o seguinte código:
from sklearn.model_selection import train_test_split
from numpy import random
SEED = 123143
random.seed(SEED)
valores_exames = resultados_exames.drop(columns=["id", "diagnostico"])
diagnostico = resultados_exames.diagnostico
treino_x, teste_x, treino_y, teste_y = train_test_split(valores_exames, diagnostico)
Executando, separaremos os dados corretamente. Com treino_x.head()
, podemos analisar uma amostra dos dados de treino. Isso também pode ser feito com as outras variáveis que criamos.
O próximo passo será criarmos um modelo de classificação. Nesse curso, utilizaremos um modelo chamado "Random forest", que nada mais é do que um conjunto de árvores de decisão. É um algoritmo muito bom para ser utilizado em processos de classificação.
Importaremos o RandomForestClassifier
do módulo sklearn.ensemble
e atribuiremos a chamada de RandomForestClassifier()
a uma variável classificador
. Teremos que passar para o RandomForestClassifier()
um parâmetro n_estimators
, que define quantas árvores de decisão construiremos no modelo. Por padrão, na versão 0.20 do RFC, são construídas 10 árvores de decisão, número que mudará para 100 na versão 0.22. No nosso caso, usaremos o número 100
.
from sklearn.ensemble import RandomForestClassifier
classificador = RandomForestClassifier(n_estimators = 100)
Feito o setup do algoritmo, pediremos que o modelo se ajuste aos nossos dados de treinamento utilizando o fit()
:
from sklearn.ensemble import RandomForestClassifier
classificador = RandomForestClassifier(n_estimators = 100)
classificador.fit(treino_x, treino_y)
Para obtermos o resultado aplicado aos dados de teste, utilizaremos o método score()
. Esse método recebe os dados de teste (teste_x
e teste_y
) e nos retorna uma acurácia, que será utilizada para medirmos os resultados. Por fim, mostraremos o essa acurácia na tela com o print()
.
from sklearn.ensemble import RandomForestClassifier
classificador = RandomForestClassifier(n_estimators = 100)
classificador.fit(treino_x, treino_y)
print(classificador.score(teste_x, teste_y))
Executando o código dessa forma, teremos como retorno um erro:
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
Isso significa que, no nosso conjunto de dados, ou temos um Not a Number (ou seja, uma célula sem um número) ou temos um número muito grande para o tipo float32
. Se analisarmos os dados da nossa tabela, veremos que a coluna "exame_33", por exemplo, possui alguns dados vazios. E quantas outras colunas possuem dados vazios?
Teremos que, de alguma forma, ratear todos os valores vazios, para então decidirmos o que fazer com eles.
O curso Machine Learning: lidando com dados de muitas dimensões possui 143 minutos de vídeos, em um total de 38 atividades. Gostou? Conheça nossos outros cursos de Machine Learning em Data Science, ou leia nossos artigos de Data Science.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.