Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah algoritma EM dalam Python?

Apakah algoritma EM dalam Python?

PHPz
PHPzasal
2023-06-05 08:51:321417semak imbas

Algoritma EM dalam Python ialah kaedah berulang berdasarkan anggaran kemungkinan maksimum, yang biasanya digunakan untuk masalah anggaran parameter dalam pembelajaran tanpa pengawasan. Artikel ini akan memperkenalkan definisi, prinsip asas, senario aplikasi dan pelaksanaan Python bagi algoritma EM.

1. Definisi algoritma EM

Algoritma EM ialah singkatan daripada Jangkaan-pemaksimum Algoritma. Ia adalah algoritma berulang yang direka untuk menyelesaikan anggaran kemungkinan maksimum berdasarkan data yang diperhatikan.

Dalam algoritma EM, adalah perlu untuk menganggap bahawa data sampel berasal daripada taburan kebarangkalian tertentu, dan parameter taburan tidak diketahui dan perlu dianggarkan oleh algoritma EM. Algoritma EM mengandaikan bahawa parameter yang tidak diketahui boleh dibahagikan kepada dua kategori, satu pembolehubah boleh diperhatikan dan satu lagi pembolehubah tidak boleh diperhatikan. Melalui lelaran, nilai jangkaan pembolehubah tidak boleh diperhatikan digunakan sebagai nilai anggaran parameter, dan kemudian penyelesaian diselesaikan semula sehingga penumpuan.

2. Prinsip asas algoritma EM

  1. E step (Expectation)

Dalam langkah E, adalah perlu untuk mengira berdasarkan arus anggaran parameter Untuk mengetahui taburan kebarangkalian pembolehubah tersembunyi, iaitu mencari taburan bersyarat bagi setiap pembolehubah tersembunyi, iaitu nilai jangkaan pembolehubah tersembunyi. Nilai jangkaan ini dikira berdasarkan anggaran parameter semasa.

  1. M langkah (Maksimum)

Dalam langkah M, nilai parameter semasa perlu dianggarkan semula berdasarkan nilai jangkaan pembolehubah pendam yang dikira dalam langkah E. Anggaran ini dikira berdasarkan nilai jangkaan pembolehubah pendam yang dikira dalam langkah E.

  1. Kemas kini nilai parameter

Melalui lelaran langkah E dan langkah M, satu set anggaran parameter akhirnya akan diperolehi. Jika anggaran menumpu, algoritma berakhir, jika tidak, lelaran diteruskan. Setiap lelaran mengoptimumkan nilai parameter sehingga anggaran parameter optimum ditemui.

3. Senario Aplikasi Algoritma EM

Algoritma EM digunakan secara meluas dalam bidang pembelajaran tanpa pengawasan, seperti analisis kelompok, pemilihan model dan model Markov tersembunyi, dsb., dan mempunyai keteguhan yang kukuh Ia mempunyai kelebihan fleksibiliti tinggi dan kecekapan berulang.

Sebagai contoh, dalam masalah pengelompokan, algoritma EM boleh digunakan untuk anggaran parameter model campuran Gaussian, iaitu, taburan data yang diperhatikan dimodelkan sebagai model campuran bagi pelbagai taburan Gaussian, dan sampel dikumpulkan. supaya setiap kumpulan Data dalam mereka mematuhi taburan kebarangkalian yang sama. Dalam algoritma EM, masalah diselesaikan dengan mengumpulkan data dalam langkah E dan mengemas kini parameter taburan Gaussian dalam langkah M.

Selain itu, dalam pemprosesan imej, algoritma EM juga sering digunakan dalam tugasan seperti pembahagian imej dan denoising imej.

4. Python melaksanakan algoritma EM

Dalam Python, terdapat banyak fungsi yang boleh menggunakan algoritma EM untuk anggaran parameter, seperti pelaksanaan algoritma EM dalam perpustakaan SciPy dan Gaussian dalam Pustaka scikit-learn model GMM, pengekod auto variasi VAE dalam perpustakaan TensorFlow, dsb.

Berikut ialah pengenalan menggunakan pelaksanaan algoritma EM perpustakaan SciPy sebagai contoh. Mula-mula, anda perlu mengimportnya ke dalam Pyhton seperti berikut:

import scipy.stats as st
import numpy as np

Kemudian, tentukan fungsi ketumpatan kebarangkalian model campuran Gaussian sebagai fungsi objektif pengoptimuman algoritma EM:

def gmm_pdf(data, weights, means, covs):
    n_samples, n_features = data.shape
    pdf = np.zeros((n_samples,))
    for i in range(len(weights)):
        pdf += weights[i]*st.multivariate_normal.pdf(data, mean=means[i], cov=covs[i])
    return pdf

Seterusnya, takrifkan fungsi algoritma EM :

def EM(data, n_components, max_iter):
    n_samples, n_features = data.shape
    weights = np.ones((n_components,))/n_components
    means = data[np.random.choice(n_samples, n_components, replace=False)]
    covs = [np.eye(n_features) for _ in range(n_components)]

    for i in range(max_iter):
        # E步骤
        probabilities = np.zeros((n_samples, n_components))
        for j in range(n_components):
            probabilities[:,j] = weights[j]*st.multivariate_normal.pdf(data, mean=means[j], cov=covs[j])
        probabilities = (probabilities.T/probabilities.sum(axis=1)).T

        # M步骤
        weights = probabilities.mean(axis=0)
        means = np.dot(probabilities.T, data)/probabilities.sum(axis=0)[:,np.newaxis]
        for j in range(n_components):
            diff = data - means[j]
            covs[j] = np.dot(probabilities[:,j]*diff.T, diff)/probabilities[:,j].sum()

    return weights, means, covs

Akhir sekali, kod berikut boleh digunakan untuk menguji algoritma EM:

# 生成数据
np.random.seed(1234)
n_samples = 100
x1 = np.random.multivariate_normal([0,0], [[1,0],[0,1]], int(n_samples/2))
x2 = np.random.multivariate_normal([3,5], [[1,0],[0,2]], int(n_samples/2))
data = np.vstack((x1,x2))

# 运行EM算法
weights, means, covs = EM(data, 2, 100)

# 输出结果
print('weights:', weights)
print('means:', means)
print('covs:', covs)

Rujukan:

[1] Xu, R . & Wunsch, D. C. (2005). Tinjauan algoritma pengelompokan. (2003) Peruntukan dirichlet terpendam Jurnal Penyelidikan Pembelajaran Mesin, 3(4-5), 993-1022.

Atas ialah kandungan terperinci Apakah algoritma EM dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn