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
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.
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.
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!