20

मैं ऑनलाइन उपलब्ध स्रोतों को पढ़कर जीएमएम को समझने की कोशिश कर रहा हूं। मैंने के-मीन्स का उपयोग करके क्लस्टरिंग हासिल की है और यह देख रहा था कि जीएमएम के-साधनों की तुलना कैसे करेगा।गॉसियन मिश्रण मॉडल की अवधारणा को समझना

यहाँ मैं क्या समझ में आ गया है, मुझे पता है अगर मेरी अवधारणा गलत है तो कृपया:

जीएमएम इस अर्थ में कि क्लस्टरिंग दोनों ही मामलों में हासिल की है में, KNN की तरह है। लेकिन जीएमएम में प्रत्येक क्लस्टर का अपना स्वतंत्र अर्थ और कॉन्वर्सिस होता है। इसके अलावा के-साधन क्लस्टर को डेटा पॉइंट्स के कड़ी असाइनमेंट करते हैं जबकि जीएमएम में हमें स्वतंत्र गाऊसी वितरण का संग्रह मिलता है, और प्रत्येक डेटा पॉइंट के लिए हमारे पास संभावना है कि यह किसी एक वितरण से संबंधित है।

इसे बेहतर समझने के लिए मैंने मैटलैब का उपयोग इसे कोड करने और वांछित क्लस्टरिंग प्राप्त करने के लिए किया है। मैंने फीचर निष्कर्षण के उद्देश्य के लिए एसआईएफटी सुविधाओं का उपयोग किया है। और मूल्यों को शुरू करने के लिए के-साधन क्लस्टरिंग का उपयोग किया है। (यह VLFeat प्रलेखन से है)

%images is a 459 x 1 cell array where each cell contains the training image 
[locations, all_feats] = vl_dsift(single(images{1}), 'fast', 'step', 50); %all_feats will be 128 x no. of keypoints detected 
for i=2:(size(images,1)) 
    [locations, feats] = vl_dsift(single(images{i}), 'fast', 'step', 50); 
    all_feats = cat(2, all_feats, feats); %cat column wise all features 
end 

numClusters = 50; %Just a random selection. 
% Run KMeans to pre-cluster the data 
[initMeans, assignments] = vl_kmeans(single(all_feats), numClusters, ... 
    'Algorithm','Lloyd', ... 
    'MaxNumIterations',5); 

initMeans = double(initMeans); %GMM needs it to be double 

% Find the initial means, covariances and priors 
for i=1:numClusters 
    data_k = all_feats(:,assignments==i); 
    initPriors(i) = size(data_k,2)/numClusters; 

    if size(data_k,1) == 0 || size(data_k,2) == 0 
     initCovariances(:,i) = diag(cov(data')); 
    else 
     initCovariances(:,i) = double(diag(cov(double((data_k'))))); 
    end 
end 

% Run EM starting from the given parameters 
[means,covariances,priors,ll,posteriors] = vl_gmm(double(all_feats), numClusters, ... 
    'initialization','custom', ... 
    'InitMeans',initMeans, ... 
    'InitCovariances',initCovariances, ... 
    'InitPriors',initPriors); 

ऊपर मैं means, covariances और priors है के आधार पर। मेरा मुख्य सवाल है, अब क्या? मैं अब खो गया हूँ।

इसके अलावा means, covariances वेक्टर आकार 128 x 50 आकार के प्रत्येक हैं। मैं उन्हें 1 x 50 होने की उम्मीद कर रहा था क्योंकि प्रत्येक कॉलम क्लस्टर है, प्रत्येक क्लस्टर के पास केवल एक मतलब और कॉन्वर्सिस नहीं है? (मुझे पता है कि 128 एसआईएफटी विशेषताएं हैं लेकिन मैं साधनों और कॉन्वर्सिस की उम्मीद कर रहा था)।

k-साधन में मैं matlab कमांड इस्तेमाल किया knnsearch(X,Y) जो मूल रूप से वाई

में प्रत्येक बिंदु के लिए एक्स में निकटतम पड़ोसी पाता है तो कैसे जीएमएम में इस लक्ष्य को हासिल करने के लिए, मैं अपनी संभावनाओं का एक संग्रह है, और उस संभावना से निकटतम मैच का आकलन हमारे विजेता समूह होगा। और यह वह जगह है जहां मैं उलझन में हूं। ऑनलाइन सभी ट्यूटोरियल ने means, covariances मानों को प्राप्त करने के तरीके को सिखाया है, लेकिन क्लस्टरिंग के संदर्भ में वास्तव में उनका उपयोग करने के तरीके में बहुत कुछ नहीं कहें।

धन्यवाद

+1

साइड नोट:


यहाँ गाऊसी मिश्रण मॉडल का उपयोग करके क्लस्टरिंग डेटा को अधिक अच्छी तरह उदाहरण है मुझे लगता है कि आप भ्रमित कर रहे हैं [कश्मीर साधन] (https: // en.wikipedia.org/wiki/K-means_clustering) और [केएनएन] (https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm) (के-निकटतम पड़ोसी)। पहला क्लस्टरिंग विधियां (असुरक्षित शिक्षा) है, दूसरा एक वर्गीकरण विधि (पर्यवेक्षित शिक्षा) है। – Amro

+0

क्या जीएमएम यूबीएम स्पीकर सत्यापन के साथ अवधारणा समान है? –

उत्तर

55

मुझे लगता है कि अगर आप पहली बार 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)); 

2-mixtures of 1D gaussians

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-mixtures of 2D gaussians

कैसे सहप्रसरण मैट्रिक्स संयुक्त घनत्व के आकार को प्रभावित पीछे कुछ अंतर्ज्ञान है:

यहाँ 2-आयामों में दो MVN वितरण का एक मिश्रण के साथ फिर से एक उदाहरण है समारोह। उदाहरण के लिए 2 डी में, यदि मैट्रिक्स विकर्ण है तो इसका तात्पर्य है कि दो आयाम सह-भिन्न नहीं होते हैं। उस स्थिति में पीडीएफ क्षैतिज या लंबवत रूप से फैला हुआ धुरी-गठबंधन अंडाकार जैसा दिखता है जिसके अनुसार आयाम में बड़ा अंतर होता है। यदि वे बराबर हैं, तो आकार एक सही सर्कल है (दोनों आयामों में एक समान दर पर वितरण फैलता है)। अंत में यदि कॉन्वर्सिस मैट्रिक्स मनमाने ढंग से (गैर-विकर्ण लेकिन परिभाषा द्वारा अभी भी सममित है), तो यह शायद कुछ कोण पर घुमाए गए विस्तारित अंडाकार जैसा दिखता है।

तो पिछली आकृति में, आपको दो "टक्कर" अलग-अलग और प्रत्येक व्यक्तिगत वितरण का प्रतिनिधित्व करने में सक्षम होना चाहिए। जब आप 3 डी और उच्च आयामों पर जाते हैं, तो इसे एन-डिम में प्रतिनिधित्व (हाइपर-) ellipsoids के रूप में सोचें।

2d covariance matrix


अब

जब आप जीएमएम का उपयोग कर 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') 

EM clustering

+0

सामान्य रूप से, एक अद्भुत जवाब! – Oleg

+1

ओ.ओ. जब स्टैक ओवरफ्लो "पेशेवर" पूरे इंटरनेट में पाया जा सकता है कि कुछ का सबसे अच्छा स्पष्टीकरण देते हैं। बस वाह। +1 –

+0

धन्यवाद एमरो, यह उम्मीद से कहीं ज्यादा है। मुझे यकीन है कि मेरे पास आपके विस्तृत उत्तर से लाभ होगा :) – StuckInPhD

3

आप ठीक कह रहे हैं, वहाँ कश्मीर साधन या जीएमएम के साथ क्लस्टरिंग के पीछे उसी अवधारणा है। लेकिन जैसा कि आपने गॉसियन मिक्स्चर का उल्लेख किया है, डेटा कोविगेशन को ध्यान में रखते हैं। जीएमएम सांख्यिकीय मॉडल की अधिकतम संभावना पैरामीटर (या अधिकतम पोस्टरियोरी एमएपी) खोजने के लिए, आपको EM algorithm नामक एक पुनरावृत्ति प्रक्रिया का उपयोग करने की आवश्यकता है। प्रत्येक पुनरावृत्ति ई-चरण (अपेक्षा) और एक एम-चरण (अधिकतमकरण) से बना है और अभिसरण तक दोहराया जाता है। अभिसरण के बाद आप प्रत्येक क्लस्टर मॉडल के लिए प्रत्येक डेटा वैक्टर की सदस्यता संभावनाओं का आसानी से अनुमान लगा सकते हैं।

+0

आपके उत्तर के लिए धन्यवाद। एमएपी पैरामीटर (मतलब, कॉन्वर्सिस, प्रियर) प्राप्त करने के लिए मुझे ईएम चलाने की ज़रूरत है? लेकिन मैंने सोचा कि मैंने पहले से ही अपने कोड में यह किया है: '%% दिए गए मानकों से शुरू ईएम चलाएं [मतलब, कॉन्वर्सिस, प्राइर्स, ll, posteriors] = vl_gmm (डबल (all_feats), numClusters, ...' 'है यह आवश्यक नहीं है? – StuckInPhD

+0

मुझे v1_gmm फ़ंक्शन नहीं पता है लेकिन ऐसा लगता है कि केएमन्स प्रारंभिकरण से ईएम चलाया जा रहा है।फिर क्लस्टरिंग प्राप्त करने के लिए आप प्रत्येक गाऊशियन वितरण के तहत प्रत्येक डेटा वैक्टर की सदस्यता का आकलन कर सकते हैं। ध्यान दें कि @Taygun द्वारा वर्णित अनुसार, क्लस्टर की संख्या kmeans एल्गोरिदम का एक पैरामीटर है। हालांकि उनके अनुकूलन के-मीन्स क्लस्टरिंग के रूप में कुछ एक्सटेंशन मौजूद हैं ... – Eric

2

कॉन्वर्सिस आपको बताता है कि डेटा में अंतरिक्ष में भिन्नता होती है, यदि वितरण में बड़ी मात्रा में वितरण होता है, तो इसका मतलब है कि डेटा अधिक फैल गया है और इसके विपरीत। जब आपके पास गाऊशियन वितरण (माध्य और कॉन्वर्सिस पैरा) का पीडीएफ होता है, तो आप उस वितरण के तहत एक परीक्षण बिंदु के सदस्यता विश्वास की जांच कर सकते हैं।

हालांकि जीएमएम भी के-मीन्स की कमजोरी से ग्रस्त है, कि आपको पैरामीटर के चयन करना है जो क्लस्टर की संख्या है। इसके लिए आपके डेटा की बहुआयामी की अच्छी समझ की आवश्यकता है।

संबंधित मुद्दे