Como visualizar os Clusters em um-Means K Aprendizagem não supervisionada Modelo
O conjunto de dados Iris não é fácil para o gráfico de análise preditiva em sua forma original. Por conseguinte, tem de reduzir o número de dimensões através da aplicação de um algoritmo de redução de dimensionalidade que opera em todos os quatro números e gera dois novos números (que representam os quatro números originais) que você pode usar para fazer a trama.
sepal Comprimento | sepal Largura | Comprimento pétala | pétala Largura | Classe Alvo / etiqueta |
---|---|---|---|---|
5.1 | 3,5 | 1.4 | 0,2 | Setosa (0) |
7 | 3.2 | 4.7 | 1.4 | Versicolor (1) |
6.3 | 3.3 | 6 | 2.5 | Virginica (2) |
O código a seguir irá fazer a redução dimensão:
>>> From sklearn.decomposition PCA importação >>> from sklearn.datasets importar load_iris >>> iris = load_iris () >>> pca = PCA (n_components = 2) .fit (iris.data) >>> pca_2d = pca .transform (iris.data)
Linhas 2 e 3 de carga do conjunto de dados Iris.
Depois de executar o código, você pode digitar o pca_2d variável para o intérprete e vai vetores de saída (pensar em um ordem como um contêiner de itens em uma lista) com dois itens em vez de quatro. Agora que você tem o conjunto de recursos reduzida, você pode traçar os resultados com o seguinte código:
>>> Pylab importação como pl >>> for i no intervalo (0, pca_2d.shape [0]): >>> se iris.target [i] == 0: >>> c1 = pl.scatter (pca_2d [ i, 0], pca_2d [i, 1], c = 'r', marcador = '+') >>> elif iris.target [i] == 1: >>> c2 = pl.scatter (pca_2d [i , 0], pca_2d [i, 1], c = 'g', marcador = 'o') >>> elif iris.target [i] == 2: >>> c3 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = 'b', marcador = '*') >>> pl.legend ([C1, C2, C3], [ 'setosa', 'versicolor', 'Virginica'] ) >>> pl.title ( "conjunto de dados Iris com 3 clusters e knownoutcomes ') >>> pl.show ()
A saída desse código é uma trama que deve ser semelhante ao gráfico abaixo. Este é um gráfico que representa como os resultados conhecidos do conjunto de dados Iris deve ser parecida. É o que você gostaria que o agrupamento K-means para conseguir.
A imagem mostra um gráfico de dispersão, que é um gráfico de pontos plotados representando uma observação em um gráfico, de todas as 150 observações. Como indicado nas parcelas gráfico e legenda:
Existem 50 pontos positivos que representam o setosa classe.
Existem 50 círculos que representam o classe versicolor.
Há 50 estrelas que representam o classe virginica.
O gráfico abaixo mostra uma representação visual dos dados que você está pedindo K-means para agrupar: a gráfico de dispersão com 150 pontos de dados que não foram marcadas (por conseguinte, todos os pontos de dados são a mesma cor e forma). O K-means não sabe qualquer alvo outcomes- os dados reais que estamos executando através do algoritmo não teve a sua dimensionalidade reduzida ainda.
A seguinte linha de código cria este gráfico de dispersão, usando os valores de X e Y de pca_2d e colorir todos os pontos de dados preto (c = 'black' define a cor para preto).
>>> Pl.scatter (pca_2d [:, 0], pca_2d [:, 1], c = 'black') >>> pl.show ()
Se você tentar ajuste dos dados bidimensionais, que foi reduzido em PCA, o K-means vai deixar de agrupar as classes virginica e Versicolor corretamente. Usando PCA pré-processar os dados irá destruir muita informação que K-significa necessidades.
Depois de K-means equipou os dados Iris, você pode fazer um gráfico de dispersão dos aglomerados que o algoritmo produced- basta executar o seguinte código:
>>> For i no intervalo (0, pca_2d.shape [0]): >>> se kmeans.labels_ [i] == 1: >>> c1 = pl.scatter (pca_2d [i, 0], pca_2d [ i, 1], c = 'r', marcador = '+') >>> elif kmeans.labels_ [i] == 0: >>> c2 = pl.scatter (pca_2d [i, 0], pca_2d [i , 1], c = 'g', marcador = 'o') >>> elif kmeans.labels_ [i] == 2: >>> c3 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = 'b', marcador = '*') >>> pl.legend ([C1, C2, C3], [ 'Cluster 1', '0 cluster "," Cluster 2']) >>> pl.title ( "K-significa agrupamentos o conjunto de dados Iris em 3clusters ') >>> pl.show ()
Lembre-se que K-means marcado as primeiras 50 observações com o rótulo de 1, o segundo 50 com rótulo de 0, e os últimos 50 com o rótulo de 2. No código apenas dado, as linhas com o E se, elif, e lenda declarações (linhas 2, 5, 8, 11) reflete esses rótulos. Essa alteração foi feita para tornar mais fácil para comparar com os resultados reais.
A saída do gráfico de dispersão é mostrado aqui:
Compare os K-means clustering saída para o gráfico de dispersão original - que fornece etiquetas porque os resultados são conhecidos. Você pode ver que as duas parcelas semelhantes entre si. O algoritmo K-means fez um bom trabalho com o clustering. Embora as previsões não são perfeitos, eles vêm perto. Isso é uma vitória para o algoritmo.
Na aprendizagem não supervisionada, você raramente obter uma saída que é 100 por cento preciso, porque os dados do mundo real raramente é tão simples. Você não vai saber quantos grupos de escolher (ou qualquer parâmetro de inicialização para outros algoritmos de agrupamento). Você terá que lidar com valores extremos (pontos de dados que não parecem consistentes com outros) e conjuntos de dados complexos que são densos e não linearmente separáveis.
Você só pode chegar a este ponto se você sabe quantos agrupamentos o conjunto de dados tem. Você não precisa se preocupar com o que dispõe a usar ou reduzir a dimensionalidade de um conjunto de dados que tem tão poucos recursos (neste caso, quatro). Este exemplo apenas reduziu as dimensões por razões de visualizar os dados num gráfico. Ele não se encaixava no modelo com o conjunto de dados reduziu-dimensionalidade.
Aqui está a lista completa do código que cria os dois gráficos de dispersão e códigos de cores Os pontos de dados:
>>> From importação sklearn.decomposition PCA >>> from kmeans importação sklearn.cluster >>> from sklearn.datasets importar load_iris >>> Pylab importação como pl >>> iris = load_iris () >>> pca = PCA (n_components = 2) .fit (iris.data) >>> pca_2d = pca.transform (iris.data) >>> pl.figure ( 'Referência Plot') >>> pl.scatter (pca_2d [:, 0], pca_2d [:, 1], c = iris.target) >>> kmeans = kmeans (n_clusters = 3, random_state = 111) >>> kmeans.fit (iris.data) >>> pl.figure ( 'K-means com 3 clusters ') >>> pl.scatter (pca_2d [:, 0], pca_2d [:, 1], c = kmeans.labels _) >>> pl.show ()