Scikit-learn: GMM рдореЗрдВ EM рдПрд▓реНрдЧреЛрд░рд┐рдердо 0.16.1 (рд▓реЗрдХрд┐рди 0.15.2 рдХреЗ рд╕рд╛рде рдареАрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ-рдЖрдпрд╛рдореА рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 13 рдордИ 2015  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: scikit-learn/scikit-learn

GMM.fit () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ-рдЖрдпрд╛рдореА рдЧрд╛рдКрд╕реА рд╡рд┐рддрд░рдг рдХреЛ рдлрд╝рд┐рдЯ рдХрд░рдирд╛ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рд╕рдВрд╕реНрдХрд░рдг 0.16.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 0.15.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреБрдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг:

import sklearn
from sklearn import mixture
import numpy as np
from scipy import stats
import sys

# the version info 
print("Python version: %s.%s" %(sys.version_info.major, sys.version_info.minor))
print("scikit-learn version: %s" %(sklearn.__version__))

# some pretend data
np.random.seed(seed=0)
data = stats.norm.rvs(loc=100, scale=1, size=1000)
print("Data mean = %s, Data std dev = %s" %(np.mean(data), np.std(data)))

# Fitting using a GMM with a single component
clf = mixture.GMM(n_components=1)
clf.fit(data)
print(clf.means_, clf.weights_, clf.covars_)

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХреЛ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди 0.15.2 рдХреЗ рд╕рд╛рде рдЪрд▓рд╛рдиреЗ рд╕реЗ рд╕рд╣реА рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддрд╛ рд╣реИ:

Python version: 3.4
scikit-learn version: 0.15.2
Data mean = 99.9547432925, Data std dev = 0.987033158669
[[ 99.95474329]] [ 1.] [[ 0.97523446]]

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдареАрдХ рд╡рд╣реА рдХреЛрдб scikit-learn 0.16.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдЯреНрд░реЗрд╕рдмреИрдХ рджреЗрддрд╛ рд╣реИ:

Python version: 3.4
scikit-learn version: 0.16.1
Data mean = 99.9547432925, Data std dev = 0.987033158669
/home/rebecca/anaconda/envs/new_sklearn/lib/python3.4/site-packages/numpy/lib/function_base.py:1890: RuntimeWarning: Degrees of freedom <= 0 for slice
  warnings.warn("Degrees of freedom <= 0 for slice", RuntimeWarning)
/home/rebecca/anaconda/envs/new_sklearn/lib/python3.4/site-packages/numpy/lib/function_base.py:1901: RuntimeWarning: invalid value encountered in true_divide
  return (dot(X, X.T.conj()) / fact).squeeze()
Traceback (most recent call last):
  File "test_sklearn.py", line 18, in <module>
    clf.fit(data)
  File "/home/rebecca/anaconda/envs/new_sklearn/lib/python3.4/site-packages/sklearn/mixture/gmm.py", line 498, in fit
    "(or increasing n_init) or check for degenerate data.")
RuntimeError: EM algorithm was never able to compute a valid likelihood given initial parameters. Try different init parameters (or increasing n_init) or check for degenerate data.

рдореИрдВрдиреЗ n_init, n_iter рдФрд░ covariance_type рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдЗрди рд╕рднреА рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рддреНрд░реБрдЯрд┐ рдпрд╛ 0.16.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди 0.15.2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдЕрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХрддрдордХрд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ: #4429

рдпрджрд┐ рдпрд╣ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдПрдирд╛рдХреЛрдВрдбрд╛ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рдХреА рдПрдХ рд╕рд╛рдл рд╕реНрдерд╛рдкрдирд╛ рдереА, рдЬрд┐рд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╕рдВрд╕реНрдХрд░рдг 0.16.1 рдХреЗ рд▓рд┐рдП):

conda create -n new_sklearn python=3.4
source activate new_sklearn
conda install sklearn

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рд╕рдВрднрд╡рддрдГ рдбреЗрдЯрд╛ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдкрдХрд╛ X 1 ndim рдпрд╛ 2 ndim рд╣реИ?
0.15 рдФрд░ 0.16 рдХреЗ рдмреАрдЪ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо 1ndim рдЗрдирдкреБрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдЖрдХрд╛рд░ X.shape = (n_samples, 1) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рддреБрдо рдХрд░ рд╕рдХрддреЗ рд╣реЛ

X = X.reshape(-1, 1)

рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдПрдХ рдирдореВрдирд╛ рдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рд╕рднреА 4 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рд╕рдВрднрд╡рддрдГ рдбреЗрдЯрд╛ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдЖрдкрдХрд╛ X 1 ndim рдпрд╛ 2 ndim рд╣реИ?
0.15 рдФрд░ 0.16 рдХреЗ рдмреАрдЪ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо 1ndim рдЗрдирдкреБрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХрд╛ рдЗрдирдкреБрдЯ рдЖрдХрд╛рд░ X.shape = (n_samples, 1) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рддреБрдо рдХрд░ рд╕рдХрддреЗ рд╣реЛ

X = X.reshape(-1, 1)

рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм рдПрдХ рдирдореВрдирд╛ рдпрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рд╣рд╛рдВ, рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдирдорд╕реНрддреЗ, рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрд▓рдЧ рд╣реИред рдореИрдВ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛрдб рдХреЛ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдкреНрд▓реЙрдЯ рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реВрдВ (рдкреИрд░рд╛рдореАрдЯрд░, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рддрд╛рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рд╣реЛ? рдзрдиреНрдпрд╡рд╛рдж!

@imdie

рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

clf = GMM(4, n_iter=500, random_state=3)
рдПрдХреНрд╕ рдЖрдХрд╛рд░ = (рдПрдХреНрд╕ рдЖрдХрд╛рд░ [0], 1)
рд╕реАрдПрд▓рдПрдл = рд╕реАрдПрд▓рдПрдл рдлрд┐рдЯ (рдПрдХреНрд╕)

xpdf = np.linspace(-10, 20, 1000)
xpdf.shape = (xpdf.shape[0],1)
рдШрдирддреНрд╡ = np.exp (clf.score (xpdf))

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

murata-yu picture murata-yu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

amueller picture amueller  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ben519 picture ben519  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

genliu777 picture genliu777  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vitorcoliveira picture vitorcoliveira  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ