SVD සහ PCA අතර සම්බන්ධතාවය. PCA සිදු කිරීම සඳහා SVD භාවිතා කරන්නේ කෙසේද?


392

ප්‍රධාන සංරචක විශ්ලේෂණය (පීසීඒ) සාමාන්‍යයෙන් විස්තර කරනු ලබන්නේ සහසංයුජ අනුකෘතියේ අයිජන්-වියෝජනයෙනි. කෙසේ වෙතත්, දත්ත න්‍යාසයේ ඒකීය අගය වියෝජනය (SVD) හරහා ද එය සිදු කළ හැකිය . එය ක්‍රියාත්මක වන්නේ කෙසේද? මෙම ප්‍රවේශයන් දෙක අතර ඇති සම්බන්ධය කුමක්ද? SVD සහ PCA අතර සම්බන්ධතාවය කුමක්ද?X

නැතහොත් වෙනත් වචන වලින් කිවහොත්, මානයන් අඩු කිරීම සිදු කිරීම සඳහා දත්ත අනුකෘතියේ SVD භාවිතා කරන්නේ කෙසේද?


8
මම නිතර අසන පැන විලාසිතාවේ ප්‍රශ්නය මගේම පිළිතුරක් සමඟ ලියා තැබුවෙමි, මන්ද එය නිතර නිතර විවිධ ස්වරූපයෙන් අසනු ලබන නමුත් කැනොනිකල් නූල් නොමැති බැවින් අනුපිටපත් වැසීම දුෂ්කර ය. කරුණාකර මෙටා ත්‍රෙඩ් එකේ මෙටා අදහස් දක්වන්න .
amoeba


2
පීසීඒ තවත් SVD මත පදනම් වූ ශිල්පීය ක්‍රම කිහිපයක් ලෙස සලකනු ලබන මෙහි වැඩිදුර සබැඳි සහිත විශිෂ්ට හා සවිස්තරාත්මක ඇමීබා පිළිතුරට අමතරව මෙය පරීක්ෂා කිරීමට මම නිර්දේශ කරමි . එහි සාකච්ඡා තෑගි වීජ ගණිතය පාහේ පමණක් සුළු වෙනසක් සමග amoeba ගේ සමාන එහි කතාව, පීසීඒ විස්තර වන්නේ, svd විසංයෝජනය ගැන ගිය [හෝX/X/n ] වෙනුවට X- සහසංයුජ අනුකෘතියේ eigendecomposition හරහා සිදු කරන ලද PCA හා සම්බන්ධ වන බැවින් එය පහසුය. X/n1X
ttnphns

PCA යනු SVD හි විශේෂ අවස්ථාවකි. PCA සඳහා දත්ත සාමාන්‍යකරණය කළ, එකම ඒකකයක් අවශ්‍ය වේ. PCA හි අනුකෘතිය nxn වේ.
ඕර්වර් කෝර්වර්

R ඕර්වර්කෝර්වර්: ඔබ කතා කරන්නේ කුමන nxn න්‍යාසය ගැනද?
Cbhihe

Answers:


460

දත්ත න්යාසය ඉඩ විය n × පි ප්රමාණය, එහිදී n සාම්පල හා සංඛ්යාව වේ පි විචල්ය සංඛ්යාව වේ. එය කේන්ද්‍රගත වී ඇතැයි අපි සිතමු , එනම් තීරු මාධ්‍යයන් අඩු කර ඇති අතර දැන් එය බිංදුවට සමාන වේ.Xn×pnp

එවිට covariance න්යාසය සී මගින් ලබා දෙන C = XX / ( n - 1 ) . එය සමමිතික අනුකෘතියක් වන අතර එය විකර්ණකරණය කළ හැකිය: C = V L V , මෙහි V යනු ඊජෙන්වෙක්ටර් වල අනුකෘතියකි (සෑම තීරුවක්ම ඊජෙන්වෙක්ටර් වේ) සහ L යනු විකර්ණ මත අඩු වන අනුපිළිවෙලෙහි eigenvalues λ i සහිත විකර්ණ අනුකෘතියකි. . ඊජෙන්වෙක්ටර්ස් ප්‍රධාන අක්ෂ හෝ ප්‍රධාන දිශාවන් ලෙස හැඳින්වේp×පිසීC=XX/(n1)

C=Vඑල්V,
වීඑල්λමමදත්ත වල. ප්‍රධාන අක්ෂවල දත්ත ප්‍රක්ෂේපණය කිරීම ප්‍රධාන සංරචක ලෙස හැඳින්වේ, එය PC ලකුණු ලෙසද හැඳින්වේ ; මේවා නව, පරිණාමිත, විචල්‍යයන් ලෙස දැකිය හැකිය. මෙම ප්රධාන අංගයක් -th මගින් ලබා දෙන j ක -th තීරුව X V . නව පළාත් සභා අවකාශයේ i -th දත්ත ලක්ෂ්‍යයේ ඛණ්ඩාංක X V හි i -th පේළිය මඟින් දෙනු ලැබේ .jjxවීමමමමxවී

අපි දැන් හි ඒකීය අගය වියෝජනය සිදු කරන්නේ නම් , අපි X = U S V dec වියෝජනය ලබා ගනිමු , එහිදී U ඒකීය අනුකෘතියක් වන අතර S යනු ඒකීය අගයන්හි විකර්ණ අනුකෘතිය s i . මෙතැන් සිට කෙනෙකුට පහසුවෙන් දැක ගත හැකිය C = V S UU S V/ ( n - 1 ) = V S 2x

x=යූඑස්වී,
යූඑස්sමමඑනම් නිවැරදි ඒකීය දෛශිකVප්‍රධාන දිශාවන් වන අතර ඒකීය අගයන්λi=s 2 i /(n-1)හරහා සහසංයුජ අනුකෘතියේ සමාන අගයන්ට සම්බන්ධ වේ. විදුහල්පති සංරචක විසින් ලබා දෙනු ලබනXV=USVV=US.
සී=වීඑස්යූයූඑස්වී/(n-1)=වීඑස්2n-1වී,
වීλමම=sමම2/(n-1)xවී=යූඑස්වීවී=යූඑස්

සාරාංශ ගත කිරීමට:

  1. නම් , පසුව තීරු V ප්රධාන දිශාවන් / අක්ෂ.x=යූඑස්වීවී
  2. තීරු ප්‍රධාන සංරචක වේ ("ලකුණු").යූඑස්
  3. ඒකීය අගයන් හරහා සහසංයුජ අනුකෘතියේ සමාන අගයන්ට සම්බන්ධ වේ . Eigenvalues λ i අදාළ පළාත් සභා වල විචල්‍යතාවයන් පෙන්වයි.λමම=sමම2/(n-1)λමම
  4. ප්‍රමිතිගත ලකුණු ලබා දෙන්නේ col තීරු මගිනිහා පැටවීම තීරු විසින් ලබා දී ඇතVඑස්/n1U . උදා: බලන්නමෙතනහාමෙහි"පැටවීම" ප්රධාන දිශාවන් සමඟ පටලවා නොගත යුත්තේ ඇයි සඳහා.VS/n1
  5. ඉහත සඳහන් කරුණු නිවැරදි වන්නේ කේන්ද්‍රගත වුවහොත් පමණි . Xසහසංයුජ අනුකෘතිය ට සමාන වන්නේ එවිට පමණි .XX/(n1)
  6. ඉහත නිවැරදි වන්නේ පේළි වල සාම්පල සහ තීරු වල විචල්‍යයන් සහිත සඳහා පමණි . විචල්යයන් පේළි හා සාම්පල තීරුවල තිබේ නම්, U සහ V හුවමාරු අර්ථ නිරූපණයන්.XUV
  7. සහසම්බන්ධිත අනුකෘතියක් මත (සහසංයුජ අනුකෘතියක් වෙනුවට) PCA සිදු කිරීමට යමෙකුට අවශ්‍ය නම්, තීරු කේන්ද්‍රගත වූවා පමණක් නොව, ප්‍රමිතිගත කළ යුතුය, එනම් ඒවායේ සම්මත අපගමනයන් මගින් බෙදනු ලැබේ.X
  8. සිට දත්ත dimensionality අඩු කිරීමට කිරීමට k < p , තේරීම් k පළමු තීරු U , සහ K × k ක ඉහළ වම් කොටස එස් . ඔවුන්ගේ නිෂ්පාදනය U k S k යනු පළමු k PC අඩංගු අත්‍යවශ්‍ය n × k න්‍යාසයයි .pk<pkUk×kSUkSkn×kk
  9. පළමු පළාත් සභා අනුරූපී අක්ෂ මගින් තවදුරටත් ගුණ කිරීමෙන් V k අස්වැන්න X k = U k S k V k න්‍යාසය මුල් n × p ප්‍රමාණය ඇති නමුත් පහළ ශ්‍රේණියේ ( k ශ්‍රේණියේ ) වේ. මෙම න්යාසයෙන් X k සපයන හා ප්රතිසංස්කරණ පළමු සිට මුල් දත්ත k පරිගණක. එය අවම ප්‍රතිසංස්කරණ දෝෂයක් ඇත, මගේ පිළිතුර මෙතැනින් බලන්න .kVkXk=UkSkVkn×pkXkk
  10. දැඩි කතා, වේ n × n විශාලත්වය සහ V වේ පි × පි ප්රමාණය. කෙසේ වෙතත්, n > p නම් U හි අවසාන n - p තීරු අත්තනෝමතික වේ (සහ S හි අනුරූප පේළි නියත ශුන්‍ය වේ); එක් එහෙයින් භාවිතා කළ යුතු ආර්ථිකය ප්රමාණය (හෝ තුනී ) නැවත එම SVD Un × පි ද පලක් තීරු පහත වැටේ, ප්රමාණය. විශාල n p සඳහා න්‍යාසය යූUn×nVp×pn>pnpUSUn×pnpUඑසේ නොමැතිනම් අනවශ්‍ය ලෙස විශාල වනු ඇත. හි ප්‍රතිවිරුද්ධ තත්වයකට ද මෙය අදාළ වේ .np

වැඩිදුර සබැඳි

භ්‍රමණය වන PCA සජීවිකරණය


ප්‍රශ්නෝත්තර දෙකටම +1. බෙදා ගැනීමට ස්තූතියි. මට එක ප්‍රශ්නයක් තිබේ: දත්ත න්‍යාසය මුලින් කේන්ද්‍රගත වී ඇතැයි ඔබ සිතිය යුත්තේ ඇයි?
ඇන්ටොයින්

5
@Antoine, covariance න්යාසය නිර්වචනය කිරීමයි සමාන , කෝණික වරහන් සාමාන්ය අගය දැක්වීමට එහිදී. සියලු නම් x i එක් අනුකෘතියක පේළි ලෙස එකමත ඇත X , පසුව මෙම ප්රකාශනය සමාන වේ ( X - ˉ X ) ( X - ˉ X ) / ( n - 1 ) . X කේන්ද්‍රගත වී ඇත්නම් එය සරල කරයි(xix¯)(xix¯)xiX(XX¯)(XX¯)/(n1)X . විචලනය ගැන සිතන්න; එය සමාන ය( x i - ˉ x ) 2 . නමුත් ˉ x = 0 (එනම් දත්ත කේන්ද්‍රගත වී තිබේ නම්), එය හුදෙක් x 2 i හි සාමාන්‍ය අගයයි. XX/(n1)(xix¯)2x¯=0xi2
amoeba

2
SVD විසින් PCA සඳහා කේත සාම්පලයක්: stackoverflow.com/questions/3181593/…
සුභවාදී

2
@amoeba ඔව්, නමුත් ඇයි එය භාවිතා කරන්නේ? එසේම, සඳහා එකම හරය භාවිතා කළ හැකිද? ප්රශ්නය මම එහිදී සූත්ර දකින වේ λ i = s 2 i සහ ඔවුන් භාවිතා කරන ආකාරය, තේරුම් ගැනීමට උත්සාහ? Sλi=si2
ඩිම්ස්

1
@sera ඔබේ න්‍යාසය මාරු කර ඔබගේ ගැටලුවෙන් මිදෙන්න. ඔබ ව්‍යාකූල වනු ඇත්තේ වෙනත් ආකාරයකින් පමණි.
amoeba

24

මම ඇමයිබාගේ පිළිතුර සමඟ පයිතන් සහ නැම්පි ස්නිපටයක් ලියා ඇති අතර එය යමෙකුට ප්‍රයෝජනවත් වේ නම් මම එය මෙහි තබමි. අදහස් බොහෝ දුරට ගනු ලබන්නේ @ ඇමීබාගේ පිළිතුරෙනි.

import numpy as np
from numpy import linalg as la
np.random.seed(42)


def flip_signs(A, B):
    """
    utility function for resolving the sign ambiguity in SVD
    http://stats.stackexchange.com/q/34396/115202
    """
    signs = np.sign(A) * np.sign(B)
    return A, B * signs


# Let the data matrix X be of n x p size,
# where n is the number of samples and p is the number of variables
n, p = 5, 3
X = np.random.rand(n, p)
# Let us assume that it is centered
X -= np.mean(X, axis=0)

# the p x p covariance matrix
C = np.cov(X, rowvar=False)
print "C = \n", C
# C is a symmetric matrix and so it can be diagonalized:
l, principal_axes = la.eig(C)
# sort results wrt. eigenvalues
idx = l.argsort()[::-1]
l, principal_axes = l[idx], principal_axes[:, idx]
# the eigenvalues in decreasing order
print "l = \n", l
# a matrix of eigenvectors (each column is an eigenvector)
print "V = \n", principal_axes
# projections of X on the principal axes are called principal components
principal_components = X.dot(principal_axes)
print "Y = \n", principal_components

# we now perform singular value decomposition of X
# "economy size" (or "thin") SVD
U, s, Vt = la.svd(X, full_matrices=False)
V = Vt.T
S = np.diag(s)

# 1) then columns of V are principal directions/axes.
assert np.allclose(*flip_signs(V, principal_axes))

# 2) columns of US are principal components
assert np.allclose(*flip_signs(U.dot(S), principal_components))

# 3) singular values are related to the eigenvalues of covariance matrix
assert np.allclose((s ** 2) / (n - 1), l)

# 8) dimensionality reduction
k = 2
PC_k = principal_components[:, 0:k]
US_k = U[:, 0:k].dot(S[0:k, 0:k])
assert np.allclose(*flip_signs(PC_k, US_k))

# 10) we used "economy size" (or "thin") SVD
assert U.shape == (n, p)
assert S.shape == (p, p)
assert V.shape == (p, p)

23

මට PCA සමඟ ආරම්භ කිරීමට ඉඩ දෙන්න. ඔබට d සංඛ්‍යා (හෝ මාන) වලින් සමන්විත දත්ත ලක්ෂ්‍ය n ඇති බව සිතමු. ඔබ මෙම දත්ත මධ්යස්ථානය නම් (මධ්යන්ය දත්ත පෙන්නුම් අඩු එක් එක් දත්ත දෛශික සිට x i ) ඔබ න්යාසය කිරීමට දත්ත ගොඩගසන්න හැකිμxi

X=(x1TμTx2TμTxnTμT).

සහසංයුජ අනුකෘතිය

S=1n1i=1n(xiμ)(xiμ)T=1n1XTX

S

S=VΛVT=i=1rλiviviT,

viiλiiSi

අහඹු ලෙස ජනනය කරන ලද ගෝස්සියානු දත්ත කට්ටලයක PCA

A=(1201)uivi

2x2 උදාහරණයක් සඳහා SVD

ASuivi

XA=X

X=i=1rσiuivjT,

{ui}{vi}Svi

ui=1(n1)λiXvi,

σi

σi2=(n1)λi.

uiXuiXiviX

මෙම දීර් article ලිපියෙන් මම PCA සහ SVD අතර සම්බන්ධතාවයේ තවත් විස්තර සහ ප්‍රතිලාභ වෙත යන්නෙමි .


ඔබේ පිළිතුරු දුන් ඇන්ඩ්‍රේට ස්තූතියි. කුඩා යතුරු ලියනය නිවැරදි කිරීම දෙකක් පමණි: 1. අවසාන ඡේදයේ ඔබ වම සහ දකුණ ව්‍යාකූල කරයි. 2. X සඳහා (ප්‍රාග්ධන) සූත්‍රයේ, ඔබ භාවිතා කරන්නේ v_i වෙනුවට v_j ය.
ඇලොන්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.