使用tensor-box,在matlab中實現cp分解
1、X = sptenrand([5 4 3], 10)
//隨機生成一個稀疏三維張量5*4* 3,其中有10條數據
X is a sparse tensor of size 5 x 4 x 3 with 10 nonzeros
(1,4,1) 0.4966
(2,2,3) 0.8998
(3,2,3) 0.8216
(3,3,1) 0.6449
(3,3,3) 0.8180
(3,4,1) 0.6602
(4,1,2) 0.3420
(4,1,3) 0.2897
(5,2,2) 0.3412
(5,3,2) 0.5341
2、P = parafac_als(X,2)
//用ALS交替最小二乘來分解張量,分解參數R=2,即分解為兩個秩一張量;其中分解參數最多可以設置為min(5*4;5* 3;4*3)
CP_ALS:
Iter 1: fit = 3.219563e-001 fitdelta = 3.2e-001
Iter 2: fit = 3.645517e-001 fitdelta = 4.3e-002
Iter 3: fit = 3.732887e-001 fitdelta = 8.7e-003
Iter 4: fit = 3.809608e-001 fitdelta = 7.7e-003
Iter 5: fit = 4.021826e-001 fitdelta = 2.1e-002
Iter 6: fit = 4.427524e-001 fi