In [65]:
import numpy as np
import pandas as pd
from matplotlib import pylab as plt
%matplotlib inline

In [182]:
D = 4
N = 180

X = np.mat(np.random.randn(D/2,N))
X = np.vstack([X, X + 4])

In [102]:
U,Sig,V = np.linalg.svd(X, full_matrices=True)
# print(X)
# print(U)
# print(np.diag(Sig))
# print(V)

In [181]:
# a = U[:,0]
# print U[:,0]
# print "s", Sig[0]
# print 'V',V[0,:]
# w = Sig[0] *  V[0,:]
# print 'w', w

# Xhat = U[:,:2] * Sig[0:2] * V[0:2,:]
# print Xhat

# plt.plot(X[0,:], X[1,:],'x')
# plt.plot(Xhat[0,:], Xhat[1,:],'o')
# ax = plt.gca()
# ax.set_aspect(1)
# plt.show()

In [185]:
df = pd.read_csv("data/iris.txt", delimiter=" ")
X = np.mat(df.iloc[:, [0, 1 ,2, 3]])
print X.shape


(150, 4)

In [186]:
U, S, V = np.linalg.svd(X, full_matrices=True)
S = np.diag(S)
print "U: ", U.shape
print "S: ", S.shape
print "V: ", V.shape


U:  (150, 150)
S:  (4, 4)
V:  (4, 4)

In [192]:
K = 2  # number of reduced dimentions
X_hat = U[:,:k] * S[:K,:K] * V[:K,]
print "X_hat: ", X_hat.shape
print X_hat


X_hat:  (150, 4)
[[ 5.09945346  3.50050812  1.40094556  0.19840569]
 [ 4.74974728  3.19172985  1.46006954  0.25494146]
 [ 4.69047924  3.2108907   1.30863935  0.1915549 ]
 [ 4.61834831  3.08439659  1.46266616  0.26731753]
 [ 5.07896131  3.5005194   1.36352353  0.18323972]
 [ 5.5300156   3.7270409   1.67511126  0.28560814]
 [ 4.73513024  3.22346842  1.36171979  0.21173807]
 [ 5.0090388   3.3931523   1.47838624  0.24111369]
 [ 4.38266777  2.92709982  1.38778914  0.25356965]
 [ 4.80937785  3.22911564  1.48446275  0.26088223]
 [ 5.39972928  3.70190802  1.49410632  0.21490986]
 [ 4.89813198  3.28580776  1.5184049   0.26865573]
 [ 4.68239571  3.1600364   1.40873117  0.23748098]
 [ 4.3045681   2.99693565  1.08755409  0.12453562]
 [ 5.73556855  4.0680786   1.28006801  0.08954214]
 [ 5.90774958  4.11819888  1.48109876  0.16571941]
 [ 5.45688065  3.80359406  1.36876673  0.15338963]
 [ 5.10220976  3.48809845  1.43400019  0.21310987]
 [ 5.67694201  3.82764554  1.71604614  0.29158251]
 [ 5.25280287  3.60130338  1.45317145  0.20893548]
 [ 5.30398738  3.53128822  1.70469346  0.31824813]
 [ 5.21145604  3.5447793   1.50536436  0.23604934]
 [ 4.74744524  3.40066007  0.98404405  0.03999603]
 [ 5.07436731  3.31763542  1.76814442  0.36650147]
 [ 4.95298319  3.22839289  1.74816329  0.36781961]
 [ 4.85091003  3.19755639  1.63152554  0.32380701]
 [ 5.03283513  3.34919467  1.62108163  0.30357669]
 [ 5.18233248  3.52547296  1.49581543  0.23421661]
 [ 5.11994561  3.50049684  1.43836759  0.21357166]
 [ 4.74533045  3.15347583  1.53839774  0.29071878]
 [ 4.7658226   3.15346455  1.57581977  0.30588474]
 [ 5.2729325   3.54474546  1.61763045  0.28154725]
 [ 5.44419493  3.80256906  1.34793106  0.14505439]
 [ 5.66655645  3.98572146  1.34011248  0.12256316]
 [ 4.80937785  3.22911564  1.48446275  0.26088223]
 [ 4.86598133  3.36233837  1.28690443  0.16676916]
 [ 5.33955083  3.69605891  1.39749438  0.17637624]
 [ 4.80937785  3.22911564  1.48446275  0.26088223]
 [ 4.40848715  2.99035252  1.29206472  0.20810535]
 [ 5.07363407  3.43725543  1.49666998  0.24386999]
 [ 5.01933074  3.46313362  1.33913032  0.17729895]
 [ 4.16711685  2.71324513  1.47737112  0.31243354]
 [ 4.4966934   3.07858133  1.25378813  0.18328601]
 [ 5.08245084  3.36848973  1.66805259  0.32057539]
 [ 5.32869412  3.51234054  1.7925706   0.35585818]
 [ 4.6879083   3.13521705  1.47484043  0.26688935]
 [ 5.26833031  3.59457476  1.49670295  0.22728592]
 [ 4.6441677   3.14764929  1.36694174  0.22185323]
 [ 5.335134    3.65780489  1.47582259  0.21215356]
 [ 4.94665193  3.36817619  1.4209384   0.22046874]
 [ 6.83089327  3.42564462  4.72974932  1.55525724]
 [ 6.40951042  3.18689278  4.49992925  1.4873144 ]
 [ 6.76151864  3.28674083  4.91683076  1.64572406]
 [ 5.33429352  2.51344581  4.05858032  1.37951329]
 [ 6.31597694  3.03539999  4.67135229  1.57276401]
 [ 5.77541839  2.72653263  4.382387    1.48825065]
 [ 6.42834204  3.1362178   4.64873411  1.55296187]
 [ 4.85456992  2.46413852  3.2944728   1.07507089]
 [ 6.41916275  3.14843687  4.60438848  1.53370227]
 [ 5.30139274  2.56432267  3.88364443  1.30325527]
 [ 4.77932018  2.29350744  3.54248196  1.19357513]
 [ 5.94347657  2.93556321  4.21702875  1.39918839]
 [ 5.60489789  2.72707604  4.06997342  1.36159188]
 [ 6.11722639  2.89637328  4.62261055  1.5676796 ]
 [ 5.59037259  2.89878852  3.65568978  1.17559304]
 [ 6.5381531   3.30663571  4.464278    1.46023415]
 [ 5.80454195  2.74583897  4.39193593  1.49008338]
 [ 5.7145067   2.84030353  4.01430062  1.32708555]
 [ 5.83928862  2.65754248  4.65474469  1.60589854]
 [ 5.46329871  2.68973538  3.89589209  1.29498724]
 [ 6.14965413  2.87173326  4.73743284  1.61680936]
 [ 5.94238081  2.99863658  4.07259129  1.3340027 ]
 [ 6.10932822  2.75743565  4.92195808  1.70364432]
 [ 6.06761068  2.87707822  4.57563958  1.5506809 ]
 [ 6.23512098  3.11764549  4.33806261  1.42902579]
 [ 6.42945469  3.21841818  4.46513255  1.46988752]
 [ 6.54357395  3.14184246  4.84632114  1.63243797]
 [ 6.61202129  3.11046254  5.04209696  1.71508414]
 [ 6.01881994  2.87813706  4.48420917  1.51351824]
 [ 5.49610587  2.86691574  3.55563838  1.13841117]
 [ 5.33631657  2.62065614  3.82016051  1.27158599]
 [ 5.31527654  2.6522041   3.71051975  1.22382718]
 [ 5.68345182  2.85376076  3.92723761  1.29038467]
 [ 6.04307241  2.66266883  5.01505717  1.75136953]
 [ 5.67535139  2.65763272  4.35536845  1.48457079]
 [ 6.24209186  3.08629941  4.42157235  1.46617406]
 [ 6.59576061  3.23681116  4.72709102  1.57410221]
 [ 5.92419069  2.78971764  4.51119475  1.53378216]
 [ 5.72589441  2.84721148  4.01948215  1.3284565 ]
 [ 5.42249977  2.60167462  4.02030373  1.35469394]
 [ 5.53698155  2.58164553  4.27445534  1.45979859]
 [ 6.14304578  2.95962597  4.52688613  1.5222153 ]
 [ 5.65763243  2.79050807  4.02296203  1.33584897]
 [ 4.87506207  2.46412724  3.33189482  1.09023686]
 [ 5.61186877  2.69572997  4.15348315  1.39874015]
 [ 5.80601713  2.88458598  4.08129739  1.34956324]
 [ 5.7646703   2.8280619   4.13349031  1.3766771 ]
 [ 6.10593042  3.02943924  4.30149513  1.4235132 ]
 [ 4.97576868  2.64146437  3.11519821  0.98371412]
 [ 5.70228343  2.80308579  4.07604247  1.35603214]
 [ 6.6908373   2.77573297  5.94184547  2.1150097 ]
 [ 5.92215074  2.53723357  5.07765358  1.7899695 ]
 [ 7.04598122  3.06499173  5.9367256   2.08241771]
 [ 6.42199578  2.76269622  5.48067171  1.92950058]
 [ 6.64288211  2.8071016   5.78349167  2.04752949]
 [ 7.49694378  3.15153932  6.56424721  2.32758158]
 [ 5.13737197  2.19172572  4.42575047  1.56224605]
 [ 7.19593472  3.06975943  6.19961202  2.18844592]
 [ 6.54053186  2.72437452  5.78353209  2.0562737 ]
 [ 7.42278791  3.28586602  6.12557037  2.13564197]
 [ 6.59758961  3.05411779  5.14300292  1.76191939]
 [ 6.34628988  2.76357573  5.34052827  1.87261652]
 [ 6.77906044  3.00923552  5.57552986  1.94193031]
 [ 5.75382177  2.41163025  5.05411491  1.7936821 ]
 [ 5.98003535  2.51929961  5.22378842  1.85108075]
 [ 6.57783069  2.93450907  5.37705532  1.8693849 ]
 [ 6.57700572  2.91415517  5.42151477  1.88954887]
 [ 7.93540409  3.51700972  6.53906539  2.2788193 ]
 [ 7.44549036  2.93695061  6.95495176  2.50854881]
 [ 5.80151675  2.47364477  5.00110787  1.76565908]
 [ 6.97394203  3.07847153  5.77481854  2.01538489]
 [ 5.80325213  2.51900863  4.90183017  1.72064216]
 [ 7.48886025  3.10068502  6.66433904  2.37350766]
 [ 6.20580336  2.80843545  4.98284538  1.72293753]
 [ 6.88334201  3.05919903  5.65300352  1.96805425]
 [ 7.2087976   3.2154144   5.89415501  2.04929673]
 [ 6.16702747  2.82758502  4.86883722  1.67471694]
 [ 6.20892218  2.85257241  4.88886303  1.68019592]
 [ 6.45075682  2.72545592  5.61725762  1.9887791 ]
 [ 7.07851128  3.19028151  5.71315008  1.97859845]
 [ 7.18261569  3.09561506  6.11691641  2.15220682]
 [ 8.00423084  3.68745019  6.27976521  2.15575964]
 [ 6.45351311  2.71304625  5.65031225  2.00348329]
 [ 6.27820507  2.85150229  5.01771547  1.73252456]
 [ 6.14947066  2.59178545  5.3693006   1.90240026]
 [ 7.47563296  3.26651456  6.26570955  2.19447311]
 [ 6.65904917  2.90881021  5.58330802  1.95567733]
 [ 6.55651356  2.91416645  5.38409274  1.8743829 ]
 [ 6.12604316  2.82760758  4.79399316  1.644385  ]
 [ 6.8694751   3.11659134  5.49808918  1.89922231]
 [ 6.78512091  2.95287949  5.71385785  2.00393153]
 [ 6.82013648  3.14918687  5.33444004  1.8294668 ]
 [ 5.92215074  2.53723357  5.07765358  1.7899695 ]
 [ 6.94591423  2.99609182  5.90970706  2.07873785]
 [ 6.89436719  3.00956034  5.78522202  2.026871  ]
 [ 6.66512654  2.99772792  5.39359699  1.86941851]
 [ 6.13863714  2.68865867  5.13076272  1.79551569]
 [ 6.52766709  2.94675069  5.25786563  1.81979336]
 [ 6.55513012  2.91539334  5.3787974   1.87210759]
 [ 6.1162991   2.72608958  5.00546781  1.74079259]]

In [193]:
plt.plot(X[0,:], X[1,:], "x")
plt.plot(X_hat[0,:], X_hat[1,:], "ko")


Out[193]:
[<matplotlib.lines.Line2D at 0x10dc47a50>,
 <matplotlib.lines.Line2D at 0x10dd60110>,
 <matplotlib.lines.Line2D at 0x10dd60310>,
 <matplotlib.lines.Line2D at 0x10dd60410>]

In [191]:
k = 2  # choose K dimention, k <= N
U[:,:k] * (S[0:k,:k] * V[0:k,:])


Out[191]:
matrix([[ 5.09945346,  3.50050812,  1.40094556,  0.19840569],
        [ 4.74974728,  3.19172985,  1.46006954,  0.25494146],
        [ 4.69047924,  3.2108907 ,  1.30863935,  0.1915549 ],
        [ 4.61834831,  3.08439659,  1.46266616,  0.26731753],
        [ 5.07896131,  3.5005194 ,  1.36352353,  0.18323972],
        [ 5.5300156 ,  3.7270409 ,  1.67511126,  0.28560814],
        [ 4.73513024,  3.22346842,  1.36171979,  0.21173807],
        [ 5.0090388 ,  3.3931523 ,  1.47838624,  0.24111369],
        [ 4.38266777,  2.92709982,  1.38778914,  0.25356965],
        [ 4.80937785,  3.22911564,  1.48446275,  0.26088223],
        [ 5.39972928,  3.70190802,  1.49410632,  0.21490986],
        [ 4.89813198,  3.28580776,  1.5184049 ,  0.26865573],
        [ 4.68239571,  3.1600364 ,  1.40873117,  0.23748098],
        [ 4.3045681 ,  2.99693565,  1.08755409,  0.12453562],
        [ 5.73556855,  4.0680786 ,  1.28006801,  0.08954214],
        [ 5.90774958,  4.11819888,  1.48109876,  0.16571941],
        [ 5.45688065,  3.80359406,  1.36876673,  0.15338963],
        [ 5.10220976,  3.48809845,  1.43400019,  0.21310987],
        [ 5.67694201,  3.82764554,  1.71604614,  0.29158251],
        [ 5.25280287,  3.60130338,  1.45317145,  0.20893548],
        [ 5.30398738,  3.53128822,  1.70469346,  0.31824813],
        [ 5.21145604,  3.5447793 ,  1.50536436,  0.23604934],
        [ 4.74744524,  3.40066007,  0.98404405,  0.03999603],
        [ 5.07436731,  3.31763542,  1.76814442,  0.36650147],
        [ 4.95298319,  3.22839289,  1.74816329,  0.36781961],
        [ 4.85091003,  3.19755639,  1.63152554,  0.32380701],
        [ 5.03283513,  3.34919467,  1.62108163,  0.30357669],
        [ 5.18233248,  3.52547296,  1.49581543,  0.23421661],
        [ 5.11994561,  3.50049684,  1.43836759,  0.21357166],
        [ 4.74533045,  3.15347583,  1.53839774,  0.29071878],
        [ 4.7658226 ,  3.15346455,  1.57581977,  0.30588474],
        [ 5.2729325 ,  3.54474546,  1.61763045,  0.28154725],
        [ 5.44419493,  3.80256906,  1.34793106,  0.14505439],
        [ 5.66655645,  3.98572146,  1.34011248,  0.12256316],
        [ 4.80937785,  3.22911564,  1.48446275,  0.26088223],
        [ 4.86598133,  3.36233837,  1.28690443,  0.16676916],
        [ 5.33955083,  3.69605891,  1.39749438,  0.17637624],
        [ 4.80937785,  3.22911564,  1.48446275,  0.26088223],
        [ 4.40848715,  2.99035252,  1.29206472,  0.20810535],
        [ 5.07363407,  3.43725543,  1.49666998,  0.24386999],
        [ 5.01933074,  3.46313362,  1.33913032,  0.17729895],
        [ 4.16711685,  2.71324513,  1.47737112,  0.31243354],
        [ 4.4966934 ,  3.07858133,  1.25378813,  0.18328601],
        [ 5.08245084,  3.36848973,  1.66805259,  0.32057539],
        [ 5.32869412,  3.51234054,  1.7925706 ,  0.35585818],
        [ 4.6879083 ,  3.13521705,  1.47484043,  0.26688935],
        [ 5.26833031,  3.59457476,  1.49670295,  0.22728592],
        [ 4.6441677 ,  3.14764929,  1.36694174,  0.22185323],
        [ 5.335134  ,  3.65780489,  1.47582259,  0.21215356],
        [ 4.94665193,  3.36817619,  1.4209384 ,  0.22046874],
        [ 6.83089327,  3.42564462,  4.72974932,  1.55525724],
        [ 6.40951042,  3.18689278,  4.49992925,  1.4873144 ],
        [ 6.76151864,  3.28674083,  4.91683076,  1.64572406],
        [ 5.33429352,  2.51344581,  4.05858032,  1.37951329],
        [ 6.31597694,  3.03539999,  4.67135229,  1.57276401],
        [ 5.77541839,  2.72653263,  4.382387  ,  1.48825065],
        [ 6.42834204,  3.1362178 ,  4.64873411,  1.55296187],
        [ 4.85456992,  2.46413852,  3.2944728 ,  1.07507089],
        [ 6.41916275,  3.14843687,  4.60438848,  1.53370227],
        [ 5.30139274,  2.56432267,  3.88364443,  1.30325527],
        [ 4.77932018,  2.29350744,  3.54248196,  1.19357513],
        [ 5.94347657,  2.93556321,  4.21702875,  1.39918839],
        [ 5.60489789,  2.72707604,  4.06997342,  1.36159188],
        [ 6.11722639,  2.89637328,  4.62261055,  1.5676796 ],
        [ 5.59037259,  2.89878852,  3.65568978,  1.17559304],
        [ 6.5381531 ,  3.30663571,  4.464278  ,  1.46023415],
        [ 5.80454195,  2.74583897,  4.39193593,  1.49008338],
        [ 5.7145067 ,  2.84030353,  4.01430062,  1.32708555],
        [ 5.83928862,  2.65754248,  4.65474469,  1.60589854],
        [ 5.46329871,  2.68973538,  3.89589209,  1.29498724],
        [ 6.14965413,  2.87173326,  4.73743284,  1.61680936],
        [ 5.94238081,  2.99863658,  4.07259129,  1.3340027 ],
        [ 6.10932822,  2.75743565,  4.92195808,  1.70364432],
        [ 6.06761068,  2.87707822,  4.57563958,  1.5506809 ],
        [ 6.23512098,  3.11764549,  4.33806261,  1.42902579],
        [ 6.42945469,  3.21841818,  4.46513255,  1.46988752],
        [ 6.54357395,  3.14184246,  4.84632114,  1.63243797],
        [ 6.61202129,  3.11046254,  5.04209696,  1.71508414],
        [ 6.01881994,  2.87813706,  4.48420917,  1.51351824],
        [ 5.49610587,  2.86691574,  3.55563838,  1.13841117],
        [ 5.33631657,  2.62065614,  3.82016051,  1.27158599],
        [ 5.31527654,  2.6522041 ,  3.71051975,  1.22382718],
        [ 5.68345182,  2.85376076,  3.92723761,  1.29038467],
        [ 6.04307241,  2.66266883,  5.01505717,  1.75136953],
        [ 5.67535139,  2.65763272,  4.35536845,  1.48457079],
        [ 6.24209186,  3.08629941,  4.42157235,  1.46617406],
        [ 6.59576061,  3.23681116,  4.72709102,  1.57410221],
        [ 5.92419069,  2.78971764,  4.51119475,  1.53378216],
        [ 5.72589441,  2.84721148,  4.01948215,  1.3284565 ],
        [ 5.42249977,  2.60167462,  4.02030373,  1.35469394],
        [ 5.53698155,  2.58164553,  4.27445534,  1.45979859],
        [ 6.14304578,  2.95962597,  4.52688613,  1.5222153 ],
        [ 5.65763243,  2.79050807,  4.02296203,  1.33584897],
        [ 4.87506207,  2.46412724,  3.33189482,  1.09023686],
        [ 5.61186877,  2.69572997,  4.15348315,  1.39874015],
        [ 5.80601713,  2.88458598,  4.08129739,  1.34956324],
        [ 5.7646703 ,  2.8280619 ,  4.13349031,  1.3766771 ],
        [ 6.10593042,  3.02943924,  4.30149513,  1.4235132 ],
        [ 4.97576868,  2.64146437,  3.11519821,  0.98371412],
        [ 5.70228343,  2.80308579,  4.07604247,  1.35603214],
        [ 6.6908373 ,  2.77573297,  5.94184547,  2.1150097 ],
        [ 5.92215074,  2.53723357,  5.07765358,  1.7899695 ],
        [ 7.04598122,  3.06499173,  5.9367256 ,  2.08241771],
        [ 6.42199578,  2.76269622,  5.48067171,  1.92950058],
        [ 6.64288211,  2.8071016 ,  5.78349167,  2.04752949],
        [ 7.49694378,  3.15153932,  6.56424721,  2.32758158],
        [ 5.13737197,  2.19172572,  4.42575047,  1.56224605],
        [ 7.19593472,  3.06975943,  6.19961202,  2.18844592],
        [ 6.54053186,  2.72437452,  5.78353209,  2.0562737 ],
        [ 7.42278791,  3.28586602,  6.12557037,  2.13564197],
        [ 6.59758961,  3.05411779,  5.14300292,  1.76191939],
        [ 6.34628988,  2.76357573,  5.34052827,  1.87261652],
        [ 6.77906044,  3.00923552,  5.57552986,  1.94193031],
        [ 5.75382177,  2.41163025,  5.05411491,  1.7936821 ],
        [ 5.98003535,  2.51929961,  5.22378842,  1.85108075],
        [ 6.57783069,  2.93450907,  5.37705532,  1.8693849 ],
        [ 6.57700572,  2.91415517,  5.42151477,  1.88954887],
        [ 7.93540409,  3.51700972,  6.53906539,  2.2788193 ],
        [ 7.44549036,  2.93695061,  6.95495176,  2.50854881],
        [ 5.80151675,  2.47364477,  5.00110787,  1.76565908],
        [ 6.97394203,  3.07847153,  5.77481854,  2.01538489],
        [ 5.80325213,  2.51900863,  4.90183017,  1.72064216],
        [ 7.48886025,  3.10068502,  6.66433904,  2.37350766],
        [ 6.20580336,  2.80843545,  4.98284538,  1.72293753],
        [ 6.88334201,  3.05919903,  5.65300352,  1.96805425],
        [ 7.2087976 ,  3.2154144 ,  5.89415501,  2.04929673],
        [ 6.16702747,  2.82758502,  4.86883722,  1.67471694],
        [ 6.20892218,  2.85257241,  4.88886303,  1.68019592],
        [ 6.45075682,  2.72545592,  5.61725762,  1.9887791 ],
        [ 7.07851128,  3.19028151,  5.71315008,  1.97859845],
        [ 7.18261569,  3.09561506,  6.11691641,  2.15220682],
        [ 8.00423084,  3.68745019,  6.27976521,  2.15575964],
        [ 6.45351311,  2.71304625,  5.65031225,  2.00348329],
        [ 6.27820507,  2.85150229,  5.01771547,  1.73252456],
        [ 6.14947066,  2.59178545,  5.3693006 ,  1.90240026],
        [ 7.47563296,  3.26651456,  6.26570955,  2.19447311],
        [ 6.65904917,  2.90881021,  5.58330802,  1.95567733],
        [ 6.55651356,  2.91416645,  5.38409274,  1.8743829 ],
        [ 6.12604316,  2.82760758,  4.79399316,  1.644385  ],
        [ 6.8694751 ,  3.11659134,  5.49808918,  1.89922231],
        [ 6.78512091,  2.95287949,  5.71385785,  2.00393153],
        [ 6.82013648,  3.14918687,  5.33444004,  1.8294668 ],
        [ 5.92215074,  2.53723357,  5.07765358,  1.7899695 ],
        [ 6.94591423,  2.99609182,  5.90970706,  2.07873785],
        [ 6.89436719,  3.00956034,  5.78522202,  2.026871  ],
        [ 6.66512654,  2.99772792,  5.39359699,  1.86941851],
        [ 6.13863714,  2.68865867,  5.13076272,  1.79551569],
        [ 6.52766709,  2.94675069,  5.25786563,  1.81979336],
        [ 6.55513012,  2.91539334,  5.3787974 ,  1.87210759],
        [ 6.1162991 ,  2.72608958,  5.00546781,  1.74079259]])

In [ ]: