Algoritmos de Aprendizagem Semi-Supervisionada

Beginner

This tutorial is from open-source community. Access the source code

Introdução

Neste laboratório, exploraremos o conceito de aprendizagem semi-supervisionada, um tipo de aprendizagem de máquina em que parte dos dados de treino são rotulados e parte são não rotulados. Os algoritmos de aprendizagem semi-supervisionada podem aproveitar os dados não rotulados para melhorar o desempenho do modelo e generalizar melhor para novas amostras. Isto é particularmente útil quando temos uma pequena quantidade de dados rotulados, mas uma grande quantidade de dados não rotulados.

Neste laboratório, focaremos em dois algoritmos de aprendizagem semi-supervisionada: Auto-Treino e Propagação de Rótulos. Aprenderemos a implementar e utilizar estes algoritmos usando o scikit-learn, uma popular biblioteca de aprendizagem de máquina em Python.

Dicas da Máquina Virtual

Após o arranque da máquina virtual, clique no canto superior esquerdo para mudar para a aba Notebook para aceder ao Jupyter Notebook para a prática.

Por vezes, pode ser necessário esperar alguns segundos para o Jupyter Notebook terminar de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.

Se tiver problemas durante o aprendizado, não hesite em contactar o Labby. Forneça feedback após a sessão e resolveremos o problema rapidamente para si.

Instalando scikit-learn

Antes de começarmos, certifiquemo-nos de que o scikit-learn está instalado. Se não estiver, pode instalá-lo usando o seguinte comando:

pip install -U scikit-learn

Auto-Treino

Visão Geral do algoritmo de Auto-Treino

O algoritmo de Auto-Treino baseia-se no algoritmo de Yarowsky. Permite que um classificador supervisionado funcione como um classificador semi-supervisionado, aprendendo com dados não rotulados. O algoritmo funciona iterativamente treinando o classificador supervisionado nos dados rotulados e não rotulados e, em seguida, usando as previsões nos dados não rotulados para adicionar um subconjunto dessas amostras aos dados rotulados. O algoritmo continua iterando até que todas as amostras tenham rótulos ou nenhuma nova amostra seja selecionada numa iteração.

Utilizando o Auto-Treino no scikit-learn

No scikit-learn, o algoritmo de Auto-Treino é implementado na classe SelfTrainingClassifier. Para utilizar este algoritmo, é necessário fornecer um classificador supervisionado que implemente o método predict_proba. Aqui está um exemplo de como utilizar o algoritmo de Auto-Treino:

from sklearn.semi_supervised import SelfTrainingClassifier
from sklearn.linear_model import LogisticRegression

## Crie um classificador de regressão logística
classificador = LogisticRegression()

## Crie um classificador de auto-treino com o classificador de regressão logística como classificador base
classificador_auto_treino = SelfTrainingClassifier(classificador)

## Treine o classificador de auto-treino nos dados rotulados e não rotulados
classificador_auto_treino.fit(X_labeled, y_labeled, X_unlabeled)

## Preveja os rótulos para novas amostras
y_pred = classificador_auto_treino.predict(X_test)

No exemplo acima, X_labeled e y_labeled são os dados rotulados, X_unlabeled são os dados não rotulados e X_test são as novas amostras a serem previstas.

Propagação de Rótulos

Visão Geral do algoritmo de Propagação de Rótulos

A Propagação de Rótulos é um tipo de algoritmo semi-supervisionado de inferência de grafos. Constrói um grafo de similaridade sobre todos os itens no conjunto de dados de entrada e utiliza este grafo para propagar os rótulos dos dados rotulados para os dados não rotulados. A Propagação de Rótulos pode ser usada para tarefas de classificação e suporta métodos de kernel para projetar os dados em espaços dimensionais alternativos.

Utilizando a Propagação de Rótulos no scikit-learn

No scikit-learn, existem dois modelos de propagação de rótulos disponíveis: LabelPropagation e LabelSpreading. Ambos os modelos constroem um grafo de similaridade e propagam os rótulos. Aqui está um exemplo de como utilizar a Propagação de Rótulos:

from sklearn.semi_supervised import LabelPropagation

## Crie um modelo de propagação de rótulos
propagacao_rotulos = LabelPropagation()

## Treine o modelo de propagação de rótulos nos dados rotulados
propagacao_rotulos.fit(X_labeled, y_labeled)

## Preveja os rótulos para novas amostras
y_pred = propagacao_rotulos.predict(X_test)

No exemplo acima, X_labeled e y_labeled são os dados rotulados, e X_test são as novas amostras a serem previstas.

Resumo

O aprendizado semi-supervisionado é uma técnica poderosa que nos permite aproveitar dados não rotulados para melhorar o desempenho de nossos modelos. Neste laboratório, aprendemos sobre dois algoritmos de aprendizado semi-supervisionado: Auto-Treino e Propagação de Rótulos. Também aprendemos como implementar e usar esses algoritmos usando o scikit-learn. Ao incorporar dados não rotulados em nossos fluxos de trabalho de aprendizado de máquina, podemos utilizar melhor os dados disponíveis e alcançar previsões mais precisas.