Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como o Python sabe quais dados estão em quais clusters?

Olá! Fiquei com dúvida na forma em que os passos ocorreram. Por favor, observe a imagem abaixo: Na primeira linha, nós pegamos as variáveis e normalizamos elas (ok), depois chamamos o KMeans e associamos ele a uma variável chamada kmeans, que fará o processo de clusterização (até então, só passamos os parâmetros mas não executamos o cluster com nossos dados). Depois, criamos uma variável chamada y_pred que, de fato, faz o cluster dos nossos dados utilizando todas as variáveis que fornecemos. Então, tecnicamente, o y_pred que contém os clusters formados. Contudo, quando vamos criar as métricas de análise do cluster, chamamos labels = kmeans.labels_, mas não era y_pred que continha nosso cluster feito, com a indicação de qual dado foi para qual cluster? Em outros cursos, criavamos uma variável para fazer alguma predição, depois davamos .fit(database) nela e depois .labels_ nessa mesma variável. Por que dessa vez foi diferente? o kmeans contém o resultado do cluster mesmo este tendo sido associado a outra variável?

Obrigado

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Ela usou o fit_predict que treina o modelo e retornar já a predição do modelo para os proprios valores de treinamento.

Seria o equivalente a

kmeans.fit(values)
y_pred = kmeans.predict(values)

A kmeans é uma instancia da classe KMeans. Uma instancia de uma classe é o que chamos de objeto. Geralmente um objeto tem funções ( métodos) e variaveis (atributos) associados a ele. O objeto kmeans tem o atributo _labels onde ele guarda o resultado da clusterização do treinamento (fit).

Esse é o codigo do fit_predict lá do github do scikit-learn (https://github.com/scikit-learn/scikit-learn/blob/844b4be24/sklearn/cluster/_kmeans.py#L765 )

def fit_predict(self, X, y=None, sample_weight=None):
        """Compute cluster centers and predict cluster index for each sample.
        Convenience method; equivalent to calling fit(X) followed by
        predict(X).
        Parameters
        ----------
        X : {array-like, sparse matrix} of shape (n_samples, n_features)
            New data to transform.
        y : Ignored
            Not used, present here for API consistency by convention.
        sample_weight : array-like of shape (n_samples,), default=None
            The weights for each observation in X. If None, all observations
            are assigned equal weight.
        Returns
        -------
        labels : ndarray of shape (n_samples,)
            Index of the cluster each sample belongs to.
        """
        return self.fit(X, sample_weight=sample_weight).labels_

Da para ver pelo return que o metodo retorna o labels_. Então basicamente esse código

y_pred = kmeans.fit_predict(values)

é igual à:

means.fit(values)
y_pred = means.labels_

Não sei se deu para ajudar.