Atualizado em 24 de julho de 2020
A densidade de probabilidade é a relação entre as observações e seus probabilidade.
Alguns resultados de uma variável aleatória terão baixa densidade de probabilidade e outros resultados terão uma alta densidade de probabilidade.
A forma geral da densidade de probabilidade é chamada de probabilidade distribuição, e o cálculo de probabilidades para resultados específicos de uma variável aleatória é executado por uma função de densidade de probabilidade, ou PDF para breve.
É útil conhecer a função de densidade de probabilidade para uma amostra de dados em ordem para saber se uma dada observação é improvável, ou tão improvável que seja considerada um outlier ou anomalia e se deve ser removida. Também é útil para escolher métodos de aprendizagem apropriados que requerem dados de entrada para ter uma distribuição de probabilidade específica.
É improvável que a função de densidade de probabilidade para uma amostra aleatória de dados seja conhecida. Como tal, a densidade de probabilidade deve ser aproximada usando um processo conhecido como estimativa de densidade de probabilidade.
Neste tutorial, você descobrirá uma introdução suave à estimativa de densidade de probabilidade.
Depois de concluir isso tutorial, você saberá:
- Os gráficos de histograma fornecem uma maneira rápida e confiável de visualizar a densidade de probabilidade de uma amostra de dados.
- A estimativa de densidade de probabilidade paramétrica envolve a seleção de uma distribuição comum e estimar os parâmetros para a função de densidade de uma amostra de dados.
- A estimativa de densidade de probabilidade não paramétrica envolve o uso de uma técnica para ajustar um modelo à distribuição arbitrária dos dados, como a estimativa de densidade de kernel.
Comece seu projeto com meu novo livro Probability for Machine Learning, incluindo tutoriais passo a passo e os arquivos de código-fonte Python para todos os exemplos.
Vamos começar.
Uma introdução gentil n para estimativa de densidade de probabilidade
Foto de Alistair Paterson, alguns direitos reservados.
Visão geral do tutorial
Este tutorial é dividido em quatro partes; eles são:
- Densidade de probabilidade
- Resuma a densidade com um histograma
- Estimativa de densidade paramétrica
- Estimativa de densidade não paramétrica
Densidade de probabilidade
Uma variável aleatória x tem uma distribuição de probabilidade p (x).
A relação entre os resultados de uma variável aleatória e sua probabilidade é referida como densidade de probabilidade, ou simplesmente “densidade”.
Se uma variável aleatória for contínua, a probabilidade pode ser calculada por meio da função de densidade de probabilidade ou PDF para abreviar. A forma da densidade de probabilidade função em todo o domínio para uma variável aleatória é referida como a distribuição de probabilidade e as distribuições de probabilidade comuns têm nomes, como uniforme, normal, exponencial e assim por diante.
Dada uma variável aleatória, estamos interessados em a densidade de suas probabilidades.
Por exemplo, dada uma amostra aleatória de uma variável, podemos querer saber coisas como a forma da distribuição de probabilidade bution, o valor mais provável, a dispersão de valores e outras propriedades.
Saber a distribuição de probabilidade de uma variável aleatória pode ajudar a calcular momentos da distribuição, como a média e a variância, mas também pode ser útil para outras considerações mais gerais, como determinar se uma observação é improvável ou muito improvável e pode ser um outlier ou anomalia.
O problema é que podemos não saber a distribuição de probabilidade para uma variável aleatória. Raramente sabemos a distribuição porque não temos acesso a todos os resultados possíveis para uma variável aleatória. Na verdade, tudo a que temos acesso é uma amostra de observações. Como tal, devemos selecionar uma distribuição de probabilidade.
Este problema é conhecido como estimativa de densidade de probabilidade, ou simplesmente “estimativa de densidade”, pois estamos usando as observações em uma amostra aleatória para estimar a densidade geral de probabilidades além de apenas a amostra de dados que temos disponível.
Existem algumas etapas no processo de estimativa de densidade para uma variável aleatória.
A primeira etapa é revisar a densidade de observações na amostra aleatória com um histograma simples. A partir do histograma, podemos ser capazes de identificar uma distribuição de probabilidade comum e bem compreendida que pode ser usada, como uma distribuição normal. Caso contrário, podemos ter que ajustar um modelo para estimar a distribuição.
Nas seções a seguir, examinaremos mais detalhadamente cada uma dessas etapas.
Focaremos nos dados univariados, por exemplo, uma variável aleatória, neste post para simplificar. Embora as etapas sejam aplicáveis a dados multivariados, elas podem se tornar mais desafiadoras ng conforme o número de variáveis aumenta.
Deseja aprender a probabilidade de aprendizado de máquina
Faça meu curso intensivo gratuito de 7 dias por e-mail agora (com código de amostra).
Clique para se inscrever e também obter uma versão gratuita do e-book em PDF do curso.
Baixe o seu mini-curso GRATUITO
Resuma a densidade com um histograma
A primeira etapa na estimativa da densidade é criar um histograma das observações na amostra aleatória.
Um histograma é um gráfico que envolve primeiro o agrupamento das observações em caixas e a contagem do número de eventos que caem em cada caixa. As contagens, ou frequências de observações, em cada compartimento são então plotadas como um gráfico de barras com os compartimentos no eixo xe a frequência no eixo y.
A escolha do número de compartimentos é importante porque controla a aspereza da distribuição (número de barras) e, por sua vez, quão bem a densidade das observações é traçada. É uma boa ideia experimentar diferentes tamanhos de bin para uma determinada amostra de dados para obter várias perspectivas ou visualizações nos mesmos dados.
Um histograma pode ser criado usando a biblioteca Matplotlib e a função hist (). Os dados são fornecidos como o primeiro argumento, e o número de caixas é especificado por meio do argumento “caixas” como um inteiro (por exemplo, 10) ou como uma sequência dos limites de cada caixa (por exemplo).
O snippet abaixo cria um histograma com 10 bins para uma amostra de dados.
1
2
3
4
|
…
# traça um histograma da amostra
pyplot.hist (amostra, bins = 10)
pyplot.show ()
|
Podemos criar uma amostra aleatória retirada de uma distribuição normal e p diga que não sabemos a distribuição e, em seguida, crie um histograma dos dados. A função normal () NumPy vai conseguir isso e vamos gerar 1.000 amostras com uma média de 0 e um desvio padrão de 1, por exemplo, um gaussiano padrão.
O exemplo completo está listado abaixo.
1
2
3
4
5
6
7
8
|
# exemplo de traçar um histograma de uma amostra aleatória
from matplotlib import pyplot
from numpy.random import normal
# gerar uma amostra
sample = normal (size = 1000)
# plotar um histograma da amostra
pyplot.hist (sample, bins = 10)
pyplot.show ()
|
Executando o exemplo extrai uma amostra de observações aleatórias e cria o histograma com 10 caixas. Podemos ver claramente a forma da distribuição normal.
Observe que seus resultados serão diferentes devido à natureza aleatória da amostra de dados. Tente executar o exemplo algumas vezes.
Gráfico de histograma com 10 caixas de uma amostra de dados aleatórios
Executar o exemplo com bins definido como 3 torna a distribuição normal menos óbvia.
Gráfico de histograma com 3 caixas de uma amostra de dados aleatória
A revisão de um histograma de uma amostra de dados com um intervalo de diferentes números de caixas ajudará a identificar se a densidade parece como uma distribuição de probabilidade comum ou não.
Na maioria dos casos, você verá uma distribuição unimodal, como a forma familiar de sino do normal, a forma plana do uniforme ou a forma descendente ou ascendente de uma distribuição exponencial ou de Pareto.
Você também pode ver distribuições complexas, como vários picos que não desaparecem com diferentes números de caixas, conhecido como uma distribuição bimodal, ou vários picos, conhecido como um distribuição multimodal. Você também pode ver um grande pico na densidade para um determinado valor ou um pequeno intervalo de valores indicando valores discrepantes, muitas vezes ocorrendo na cauda de uma distribuição longe do resto da densidade.
Estimativa de densidade paramétrica
A forma de um histograma da maioria das amostras aleatórias corresponderá a uma distribuição de probabilidade bem conhecida.
As distribuições comuns são comuns porque ocorrem repetidamente em domínios diferentes e às vezes inesperados.
Familiarize-se com as distribuições de probabilidade comuns, pois isso o ajudará a identificar uma determinada distribuição de um histograma.
Uma vez identificado, você pode tentar estimar a densidade da variável aleatória com uma distribuição de probabilidade escolhida. Isso pode ser obtido estimando os parâmetros da distribuição de uma amostra aleatória de dados.
Por exemplo, a distribuição normal tem dois parâmetros: a média e o desvio padrão. Dados esses dois parâmetros, agora conhecemos a função de distribuição de probabilidade. Esses parâmetros podem ser estimados a partir de dados calculando a média e o desvio padrão da amostra.
Chamamos esse processo de estimativa de densidade paramétrica.
A razão é que estamos usando funções predefinidas para resumir a relação entre as observações e sua probabilidade que pode ser controlada ou configurada com parâmetros, portanto “paramétricos”.
Uma vez que tenhamos estimado a densidade, podemos verificar se é um bom ajuste. Isso pode ser feito de várias maneiras, como:
- Traçando a função de densidade e comparando a forma com o histograma.
- Amostrando a função de densidade e comparando a amostra gerada com a amostra real.
- Usando um teste estatístico para confirmar se os dados se ajustam à distribuição.
Podemos demonstrar isso com um exemplo.
Nós pode gerar uma amostra aleatória de 1.000 observações de uma distribuição normal com uma média de 50 e um desvio padrão de 5.
1
2
3
|
…
# gere uma amostra
amostra = normal (loc = 50, escala = 5, tamanho = 1000)
|
Podemos então fingir que não sabemos a distribuição de probabilidade e talvez olhar para um histograma e adivinhar que é normal. Supondo que seja normal, podemos calcular os parâmetros da distribuição, especificamente a média e o desvio padrão.
Não esperaríamos que a média e o desvio padrão fossem 50 e 5, exatamente, dado o pequeno tamanho da amostra e ruído no processo de amostragem.
Em seguida, ajuste a distribuição com esses parâmetros, a chamada estimativa de densidade paramétrica de nossa amostra de dados.
Neste caso, podemos usar a norma ( ) Função SciPy.
1
2
3
|
…
# define a distribuição
dist = norm (sample_mean, sam ple_std)
|
Podemos então amostrar as probabilidades desta distribuição para uma faixa de valores em nosso domínio, neste caso entre 30 e 70.
Finalmente, podemos traçar um histograma da amostra de dados e sobrepor um gráfico de linha das probabilidades calculadas para a faixa de valores de o PDF.
É importante ressaltar que podemos converter as contagens ou frequências em cada compartimento do histograma em uma probabilidade normalizada para garantir que o eixo y do histograma corresponda ao eixo y do gráfico de linha. Isso pode ser conseguido definindo o argumento “densidade” como “True” na chamada para hist ().
1
2
3
4
|
…
# plota o histograma e o pdf
pyplot.hist (amostra, bins = 10, densidade = Verdadeiro)
pyplot.plot (valores, probabilidades)
|
Amarrando esses snippets, o exemplo completo de estimativa de densidade paramétrica está listado abaixo.
Executar o exemplo primeiro gera a amostra de dados , então estima os parâmetros da probabilidade normal distribuição.
Observe que seus resultados serão diferentes devido à natureza aleatória da amostra de dados. Tente executar o exemplo algumas vezes.
Nesse caso, podemos ver que a média e o desvio padrão têm algum ruído e são ligeiramente diferentes dos valores esperados de 50 e 5, respectivamente. O ruído é mínimo e espera-se que a distribuição ainda seja um bom ajuste.
1
|
Média = 49,852 , Desvio padrão = 5.023
|
Em seguida, o PDF está adequado usando os parâmetros estimados e o histograma dos dados com 10 bins é comparado com as probabilidades de uma gama de valores amostrados do PDF.
Podemos ver que o PDF é uma boa correspondência para os nossos dados.
Amostra de dados de histograma com sobreposição de função de densidade de probabilidade para a distribuição normal
É possível que os dados correspondam a uma distribuição de probabilidade comum, mas requer uma transformação antes da estimativa de densidade paramétrica.
Por exemplo, você pode ter valores discrepantes que estão longe de a média ou centro de massa da distribuição. Isso pode ter o efeito de fornecer estimativas incorretas dos parâmetros de distribuição e, por sua vez, causar um ajuste inadequado dos dados. Esses outliers devem ser removidos antes de estimar os parâmetros de distribuição.
Outro exemplo é que os dados podem ter uma inclinação ou ser deslocados para a esquerda ou direita. Nesse caso, você pode precisar transformar os dados antes de estimar os parâmetros, como obter o log ou a raiz quadrada ou, de forma mais geral, usar uma transformação de potência como a transformação Box-Cox.
Esses tipos de modificações nos dados podem não ser óbvias e a estimativa de densidade paramétrica eficaz pode exigir um processo iterativo de:
- Loop até que o ajuste da distribuição aos dados seja suficiente:
- 1. Estimativa de parâmetros de distribuição
- 2. Revendo o PDF resultante em comparação com os dados
- 3. Transformar os dados para melhor se ajustar à distribuição
Estimativa de densidade não paramétrica
Em alguns casos, uma amostra de dados pode não se parecer com uma probabilidade comum distribuição ou não pode ser facilmente ajustado para se ajustar à distribuição.
Este é frequentemente o caso quando os dados têm dois picos (distribuição bimodal) ou muitos picos (distribuição multimodal).
Neste Nesse caso, a estimativa de densidade paramétrica não é viável e podem ser usados métodos alternativos que não usam uma distribuição comum. Em vez disso, um algoritmo é usado para aproximar a distribuição de probabilidade dos dados sem uma distribuição predefinida, referido como um método não paramétrico.
As distribuições ainda terão parâmetros, mas não são diretamente controláveis da mesma maneira como distribuições de probabilidade simples. Por exemplo, um método não paramétrico pode estimar a densidade usando todas as observações em uma amostra aleatória, na verdade fazendo todas as observações nos “parâmetros” da amostra.
Talvez a abordagem não paramétrica mais comum para estimar a função de densidade de probabilidade de uma variável aleatória contínua é chamada de suavização de kernel ou estimativa de densidade de kernel, abreviadamente KDE.
- Estimativa de densidade de kernel: método não paramétrico para usar um conjunto de dados para estimar probabilidades para novos pontos.
Neste caso, um kernel é uma função matemática que retorna uma probabilidade para um determinado valor de uma variável aleatória. O kernel efetivamente suaviza ou interpola as probabilidades em toda a gama de resultados para uma variável aleatória de forma que a soma de probabilidades é igual a um, um requisito de probabilidades bem comportadas.
A função kernel pondera a contribuição das observações de uma amostra de dados com base em sua relação ou distância para uma determinada amostra de consulta para a qual t A probabilidade é solicitada.
Um parâmetro, chamado de parâmetro de suavização ou largura de banda, controla o escopo, ou janela de observações, da amostra de dados que contribui para estimar a probabilidade de uma determinada amostra. Como tal, a estimativa de densidade do kernel é às vezes referida como uma janela de Parzen-Rosenblatt, ou simplesmente uma janela de Parzen, após os desenvolvedores do método.
- Parâmetro de suavização (largura de banda): Parâmetro que controla o número de amostras ou janela de amostras usadas para estimar a probabilidade de um novo ponto.
Uma janela grande pode resultar em uma densidade grosseira com poucos detalhes, enquanto uma janela pequena pode ter muitos detalhes e não ser suave ou genérico o suficiente para cobrir corretamente exemplos novos ou não vistos.A contribuição de amostras dentro da janela pode ser moldada usando diferentes funções, às vezes referidas como funções de base, por exemplo, uniforme normal, etc., com diferentes efeitos sobre a suavidade da função de densidade resultante.
- Função de base (kernel): A função escolhida usada para controlar a contribuição de amostras no conjunto de dados para estimar o probabilidade de um novo ponto.
Como tal, pode ser útil experimentar diferentes tamanhos de janela e diferentes funções de contribuição e avaliar os resultados em relação aos histogramas dos dados.
Podemos demonstrar isso com um exemplo.
Primeiro, podemos construir uma distribuição bimodal combinando amostras de duas distribuições normais diferentes. Especificamente, 300 exemplos com uma média de 20 e um desvio padrão de 5 (o pico menor) e 700 exemplos com uma média de 40 e um desvio padrão de 5 (o pico maior). As médias foram escolhidas juntas para garantir que as distribuições se sobreponham na amostra combinada.
O exemplo completo de criação desta amostra com uma distribuição de probabilidade bimodal e plotagem do histograma está listado abaixo.
Executar o exemplo cria a amostra de dados e plota o histograma.
Observe que seus resultados serão diferentes devido à natureza aleatória da amostra de dados. Tente executar o exemplo algumas vezes.
Temos menos amostras com uma média de 20 do que amostras com uma média de 40, o que podemos ver refletido no histograma com uma densidade maior de amostras em torno de 40 do que cerca 20.
Dados com essa distribuição não se encaixam bem em uma distribuição de probabilidade comum, por design. É um bom caso para usar um método não paramétrico de estimativa de densidade de kernel.
Gráfico de histograma da amostra de dados Com uma distribuição de probabilidade bimodal
A biblioteca de aprendizado de máquina scikit-learn fornece a classe KernelDensity que implementa a estimativa de densidade do kernel.
Primeiro, a classe é construída com a largura de banda desejada (tamanho da janela) e argumentos do kernel (função de base). É uma boa ideia testar diferentes configurações em seus dados. Nesse caso, tentaremos uma largura de banda de 2 e um kernel Gaussiano.
A classe é então ajustada em uma amostra de dados por meio da função fit (). A função espera que os dados tenham uma forma 2D com a forma, portanto, podemos remodelar nossa amostra de dados para ter 1.000 linhas e 1 coluna.
1
2
3
4
5
|
…
# fit densidade
model = KernelDensity (bandwidth = 2, kernel = “gaussian”)
sample = sample.reshape ((len (sample), 1))
model.fit (amostra)
|
Podemos então avaliar o quão bem a estimativa de densidade corresponde aos nossos dados, calculando as probabilidades para um intervalo de obs ervações e comparando a forma com o histograma, assim como fizemos para o caso paramétrico na seção anterior.
A função score_samples () em KernelDensity irá calcular a probabilidade de log para uma matriz de amostras. Podemos criar um intervalo de amostras de 1 a 60, sobre o intervalo de nosso domínio, calcular as probabilidades de log e, em seguida, inverter a operação de log calculando o expoente ou exp () para retornar os valores para o intervalo de 0-1 para probabilidades normais .
Finalmente, podemos criar um histograma com frequências normalizadas e um gráfico de linha de sobreposição de valores para probabilidades estimadas.
1
2
3
4
5
|
…
# plotar o histograma e o pdf
pyplot.hist (amostra, bins = 50, densidade = True)
pyplot.plot (valores, probabilidades)
pyplot.show ()
|
Associando isso, o exemplo completo de estimativa de densidade de kernel para uma amostra de dados bimodal está listado abaixo.
Executar o exemplo cria a distribuição de dados, ajusta-se ao modelo de estimativa de densidade de kernel e, em seguida, plota o histograma de a amostra de dados e o PDF do modelo KDE.
Observe que seus resultados serão diferentes devido à natureza aleatória da amostra de dados. Tente executar o exemplo algumas vezes.
Nesse caso, podemos ver que o PDF é um bom ajuste para o histograma. Não é muito suave e poderia ser ainda mais acentuado definindo o argumento “largura de banda” para 3 amostras ou mais. Experimente diferentes valores de largura de banda e a função do kernel.
Histograma e gráfico de função de densidade de probabilidade estimado via estimativa de densidade de kernel para uma amostra de dados bimodal
A classe KernelDensity é poderosa e suporta a estimativa de PDF para dados multidimensionais.
Leitura adicional
Esta seção fornece mais recursos sobre o tópico se você deseja se aprofundar.
Livros
- Reconhecimento de padrões e aprendizado de máquina, 2006.
- Aprendizado de máquina: uma perspectiva probabilística, 2012.
- Os elementos do aprendizado estatístico: mineração de dados, inferência e Prediction, 2009.
API
- API scipy.stats.gaussian_kde.
- Métodos não paramétricos não paramétricos, API de Statsmodels.
- Kernel Density Estimation Statsmodels Exa mple.
- Estimativa de densidade, API Scikit-Learn.
Artigos
- Estimativa de densidade, Wikipedia.
- Histograma, Wikipedia.
- Estimativa de densidade de kernel, Wikipedia.
- Estimativa de densidade de kernel multivariada, Wikipedia.
- Estimativa de densidade de kernel por meio do método de janela de Parzen-Rosenblatt, 2014.
- Em profundidade: estimativa de densidade do kernel.
Resumo
Neste tutorial, você descobriu uma introdução suave à estimativa de densidade de probabilidade.
Especificamente, você aprendeu:
- Os gráficos de histograma fornecem uma maneira rápida e confiável de visualizar a densidade de probabilidade de uma amostra de dados.
- Densidade de probabilidade paramétrica a estimativa envolve a seleção de uma distribuição comum e a estimativa dos parâmetros para a função de densidade a partir de uma amostra de dados.
- A estimativa de densidade de probabilidade não paramétrica envolve o uso de uma técnica para ajustar um modelo à distribuição arbitrária dos dados, como estimativas de densidade de kernel on.
Você tem alguma dúvida?
Faça suas perguntas nos comentários abaixo e farei o possível para responder.
Obtenha um controle sobre a probabilidade de aprendizado de máquina!
Desenvolva sua compreensão de probabilidade
… com apenas algumas linhas de código python
Descubra como em meu novo Ebook:
Probability for Machine Learning
Ele fornece auto-estudo tutoriais e projetos ponta a ponta sobre:
Teorema de Bayes, Otimização Bayesiana, Distribuições, Máxima Verossimilhança, Entropia Cruzada, Calibrando Modelos
e muito mais …
Finalmente Aproveite a Incerteza em Seus projetos
Ignore os acadêmicos. Apenas resultados. Veja o que há por dentro