[PYTHON] Algorithme EM modèle mixte gaussien [apprentissage automatique statistique]

motivation

Tâche

Problème de réglage

Je veux estimer la chose la plus probable générée à partir de plusieurs distributions gaussiennes!

Génération aléatoire

import numpy as np 
import math
import matplotlib.pyplot as plt

np.random.seed(0)

def data_generate(n):
  return (np.random.randn(n)
  + np.where(np.random.rand(n) > 0.3, 2., -2.))
aa = np.histogram(data_generate(1000), bins =50)
a_bins = aa[1]
a_hist = aa[0]
X1 = []
for i in range(1, len(a_bins)):
    X1.append((a_bins[i-1]+a_bins[i])/2)
plt.bar(X1,a_hist, width=0.05)

image.png

Définition de la distribution normale

def nomal_distribution(x , mu, dev):
    c = (2 * math.pi * math.pow(dev, 2)) ** (-1/2)
    a = (-(x-mu)**2)/(2 * (dev**2) )
    return c * math.exp(a)

Algorithme EM

Maximiser Q of E

def ita(xi, mu, dev, m = m):
    s = 0
    for i in range(m):
        s += w[i] * nomal_distribution(xi, mu[i], dev[i])
    n = []
    for l in range(m):
        n.append(w[l] * nomal_distribution(xi, mu[l], dev[l])/s)
    return n #matrice m

def E (x, mu, dev, m = m, data_size = data_size):
    Q = 0
    for i in range(data_size):
        for j in m:
            Q += ita(x[i], mu, dev)[j] * ( math.ln(w[j]) + math.ln(nomal_distribution(xi, mu[j], dev[j])) )
    
    return Q

def M(x, mu, dev, d,  m = m, data_size = data_size):
    n = 0
    a = 0
    aa = 0
    for i in range(data_size):
        n += np.array(ita(x[i], mu, dev))
        a += (np.array(ita(x[i], mu, dev)) * x[i])
        aa += np.array(ita(x[i], mu, dev)) * (( x[i] - mu) ** 2) 

    w1 = (1/data_size)*n
    mu1 = [ a[j]/n[j] for j in range(m) ] 
    dev1 = [math.sqrt( aa[j]/(d*n[j]) ) for j in range(m)]  

    return w1, mu1, dev1

Graphisme

def probability_distribution(xi, w1, mu1, dev1):
    p = 0
    pro = []
    for j in range(m):
        p +=  w1[j] * nomal_distribution(xi, mu1[j], dev1[j])
    return p
epoc = 30
m = 3
data_size = 1000
mu = np.random.uniform(-1, 1, m)
w = [0.2,0.2,0.6]
dev = np.random.uniform(-0.2, 0.2, m)
x = data_generate(data_size)
w1, mu1, dev1 =  M(x, mu, dev, 1)
for num in range(epoc):
    w1, mu1, dev1 = M(x, mu1, dev1, 1)

xx = np.linspace(-10, 10, 100)
pp0 = [probability_distribution(xx[i] ,w, mu, dev) for i in range(len(xx))]   
pp = [probability_distribution(xx[i] ,w1, mu1, dev1) for i in range(len(xx))]   
plt.scatter(xx,pp, c='red')
#plt.scatter(xx,pp0, c = 'blue')

image.png

Recommended Posts

Algorithme EM modèle mixte gaussien [apprentissage automatique statistique]
Estimation de la distribution gaussienne mixte par algorithme EM
Calcul d'algorithme EM pour un problème de distribution gaussienne mixte
(Apprentissage automatique) J'ai essayé de comprendre attentivement l'algorithme EM dans la distribution gaussienne mixte avec l'implémentation.
Modèle d'apprentissage automatique prenant en compte la maintenabilité
À propos de la matrice mixte d'apprentissage automatique
EM de distribution gaussienne mixte
Algorithme d'apprentissage automatique (perceptron simple)
Algorithme d'apprentissage automatique (machine vectorielle de support)
Algorithme d'apprentissage automatique (régression logistique)
<Course> Machine learning Chapitre 6: Algorithme 2 (k-means)
Algorithme d'apprentissage automatique (prise en charge de l'application de machine vectorielle)
Algorithme d'apprentissage automatique (analyse de régression multiple)
Algorithme d'apprentissage automatique (analyse de régression unique)
Analyse inverse du modèle d'apprentissage automatique
Algorithme d'apprentissage automatique (méthode de descente de gradient)
Algorithme d'apprentissage automatique (généralisation de la régression linéaire)
Apprentissage automatique
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
<Cours> Machine learning Chapitre 1: Modèle de régression linéaire
Résumé de la classification et de la mise en œuvre des algorithmes d'apprentissage automatique
<Cours> Machine learning Chapitre 2: Modèle de régression non linéaire
Algorithme d'apprentissage automatique (résumé de régression linéaire et régularisation)
[Python] Clustering avec un modèle gaussien infiniment mélangé
Classer les informations liées à l'apprentissage automatique par modèle de sujet
Algorithme d'apprentissage du dictionnaire
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
[Python] Implémentation du clustering à l'aide d'un modèle gaussien mixte
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
xgboost: modèle d'apprentissage automatique efficace pour les données de table
Parlez de l'amélioration du goulot d'étranglement des algorithmes d'apprentissage automatique avec Cython