[PYTHON] Naive Bays (classification multi-classes)

Qu'est-ce que Naive Bays

Pour la classification multi-classes. Il est célèbre pour être utilisé pour la classification des spams.

Calcul de la probabilité d'appartenance à une classe à l'aide du théorème de Bayes

Si y est la variable objective et x ($ x_ {1} $ ~ $ x_ {n} $) est la variable explicative, alors Théorème de Bayes , La probabilité de la classe à laquelle appartient un échantillon donné peut être calculée ci-dessous.

P(y | x_{1},· · · X_{n}) = \frac{P(y) * P(x_{1},· · · X_{n} | y)} {P(x_{1},· · · X_{n})}

En passant, «naïf» vient de l'hypothèse que les variables explicatives sont indépendantes les unes des autres. Le fait que les variables explicatives soient indépendantes les unes des autres signifie que:

P(x_{i} | y, x_{1},・ ・ ・,x_{i+1},・ ・ ・,x_{n}) = P(x_{i} | y)

"$ X_ {i} $ quand y arrive n'est pas affecté par les autres états x." La raison en est que la formule de la molécule sur le côté droit de la définition de Bayes devient plus simple.

En assumant l'indépendanceP(x_{1},· · · X_{n} | y) = \prod_{i=1}^n (x_{i} | y)Parce que ça peut être écrit

La formule finale du théorème de Bayes est la suivante.

P(y | x_{1},· · · X_{n}) = \frac{P(y) * \prod_{i=1}^n (x_{i} | y)} {P(x_{1},· · · X_{n})}

À ce stade, le dénominateur $ P (x_ {1}, ... x_ {n}) $ est une valeur fixe, vous n'avez donc pas à penser à calculer la probabilité d'appartenance à la classe, vous pouvez donc l'ignorer.

P(y | x_{1},· · · X_{n}) \propto P(y) * \prod_{i=1}^n (x_{i} | y) \\

($ \ Proto $ est un symbole qui signifie proportionnel.)

Cela vous donnera la probabilité d'être classé dans chaque classe, donc si vous déterminez qu'il s'agit de la classe avec la probabilité la plus élevée, vous pouvez estimer la classe.

\hat{y} = {\arg \max}_{y} P(y) * \prod_{i=1}^n (x_{i} | y)

Bayes naïfs gaussiennes

Lorsque la variable explicative est une valeur continue, la méthode qui suppose qu'elle suit une distribution normale est surtout appelée Gaussian Naive Bayes.

La probabilité d'appartenir à la classe à ce moment-là peut être exprimée comme suit.

p(x = v | c) = \frac{1}{\sqrt{2 * \pi * \sigma_c^{2}}} * \mathrm{e}^{-\frac{(v - \mu_{c})^{2}}{2 * \sigma_c^{2}}}

Essayez-le (sklearn)

Essayez Gaussian Naive Bayes avec le jeu de données iris.

{do_gaussian_naive_bayes.py}


from sklearn import datasets                           #Pour le chargement des données
from sklearn.cross_validation import train_test_split  #Apprentissage/Pour la création de données de test
from sklearn import metrics                            #Pour l'évaluation de la précision
from sklearn.naive_bayes import GaussianNB             #Pour l'exécution Gaussian Naive Bayes

#Préparation des données
iris = datasets.load_iris()
X = iris.data
Y = iris.target
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state=0)

#Exécution de Bayes naïve gaussienne
model = GaussianNB()              #Génération d'instance
model.fit(X_train, Y_train)       #Exécution de la création du modèle

#Exécution prédictive
predicted = model.predict(X_test) #Exécution prédictive
metrics.accuracy_score(Y_test, predicted) #Calcul de la précision
> 1.0

La précision était de 100%.

Recommended Posts

Naive Bays (classification multi-classes)
SVM (classification multi-classes)
Iris de classification multiclasse Keras
Méthode de voisinage K (classification multi-classes)
Courbe ROC pour la classification multi-classes
Implémenter Naive Bayes dans Python 3.3
Apprentissage automatique ② Résumé Naive Bayes
Classification multi-étiquette d'images multi-classes avec pytorch
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
Filtrage de texte avec des baies naïves de sklearn