Pour la classification multi-classes. Il est célèbre pour être utilisé pour la classification des spams.
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épendance
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)
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 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