यह मेरे लिए पूरी तरह से स्पष्ट नहीं है कि आप जो पूछ रहे हैं वह वही है जो आपको वास्तव में चाहिए: मशीन लर्निंग में एक सामान्य प्रीप्रोसेसिंग कदम आयामीता में कमी + श्वेतकरण है, जिसका अर्थ है पीसीए करना और घटकों को मानकीकृत करना, और कुछ नहीं। लेकिन मैं आपके प्रश्न पर फिर भी ध्यान केंद्रित करूंगा क्योंकि यह तैयार है, क्योंकि यह अधिक दिलचस्प है।
चलो स्तंभों में पंक्तियों और चर में डेटा बिंदुओं के साथ डेटा मैट्रिक्स के साथ केंद्रित । पीसीए की मात्रा एकवचन मान अपघटन जहां हम केवल घटक रखने के लिए आयाम हैं। इन घटकों में से एक ऑर्थोगोनल "कारक रोटेशन" का तात्पर्य ऑर्थोगोनल मैट्रिक्स चुनने और इसे अपघटन में प्लग करने से है:एक्सn × डी
एक्स =यू एस वी⊤≈यूकएसकवी⊤क,
कk × kआरएक्स ≈यूकएसकवी⊤क=यूकआर आर⊤एसकवी⊤क=एन - 1-----√यू⊤कआरघुमाया गयामानकीकृत अंक⋅आर⊤एसकवी⊤क/एन - 1-----√घुमाया लोडिंग⊤।
यहाँ को मानकीकृत घटकों को घुमाया जाता है और दूसरा शब्द घुमाए गए लोडिंग का प्रतिनिधित्व करता है। रोटेशन के बाद प्रत्येक घटक का विचरण संबंधित लोडिंग वेक्टर के वर्गों के योग द्वारा दिया जाता है; रोटेशन से पहले यह बस । रोटेशन के बाद यह कुछ और है।
एन - 1-----√यूकआररों2मैं/ (n-1)
अब हम गणितीय शब्दों में समस्या को तैयार करने के लिए तैयार हैं: दिए गए लोडिंग , मैट्रिक्स ऐसे ढूंढें कि घुमाए गए लोडिंग, , प्रत्येक कॉलम में वर्गों के बराबर राशि है।ल =वीकएसक/एन - 1-----√आरएल आर
इसका हल निकालते हैं। रोटेशन के बाद वर्गों के कॉलम sums के विकर्ण तत्वों के बराबर हैं। यह समझ में आता है: रोटेशन बस घटकों के पुनर्वितरित करता है, जो मूल रूप से द्वारा दिए जाते हैं, उनके बीच, इस सूत्र के अनुसार। हम पुन: वितरित करने के लिए उन्हें इस तरह वे सब उनकी औसत मूल्य के बराबर हो जाते हैं की जरूरत है ।
( एल आर)⊤एल आर =आर⊤एस2एन - 1आर ।
रों2मैं/ (n-1)μ
मुझे नहीं लगता कि इस के लिए एक बंद रूप समाधान है, और वास्तव में कई अलग-अलग समाधान हैं। लेकिन एक समाधान आसानी से एक अनुक्रमिक फैशन में बनाया जा सकता है:
- पहला घटक और -th घटक लें। पहले वाले में variance और अंतिम में variance ।कσअधिकतम> μσमिनट< μ
- केवल इन दो को ऐसे घुमाएँ कि पहले का विचरण बराबर हो जाए । 2 डी में रोटेशन मैट्रिक्स केवल एक पैरामीटर पर निर्भर करता है और समीकरण लिखना और आवश्यक गणना करना आसान है । दरअसल, और परिवर्तन के बाद पहला PC विचरण जिससे हम तुरंत प्राप्त करते हैंμθθ
आर2 डी= (क्योंकिθ- पापθपापθक्योंकिθ)
क्योंकि2θ⋅σmax+sin2θ⋅σmin=cos2θ⋅σmax+(1−cos2θ)⋅σmin=μ,
cos2θ=μ−σminσmax−σmin.
- पहला घटक अब किया गया है, इसमें विचरण ।μ
- सबसे बड़े विचरण के साथ घटक और सबसे छोटे विचरण के साथ अगली जोड़ी के लिए आगे बढ़ें। गोटो # 2
यह 2D घुमाव के अनुक्रम द्वारा सभी प्रकारों को समान रूप से पुनर्वितरित करेगा । इन सभी रोटेशन मैट्रिसेस को एक साथ गुणा करने से समग्र निकलेगा ।( के - १ )आर
उदाहरण
निम्नलिखित मैट्रिक्स पर विचार करें:माध्य विचरण । मेरा एल्गोरिथ्म इस प्रकार आगे बढ़ेगा:एस2/ (n-1)
⎛⎝⎜⎜⎜10000060000300001⎞⎠⎟⎟⎟।
5
चरण 1: पीसी 1 और पीसी 4 को घुमाएं ताकि पीसी 1 को विचरण । नतीजतन, पीसी 4 को विचरण ।51 + ( 10 - 5 ) = 6
चरण 2: PC2 (नया अधिकतम विचरण) और PC3 को घुमाएं ताकि PC2 को विचरण । नतीजतन, पीसी को विचरण ।53 + ( 6 - 5 ) = 4
चरण 3: पीसी 4 (नया अधिकतम विचरण) और पीसी 3 को घुमाएं ताकि पीसी को विचरण । नतीजतन, पीसी 3 को विचरण ।54 + ( 6 - 1 ) = 5
किया हुआ।
मैंने मैटलैब स्क्रिप्ट लिखी है जो इस एल्गोरिथम को लागू करती है (नीचे देखें)। इस इनपुट मैट्रिक्स के लिए, रोटेशन एंगल्स का क्रम है:
48.1897 35.2644 45.0000
घटक चर प्रत्येक चरण के बाद (पंक्तियों में):
10 6 3 1
5 6 3 6
5 5 4 6
5 5 5 5
अंतिम रोटेशन मैट्रिक्स (तीन 2D रोटेशन मेट्रिक्स का उत्पाद):
0.6667 0 0.5270 0.5270
0 0.8165 0.4082 -0.4082
0 -0.5774 0.5774 -0.5774
-0.7454 0 0.4714 0.4714
और अंतिम मैट्रिक्स है:( एल आर)⊤एल आर
5.0000 0 3.1623 3.1623
0 5.0000 1.0000 -1.0000
3.1623 1.0000 5.0000 1.0000
3.1623 -1.0000 1.0000 5.0000
यहाँ कोड है:
S = diag([10 6 3 1]);
mu = mean(diag(S));
R = eye(size(S));
vars(1,:) = diag(S);
Supdated = S;
for i = 1:size(S,1)-1
[~, maxV] = max(diag(Supdated));
[~, minV] = min(diag(Supdated));
w = (mu-Supdated(minV,minV))/(Supdated(maxV,maxV)-Supdated(minV,minV));
cosTheta = sqrt(w);
sinTheta = sqrt(1-w);
R2d = eye(size(S));
R2d([maxV minV], [maxV minV]) = [cosTheta sinTheta; -sinTheta cosTheta];
R = R * R2d;
Supdated = transpose(R2d) * Supdated * R2d;
vars(i+1,:) = diag(Supdated);
angles(i) = acosd(cosTheta);
end
angles %// sequence of 2d rotation angles
round(vars) %// component variances on each step
R %// final rotation matrix
transpose(R)*S*R %// final S matrix
यहाँ पायफ़ॉन द्वारा प्रदान की गई पायथन में कोड है:
def amoeba_rotation(s2):
"""
Parameters
----------
s2 : array
The diagonal of the matrix S^2.
Returns
-------
R : array
The rotation matrix R.
Examples
--------
>>> amoeba_rotation(np.array([10, 6, 3, 1]))
[[ 0.66666667 0. 0.52704628 0.52704628]
[ 0. 0.81649658 0.40824829 -0.40824829]
[ 0. -0.57735027 0.57735027 -0.57735027]
[-0.74535599 0. 0.47140452 0.47140452]]
http://stats.stackexchange.com/a/177555/87414
"""
n = len(s2)
mu = s2.mean()
R = np.eye(n)
for i in range(n-1):
max_v, min_v = np.argmax(s2), np.argmin(s2)
w = (mu - s2[min_v]) / (s2[max_v] - s2[min_v])
cos_theta, sin_theta = np.sqrt(w), np.sqrt(1-w)
R[:, [max_v, min_v]] = np.dot(
R[:, [max_v, min_v]],
np.array([[cos_theta, sin_theta], [-sin_theta, cos_theta]]))
s2[[max_v, min_v]] = [mu, s2[max_v] + s2[min_v] - mu]
return R
ध्यान दें कि यह समस्या पूरी तरह से निम्न के बराबर है: दिए गए साथ असंबद्ध चर, जो variances , एक रोटेशन (यानी एक नया ऑर्थोगोनल आधार) खोजें जो बराबर चर के साथ वेरिएबल्स का उत्पादन करेगा (लेकिन निश्चित रूप से अब असंबंधित नहीं है)।कσ2मैंक