基于SVD的Python/R中的矩阵逼近与时间序列预测

2024-06-16 11:27:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个excel文件,它有126行和5列数字,我必须使用这些数据和SVD方法来预测5-10行数据。我使用numpy在Python中成功地实现了SVD:

将numpy作为np导入 从numpy导入genfromtxt

my_data = genfromtxt('data.csv', delimiter=',')

U, s, V = np.linalg.svd(my_data)

print ("U:")
print (U)
print ("\nSigma:")
print (s)
print ("\nVT:")
print (V)

哪些输出:

^{pr2}$

但我不知道如何使用这些数据来规避我的价值观。我使用这个链接http://datascientistinsights.com/2013/02/17/single-value-decomposition-a-golfers-tutotial/作为引用,但那是在R中。最后他们使用R来预测值,但在R中使用这个命令:

approxGolf_1 <- golfSVD$u[,1] %*% t(golfSVD$v[,1]) * golfSVD$d[1]

以下是指向整个R代码的IdeOne链接:http://ideone.com/Yj3y6j

我不太熟悉R,所以有人能告诉我Python中是否有类似于上面命令的函数,或者解释一下这个命令到底在做什么?在

谢谢。在


Tags: 文件数据命令numpycomhttpdata链接
1条回答
网友
1楼 · 发布于 2024-06-16 11:27:51

我将使用您链接的高尔夫球场示例数据来设置阶段:

import numpy as np
A=np.matrix((4,4,3,4,4,3,4,2,5,4,5,3,5,4,5,4,4,5,5,5,2,4,4,4,3,4,5))
A=A.reshape((3,9)).T

这将为您提供原始的9行3列表格,其中包括3名球员的9个洞得分:

^{pr2}$

现在,奇异值分解:

U, s, V = np.linalg.svd(A)

最重要的是要研究奇异值的向量s

array([ 21.11673273,   2.0140035 ,   1.423864  ])

结果表明,第一个值比其他值大得多,说明只有一个值的对应的Truncated SVD很好地代表了原始矩阵{}。要计算这个表示,需要将U的第1列乘以V的第一行,再乘以第一个奇异值。这是R中最后引用的命令的作用。在Python中也是这样:

U[:,0]*s[0]*V[0,:]

这个产品的结果是:

matrix([[ 3.95411864,  4.64939923,  4.34718814],
        [ 4.28153222,  5.03438425,  4.70714912],
        [ 2.42985854,  2.85711772,  2.67140498],
        [ 3.97540054,  4.67442327,  4.37058562],
        [ 3.64798696,  4.28943826,  4.01062464],
        [ 3.69694905,  4.3470097 ,  4.06445393],
        [ 3.34185528,  3.92947728,  3.67406114],
        [ 3.09108399,  3.63461111,  3.39836128],
        [ 4.5599837 ,  5.36179782,  5.0132808 ]])

关于向量因子U[:,0]V[0,:]:形象地说,U可以看作是一个洞的难度的表示,而{}则编码玩家的力量。在

相关问题 更多 >