Como criar um modelo de aprendizagem não supervisionada com DBSCAN

DBSCAN (Densidade-Baseado aglomeração espacial de aplicações com ruído) é um algoritmo de agrupamento popular usado como uma alternativa para k-médias em análise preditiva. Ele não requer que você insira o número de clusters a fim de executar. Mas, em troca, você tem que ajustar dois outros parâmetros.

A implementação scikit-learn fornece um padrão para os eps e parâmetros min_samples, mas você está geralmente esperado para sintonizar esses. O parâmetro EPS é a distância máxima entre dois pontos de dados a ser considerado na mesma vizinhança. O parâmetro min_samples é a quantidade mínima de pontos de dados numa área a ser considerada um cluster.

Uma vantagem que tem DBSCAN sobre K-means é que DBSCAN não está restrita a um número de conjunto de aglomerados durante a inicialização. O algoritmo irá determinar um número de agrupamentos com base na densidade de uma região.

Tenha em mente, no entanto, que o algoritmo depende das eps e parâmetros min_samples para descobrir o que a densidade de cada cluster deve ser. A idéia é que esses dois parâmetros são muito mais fáceis de escolher para alguns problemas de clustering.

Na prática, você deve testar com vários algoritmos de agrupamento.

Porque o algoritmo DBSCAN tem um conceito interno de ruído, é comumente usado para detectar valores atípicos nos dados - por exemplo, a atividade fraudulenta em cartões de crédito, e-commerce, ou créditos de seguros.

Como executar o conjunto de dados completo

Você vai precisar de carregar o conjunto de dados Iris em sua sessão de Python. Aqui está o procedimento:

  1. Abra uma nova sessão do shell interativo do Python.

    Use uma nova sessão Python para que a memória é clara e você tem uma ardósia limpa para trabalhar.

  2. Cole o seguinte código no alerta e observar a saída:

    >>> From sklearn.datasets importar load_iris >>> iris = load_iris ()

    Depois de executar essas duas declarações, você não deve ver as mensagens do intérprete. As íris variável deve conter todos os dados do arquivo iris.csv.

  3. Criar uma instância de DBSCAN. Digite o seguinte código para o intérprete:

    >>> From importação sklearn.cluster DBSCAN >>> dbscan = DBSCAN (random_state = 111)

    A primeira linha de código importa a biblioteca DBSCAN na sessão para você usar. A segunda linha cria uma instância de DBSCAN com valores padrão para eps e min_samples.

  4. Confira o que os parâmetros foram utilizados, digitando o seguinte código para o intérprete:

    >>> DbscanDBSCAN (eps = 0,5, = métricas 'euclidiana ", min_samples = 5, random_state = 111)
  5. Ajustar os dados da íris para o algoritmo de agrupamento DBSCAN ao escrever o seguinte código para o intérprete:

    >>> dbscan.fit (iris.data)
  6. Para verificar o resultado, digite o seguinte código para o intérprete:

    >>> Dbscan.labels_array ([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0. , 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., -1., 0., 0., 0., 0., 0., 0., 0., 0., 1, 1., 1, 1., 1, 1., 1, -1, 1, 1, -.... 1, 1., 1., 1. 1. 1. 1. 1., -1., 1., 1., 1., 1, 1., 1, 1., 1, 1., 1, 1 ., 1., 1., 1, 1., 1, 1., 1, -1., 1., 1, 1., 1., 1, -1., 1., 1 ., 1., 1, -1., 1., 1., 1., 1, 1., 1, -1., -1., 1., -1., -1., 1 ., 1., 1, 1., 1, 1., 1, -1., -1., 1., 1., 1., -1., 1., 1, 1., 1., 1., 1., 1., 1., -1., 1., 1, -1., -1., 1., 1, 1., 1, 1., 1. , 1., 1, 1., 1, 1., 1, 1., 1])

    Se você olhar bem de perto, você verá que DBSCAN produziu três grupos (-1, 0 e 1).

Como visualizar os aglomerados

Vamos pegar um gráfico de dispersão da saída DBSCAN. Digite o seguinte código:

>>> From sklearn.decomposition importação PCA >>> pca = PCA (n_components = 2) .fit (iris.data) >>> pca_2d = pca.transform (iris.data) >>> for i no intervalo (0, pca_2d.shape [0]): >>> se dbscan.labels_ [i] == 0: >>> c1 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c «r» = , marcador = '+') >>> elif dbscan.labels_ [i] == 1: >>> c2 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = 'g', marcador = 'o') >>> elif dbscan.labels_ [i] == -1: >>> c3 = pl.scatter (pca_2d [i, 0], pca_2d [i, 1], c = 'b', marcador = '*') >>> pl.legend ([c1, c2, c3], [ 'Cluster 1', 'Cluster 2', 'Noise']) >>> pl.title ( 'DBSCAN encontra 2 clusters e ruído) >>> pl.show ()

Aqui está o gráfico de dispersão que é a saída desse código:

image0.jpg

Você pode ver que DBSCAN produziu três grupos. Note, no entanto, que a figura se assemelha a uma solução de dois cluster: Mostra apenas 17 casos de rótulo - 1. Isso é porque é um dois-cluster solução- o terceiro grupo (-1) é ruído (outliers). Você pode aumentar o parâmetro de distância (EPS) da configuração padrão de 0,5 a 0,9, e ela se tornará uma solução de dois cluster com nenhum ruído.

O parâmetro de distância é a distância máxima que um observação é mais próxima ao cluster. Quanto maior o valor do parâmetro de distância, menos aglomerados são encontrados porque aglomerados eventualmente fundir em outros clusters. Os rótulos -1 estão espalhados Cluster 1 e Cluster 2 em alguns locais:

  • Perto das bordas do Cluster 2 (classes Versicolor e virginica)

  • Perto do centro de Cluster 2 (classes Versicolor e virginica)

    O gráfico mostra apenas uma representação bidimensional dos dados. A distância pode também ser medido em dimensões superiores.

  • Um exemplo acima Cluster 1 (a classe setosa)

Como avaliar o modelo

Neste exemplo, DBSCAN não produziu o resultado ideal com os parâmetros padrão para o conjunto de dados Iris. Seu desempenho foi bastante consistente com outros algoritmos de agrupamento que acabam com uma solução de dois cluster.

O conjunto de dados Iris não tirar proveito dos recursos mais poderosos da DBSCAN - detecção de ruído ea capacidade de descobrir agrupamentos de formas arbitrárias. No entanto, DBSCAN é um algoritmo de agrupamento muito popular e investigação ainda está sendo feito na melhoria da sua performance.

menu