मुझे लगता है कि अगर आप पहली बार GMM मॉडल का प्रतिनिधित्व करते हैं तो यह मदद करेगा।मैं Statistics Toolbox से functions का उपयोग करूँगा, लेकिन आप VLFeat का उपयोग करके ऐसा करने में सक्षम होना चाहिए।
चलिए दो 1-आयामी normal distributions के मिश्रण के मामले से शुरू करते हैं। प्रत्येक गॉसियन को mean और variance की एक जोड़ी द्वारा दर्शाया जाता है। मिश्रण प्रत्येक घटक (पूर्व) को एक भार आवंटित करता है।
उदाहरण के लिए, बराबर वजन (p = [0.5; 0.5]
), पहली 0 पर केन्द्रित और 5 (mu = [0; 5]
) में दूसरे के साथ दो सामान्य वितरण की सुविधा देता है मिश्रण, और प्रसरण पहले और दूसरे वितरण के लिए क्रमश: 1 और 2 के बराबर (sigma = cat(3, 1, 2)
) ।
जैसा कि आप नीचे देख सकते हैं, मतलब प्रभावी रूप से वितरण को बदल देता है, जबकि भिन्नता निर्धारित करता है कि यह कितना चौड़ा/संकीर्ण और फ्लैट/पॉइंट है। पहले अंतिम संयुक्त मॉडल प्राप्त करने के लिए मिश्रित अनुपात को सेट करता है।
% create GMM
mu = [0; 5];
sigma = cat(3, 1, 2);
p = [0.5; 0.5];
gmm = gmdistribution(mu, sigma, p);
% view PDF
ezplot(@(x) pdf(gmm,x));
EM clustering का विचार है कि प्रत्येक वितरण एक क्लस्टर का प्रतिनिधित्व करता है। एक आयामी डेटा के साथ ऊपर के उदाहरण में इसलिए, यदि आप एक उदाहरण x = 0.5
दिए गए थे, हम इसे 99.5% संभावना के साथ पहली क्लस्टर/मोड के लिए संबंधित के रूप में आवंटित होगा
>> x = 0.5;
>> posterior(gmm, x)
ans =
0.9950 0.0050 % probability x came from each component
आप देख सकते हैं कि उदाहरण अच्छी तरह के अंतर्गत आती है पहला घंटी-वक्र।
>> x = 2.2
>> posterior(gmm, 2.2)
ans =
0.4717 0.5283
ही अवधारणाओं multivariate normal distributions साथ उच्च आयाम का विस्तार: जबकि यदि आप बीच में एक बिंदु लेते हैं, इस सवाल का जवाब और अधिक अस्पष्ट (वर्ग = 2 के लिए, लेकिन बहुत कम निश्चितता के साथ सौंपा बिंदु) होगा। एक से अधिक आयामों में, covariance matrix सुविधाओं के बीच अंतर-निर्भरताओं के लिए खाते के लिए भिन्नता का एक सामान्यीकरण है।
% first distribution is centered at (0,0), second at (-1,3)
mu = [0 0; 3 3];
% covariance of first is identity matrix, second diagonal
sigma = cat(3, eye(2), [5 0; 0 1]);
% again I'm using equal priors
p = [0.5; 0.5];
% build GMM
gmm = gmdistribution(mu, sigma, p);
% 2D projection
ezcontourf(@(x,y) pdf(gmm,[x y]));
% view PDF surface
ezsurfc(@(x,y) pdf(gmm,[x y]));
कैसे सहप्रसरण मैट्रिक्स संयुक्त घनत्व के आकार को प्रभावित पीछे कुछ अंतर्ज्ञान है:
यहाँ 2-आयामों में दो MVN वितरण का एक मिश्रण के साथ फिर से एक उदाहरण है समारोह। उदाहरण के लिए 2 डी में, यदि मैट्रिक्स विकर्ण है तो इसका तात्पर्य है कि दो आयाम सह-भिन्न नहीं होते हैं। उस स्थिति में पीडीएफ क्षैतिज या लंबवत रूप से फैला हुआ धुरी-गठबंधन अंडाकार जैसा दिखता है जिसके अनुसार आयाम में बड़ा अंतर होता है। यदि वे बराबर हैं, तो आकार एक सही सर्कल है (दोनों आयामों में एक समान दर पर वितरण फैलता है)। अंत में यदि कॉन्वर्सिस मैट्रिक्स मनमाने ढंग से (गैर-विकर्ण लेकिन परिभाषा द्वारा अभी भी सममित है), तो यह शायद कुछ कोण पर घुमाए गए विस्तारित अंडाकार जैसा दिखता है।
तो पिछली आकृति में, आपको दो "टक्कर" अलग-अलग और प्रत्येक व्यक्तिगत वितरण का प्रतिनिधित्व करने में सक्षम होना चाहिए। जब आप 3 डी और उच्च आयामों पर जाते हैं, तो इसे एन-डिम में प्रतिनिधित्व (हाइपर-) ellipsoids के रूप में सोचें।
अब
जब आप जीएमएम का उपयोग कर clustering प्रदर्शन कर रहे हैं, लक्ष्य मॉडल मापदंडों को खोजने के लिए (मतलब है और प्रत्येक वितरण के साथ-साथ महंतों की सहप्रसरण) है कि परिणामी मॉडल सबसे अच्छा फिट आँकड़े। सबसे अच्छा फिट अनुमान जीएमएम मॉडल दिए गए डेटा के maximizing the likelihood में अनुवाद करता है (जिसका अर्थ है कि आप मॉडल चुनते हैं जो Pr(data|model)
को अधिकतम करता है)।
जैसा कि अन्य ने समझाया है, इसे EM algorithm का उपयोग करके हल किया जाता है; ईएम मिश्रण मॉडल के पैरामीटर के प्रारंभिक अनुमान या अनुमान के साथ शुरू होता है। यह पैरामीटर द्वारा उत्पादित मिश्रण घनत्व के खिलाफ डेटा उदाहरणों को पुन: स्कोर करता है। फिर से बनाए गए उदाहरण पैरामीटर अनुमानों को अद्यतन करने के लिए उपयोग किए जाते हैं। यह तब तक दोहराया जाता है जब तक एल्गोरिदम अभिसरण नहीं हो जाता है।
दुर्भाग्य ईएम एल्गोरिथ्म मॉडल के प्रारंभ के लिए बहुत संवेदनशील है, इसलिए यह एक लंबे समय के अभिसरण के लिए ले करता है, तो आप गरीब प्रारंभिक मान निर्धारित करते हैं, या यहां तक कि local optima में फंस सकता है। जीएमएम पैरामीटर शुरू करने का एक बेहतर तरीका K-means का उपयोग पहले चरण (जैसा कि आपने अपने कोड में दिखाया है) के रूप में करना है, और ईएम को प्रारंभ करने के लिए उन समूहों के माध्य/cov का उपयोग करना है।
अन्य क्लस्टर विश्लेषण तकनीकों के साथ, हमें पहले उपयोग करने के लिए decide on the number of clusters की आवश्यकता है। Cross-validation क्लस्टर की संख्या का एक अच्छा अनुमान खोजने का एक मजबूत तरीका है।
ईएम क्लस्टरिंग इस तथ्य से ग्रस्त है कि फिट करने के लिए बहुत सारे पैरामीटर हैं, और आमतौर पर अच्छे परिणाम प्राप्त करने के लिए बहुत सारे डेटा और कई पुनरावृत्तियों की आवश्यकता होती है। एम-मिक्स्चर और डी-आयामी डेटा के साथ एक अनियंत्रित मॉडल में D*D*M + D*M + M
पैरामीटर (एम कॉन्वर्सिस मैट्रिक्स आकार डीएक्सडी के प्रत्येक, प्लस एम का मतलब वैक्टर वैक्टर, प्लस एम के प्राइवर्स का वेक्टर शामिल है)। यह large number of dimensions के साथ डेटासेट के लिए एक समस्या हो सकती है। इसलिए overfitting समस्याओं से बचने के लिए समस्या को सरल बनाने के लिए प्रतिबंधों और धारणा को लागू करना प्रथागत है (regularization का एक प्रकार)। उदाहरण के लिए आप कॉवर्सिएन्स मैट्रिक्स को केवल विकर्ण होने के लिए ठीक कर सकते हैं या यहां तक कि सभी गॉसियनों में कॉन्वर्स मैट्रिस shared भी कर सकते हैं।
आखिर में जब आप मिश्रण मॉडल लगाते हैं, तो आप प्रत्येक मिश्रण घटक (जैसे मैंने 1 डी उदाहरण के साथ दिखाया गया है) का उपयोग करके डेटा इंस्टेंस की पिछली संभावना की गणना करके क्लस्टर का पता लगा सकते हैं। जीएमएम इस "सदस्यता" की संभावना के अनुसार प्रत्येक उदाहरण को क्लस्टर में असाइन करता है।
% load Fisher Iris dataset
load fisheriris
% project it down to 2 dimensions for the sake of visualization
[~,data] = pca(meas,'NumComponents',2);
mn = min(data); mx = max(data);
D = size(data,2); % data dimension
% inital kmeans step used to initialize EM
K = 3; % number of mixtures/clusters
cInd = kmeans(data, K, 'EmptyAction','singleton');
% fit a GMM model
gmm = fitgmdist(data, K, 'Options',statset('MaxIter',1000), ...
'CovType','full', 'SharedCov',false, 'Regularize',0.01, 'Start',cInd);
% means, covariances, and mixing-weights
mu = gmm.mu;
sigma = gmm.Sigma;
p = gmm.PComponents;
% cluster and posterior probablity of each instance
% note that: [~,clustIdx] = max(p,[],2)
[clustInd,~,p] = cluster(gmm, data);
tabulate(clustInd)
% plot data, clustering of the entire domain, and the GMM contours
clrLite = [1 0.6 0.6 ; 0.6 1 0.6 ; 0.6 0.6 1];
clrDark = [0.7 0 0 ; 0 0.7 0 ; 0 0 0.7];
[X,Y] = meshgrid(linspace(mn(1),mx(1),50), linspace(mn(2),mx(2),50));
C = cluster(gmm, [X(:) Y(:)]);
image(X(:), Y(:), reshape(C,size(X))), hold on
gscatter(data(:,1), data(:,2), species, clrDark)
h = ezcontour(@(x,y)pdf(gmm,[x y]), [mn(1) mx(1) mn(2) mx(2)]);
set(h, 'LineColor','k', 'LineStyle',':')
hold off, axis xy, colormap(clrLite)
title('2D data and fitted GMM'), xlabel('PC1'), ylabel('PC2')
साइड नोट:
यहाँ गाऊसी मिश्रण मॉडल का उपयोग करके क्लस्टरिंग डेटा को अधिक अच्छी तरह उदाहरण है मुझे लगता है कि आप भ्रमित कर रहे हैं [कश्मीर साधन] (https: // en.wikipedia.org/wiki/K-means_clustering) और [केएनएन] (https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm) (के-निकटतम पड़ोसी)। पहला क्लस्टरिंग विधियां (असुरक्षित शिक्षा) है, दूसरा एक वर्गीकरण विधि (पर्यवेक्षित शिक्षा) है। – Amro
क्या जीएमएम यूबीएम स्पीकर सत्यापन के साथ अवधारणा समान है? –