1
resposta

Errata da aula 1.6 do curso de aprendizado não-supervisionado: usar o k-modes

No curso de aprendizado não-supervisionado, enquanto o instrutor pré-processa os dados do dataframe antes de começar a explorar o KMeans, foi justificado no vídeo a necessidade de escalar os dados das colunas de cada gênero de filme, que podem ter valor 0 ou 1. Entretanto, há uma ERRATA informando que "quando as features apresentam escalas diferentes é uma boa pratica fazer o escalonamento para que os algoritmos não sejam afetados pela diferença de escala entre as features".

A errata sugere transformar os gêneros em dados categóricos e aplicar variações do k-means conhecida como k-modes (e indica um paper). Alguém conseguiu fazer usando o k-modes? O paper indicado tem um formalismo matemático muito complexo. A Alura poderia ter facilitado indicando um link mais prático.

1 resposta

Olá Alex.

Já que nossos dados são de variáveis categóricos (para entender mais sobre variáveis categóricas recomendo a aula 3 do curso Machine Learning: Classificação por trás dos panos), na errata é explicado que não é necessário fazer o escalonamento dos nossos dados.

Pensando nisso, fiz essa modificação no código da aula, dessa maneira não precisamos modificar o código inteiro.

# from sklearn.preprocessing import StandardScaler

# scaler = StandardScaler()
# generos_escalados = scaler.fit_transform(generos)
generos_escalados = generos
generos_escalados

Mas a ideia é que podemos usar a variável generos diretamente nos treinamentos:

modelo = KMeans(n_clusters=3)

modelo.fit(generos)

print(f'Grupos {modelo.labels_}')

O segundo ponto, sobre a recomendação de usar o KModes, encontrei esse pacote que podemos utilizar e temos esse exemplo de uso.

Utilizando o exemplo, apliquei nos dados que temos nesse curso.

from kmodes.kmodes import KModes
km_cao = KModes(n_clusters=11, init = "Cao", n_init = 1, verbose=1)
km_cao.fit(generos)

E depois vi que filmes foram agrupados juntos, do mesmo jeito ensinado no curso.

grupo = 2

filtro = km_cao.labels_ == grupo

dados_dos_filmes[filtro].sample(10)

Espero ter ajudado a esclarecer e obrigado pela sugestão, vamos incluir junto com a errata os exemplos de como aplicar e instalar esse algorítimo sugerido.

Bons Estudos.