terça-feira, 13 de setembro de 2016

Naive Bayes Classificação

Classificação de gênero
Problema: classificar se uma determinada pessoa é um macho ou uma fêmea com base nas características medidas. As características incluem a altura, peso e tamanho do pé.

Treinamento
Exemplo formação definido abaixo.


O classificador criado a partir do conjunto de treinamento usando uma suposição distribuição Gaussiana seria (dadas as variações são variâncias amostrais imparciais):

V. = Variação.

Como medir a variação

Desvio padrão de população


Ou Desvio padrão da amostra

Nossa média da amostra estava errado em 7%, e nossa Desvio Padrão da Amostra estava errado em 21%.

Vamos dizer que temos classes equiprováveis de modo P (masculino) = P (feminino) = 4/8 =0,5. Esta distribuição de probabilidade prévia poderia ser baseados no nosso conhecimento de frequências na população maior, ou na frequência no conjunto de treinamento.

Testando
 Abaixo está uma amostra a ser classificado como um macho ou fêmea.


Desejamos para determinar quais posterior é maior, do sexo masculino ou do sexo feminino. Para a classificação como macho posterior é dada por
Para a classificação como feminino posterior é dada por
A Evidence (também denominado constante de normalização) pode ser calculado:
No entanto, dada a amostra a evidência é uma constante e, portanto, escalas ambos os posteriors de forma igual. É, por conseguinte, não faz efeito em classificação e pode ser ignorado. Nós agora determinaremos a distribuição de probabilidade para o sexo da amostra.
P(Masculino)=0.5
Codigo em python
import math

x = input("Digite x ?")
u = input("Digite u ?")
o = input("Digite O ?")

Result = (1 / (math.sqrt(2*math.pi) *o)) * math.exp(-(math.pow(x-u,2)/(2*math.pow(o,2))))

print Result

Onde μ = 5.855  e σ  = 0.162096 e x = 6 são os parâmetros de distribuição normal que tenham sido previamente determinados a partir do conjunto de treinamento. Note-se que um valor maior do que 1 é OK aqui - é uma densidade de probabilidade do que uma probabilidade, porque a altura é uma variável contínua.

P(Peso| Masculino) = 3.80206704017e-07=0,00000038
P(T.Pes| Masculino) = 0.000221871224731
Numerador posterior(Masculino) =  6.9539887e-11
P(Feminino)=0.5
P(Altura| Feminino) = 0.144231596331
P(Peso| Feminino) = 0.0193504591478
P(T.Pes| Feminino) =0.32286937325
Numerador posterior(Feminino) = 4,505557e-4



Dado que numerador posterior é maior no caso do sexo feminino, prevemos a amostra é fêmea.

Poderiamos fazer isto usando o sklearn.naive_bayes.GaussianNB

import numpy as np
X = np.array([[6, 180, 12], [5.92, 190,11], [5.58, 170, 12], [5.92,165, 10],
 [5, 100,6], [5.5, 150,8],[5.42, 130, 7],[5.75, 150, 9]])
Y = np.array([1, 1, 1, 1, 2, 2, 2, 2])
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(X, Y)

print(clf.predict([[6, 130, 8]]))

Fonte: https://en.wikipedia.org/wiki/Naive_Bayes_classifier

Nenhum comentário:

Postar um comentário