Introdução ao Aprendizado Não-supervisionado

Jadson Lucio
LICA
Published in
6 min readFeb 20, 2019

Introdução

Imagine que você trabalha em uma empresa que possui um site de aluguel de filmes online e seu chefe em um belo dia pede para você construir um sistema de indicação de filmes para os usuários, e um dos pré-requisitos que ele dá é que o sistema possa se adaptar bem aos diversos estilos de consumidores, que são muitos. Você tem a disposição todos os dados de filmes que o usuário já assistiu antes, como por exemplo, a quantidade de estrelas que ele deu , o número de vezes que ele foi alugado ou reprisado, lista de comentários e informações sobre o filme em si: duração, número de visualizações, gênero, etc.

A sua primeira ideia é categorizar manualmente grupos de usuários com base nos tipos de filmes que eles assistem e recomendar os que mais se adaptam a cada grupo. Mas você logo percebe que isso vai contra a exigência do seu chefe e que essa abordagem iria ser muito trabalhosa e difícil de se implementada, com o bônus de que qualquer mudança na estrutura inicial dos grupos criados exigiria uma reavaliação dos mesmos.

Após pensar muito você decide que a melhor estrategia é focar nos filmes mais recentes que o usuário assistiu, recomendando filmes com gêneros semelhantes a estes. Mas ao analisar alguns perfis de usuários você percebe que existem pessoas que tem uma variedade alta para o gênero dos filmes que ela aluga e que para esse tipo em especifico a sua abordagem não é boa.

Desesperado e sem mais ideias você decide procurar por soluções para o seu problema e encontra um artigo no medium falando sobre uma técnica conhecida como aprendizado não-supervisionado.

E o que é o aprendizado não supervisionado?

Na aprendizagem de maquina existe o conceito de aprendizado supervisionado, onde dados de entrada e saída de uma base de dados (dataset) são apresentadas a um algorítimo que vai ser treinado para gerar uma saída (previsão) em função da entrada. Essa abordagem funciona relativamente bem para problemas em que as saídas são conhecidas. Mas no mundo real as coisas nem sempre vão estar tão claras, vão existir problemas em que não se sabe exatamente, em termos práticos, quais as saídas para as entradas dadas.

Um exemplo desse tipo de problema esta na recomendação personalizada de conteúdo, em que um usuário recebe propaganda sobre algum produto com base no que ele já consumiu. Nesse caso devido a enorme quantidade de dados, é quase impossível mapear os usuários de acordo com as suas preferências e criar um sistema de recomendação para cada um deles, o que torna inviável o treinamento em um modelo de aprendizado supervisionado, e é nesses casos em que a aprendizagem não-supervisionada entra em jogo.

A aprendizagem não-supervisionada é uma forma de aprendizado de maquina em que o treinamento é realizado apenas com entradas e cabe ao algoritmo detectar padrões que relacionem os dados. Existem varias formas de se fazer isso, aqui abordaremos a principal dessas técnicas, a clusterização.

1. Clusterização

A clusterização é umas das técnicas de aprendizado não-supervisionado mais comuns, nela os objetos são separados em grupos (clusters), em que cada objeto é o mais semelhante possível com os do seu grupo e diferente com os objetos dos outros grupos. Um objeto é como uma instância de um banco de dados possuindo seus próprios atributos.

Para realizar essa separação a maioria dos algoritmos de clusterização se utiliza de uma função de semelhança, geralmente a distância euclidiana para valores numéricos, que dado dois objetos retorna um valor que representa o quanto esses objetos são semelhantes. A ideia com isso é iterar sobre cada um desses, par por par, calculando a semelhança e os agrupando de acordo, sendo a forma como esse agrupamento é feito a diferença entre cada algoritmo.

Devido a quantidade imensa de algoritmos de clusterização e suas variações, apenas o k-means vai ser abordado neste artigo, ele é um dos mais comuns e simples do gênero e por isso é perfeito para uma introdução.

1.1. K-means

Antes de realizar qualquer agrupamento , você deve responder a uma pergunta , quantos grupos o meu problema tem? Esse é um dos passos mais importantes do processo, pois uma quantidade de grupos menor do que o ideal pode trazer uma generalização exagerada e uma maior tem efeito exatamente oposto. Nesse ponto existe algoritmos que determinam automaticamente esse valor com base em alguns parâmetros, o que não ocorre com o k-means.

O k-means funciona através de um conceito de centroid, que é o ponto central de um cluster, calculados através da média das instâncias deste.

O algoritmo para o k-means funciona da seguinte maneira:

  1. Escolher um número de clusters k;
  2. Inicializar k centroids de acordo com algum método;
  3. Calcular a semelhança entre cada centroid e os objetos do problema;
  4. Criar grupos relacionando cada objeto com o seu centroid mais semelhante;
  5. Atualizar os centroids tirando a média das instâncias dos grupos criados;
  6. Repetir o processo a partir do passo dois até que não exista mudanças significativas dos elementos em cada grupo.
Funcionamento do k-means com k = 4.

A ideia por trás desse algorítimo é que os centroids vão se estabilizar nos pontos de maior agrupamento de objetos que são exatamente os locais em que os clusters são encontrados.

Você pode estar se perguntando, mas qual a utilidade disso tudo? Existem diversas aplicações para os grupos que são criados com a técnica de clusterização. Vamos utilizar um dataset com características de animais de um zoológico para demonstrar algumas dessas aplicações.

O objetivo aqui é criar grupos de animais baseado nas suas características. O primeiro passo é escolher o número de clusters para o problema, felizmente esse dataset já possui a classe dos animais (Mamífero, Pássaro, Réptil, Peixe, Anfíbio, Inseto, Invertebrado), ou seja, sete grupos de animais (k = 7).

Detalhes sobre a implementação não vão ser discutidos aqui devido ao caráter introdutório do artigo, mas o link do notebook com a implementação vai estar no fim do artigo.

Após a clusterização os seguintes centroids foram obtidos:

Tabela dos controids dos clusters.

Como os objetos não possuem rótulos, após o agrupamento com o k-means, dependendo do seu problema, pode ser necessário realizar uma analise dos grupos para rotulá-los de acordo. Uma dica para fazer isso é se concentrar nas instancias dos centroids, já que eles são a media dos objetos do seu grupo e certamente uma generalização destes.

Gráfico dos grupos após a rotulação

Essa generalização é a primeira vantagem da clusterização listada nesse artigo, pois através dela é possível ter uma boa ideia da configuração dos objetos, possibilitando a inferência de algumas informações, como por exemplo, dizer que o mamífero tem uma forte tendência de ter cabelo, ou o réptil de por ovos.

Outra vantagem é que através da semelhança entre centroids é possível saber qual grupo se assemelha mais com outro. Na tabela abaixo podemos ver que os peixes tem uma maior similaridade com os invertebrados do que com qualquer outra classe, da mesma forma que os insetos com os peixes.

Matriz de similaridade dos centroids dos animais.

Uma outra abordagem para a clusterização é a de classificador. Dado um novo objeto, com os rótulos dos grupos definidos previamente, é possível através de abordagens como o KNN(KNearest Neighbors) determinar quais grupos esse objeto possui maior afinidade. Como exemplo utilizamos os dados dos animais, na tabela abaixo, para determinar as suas classes de acordo com centroid mais próximo.

Para finalizar

Agora você já deve ter uma ideia de como resolver o problema da recomendação de filmes. Uma possível solução seria usar a clusterização nos usuários com base no que eles consomem, desta forma é possível fornecer conteúdo personalizado para vários usuários dentro dos grupos criados, e como eles possuem os mesmos gostos a probabilidade do conteúdo ser bem aceito pela maioria é alta. Outra possibilidade para complementar essa ideia é passar a recomendar filmes que muitas pessoas em um grupo estão assistindo, para outras do mesmo grupo que ainda não consumiram esse conteúdo.

Notebook utilizado : https://goo.gl/wcgX7S

Obrigado por ler.

Todo feedback será bem vindo.

Até o próximo.

--

--