userId,movieId,rating,timestamp
1,2,4.5,964982703
1,3,2.0,964981247
2,1,4.0,964982224
2,3,3.5,964983815
3,2,5.0,964982931
3,4,2.0,964982400
4,2,3.5,964980868
4,3,4.0,964982176
4,4,1.0,964984041
对应于评分矩阵
{{0, 4.5, 2, 0},
{4.0, 0, 3.5, 0},
{0, 5.0, 0, 2.0},
{0, 3.5, 4.0, 1.0}}
model = ALS()
model.fit(X, k=2, max_iter=10)
## ===>
user_matrix =
[[0.7570282336382094, 0.03844973056986965, 0.8341276635923996, 0.7159946957782793],
[0.2987763898981603, 1.2236650397020115, -0.09214284357731845, 0.661286003351013]]
item_matrix =
[[-0.9352925817978953, 5.779445419172115, 1.301780265376408, 1.4251036233547738],
[2.7179214250950294, -0.33085416701657533, 3.272648111651669, -0.2344265756021138]]
user_matrix.transpose x item_matrix =
[[0.10400786028337483, 4.276351943480331, 1.9632744030892986, 1.0088025527850888],
[3.2898636807717296, -0.1826365582074784, 4.054678181939848, -0.23206475458923115],
[-1.0305904247583555, 4.851281148112146, 0.7842998282335908, 1.2103190870120526],
[1.1276588690551161, 3.919263034868889, 3.0962241552067207, 0.865343621997239]]
R = {{0, 4.5, 2, 0}, {4.0, 0, 3.5, 0}, {0, 5.0, 0, 2.0}, {0, 3.5, 4.0,1.0}};
X = RandomReal[1, {4, 2}]
(* {{0.242376,0.511595}, {0.661005,0.105123}, {0.00835057,0.137917}, {0.980405,0.334949}} *)
Do[
(* compute Y *)
Xt = Transpose[X];
Y = Transpose[LinearSolve[Xt.X, Xt.R]];
(* compute X *)
Yt = Transpose[Y];
X = Transpose[LinearSolve[Yt.Y, Yt.Transpose[R]]],
{i, 10}
]