forked from BIDData/BIDMach
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtestsfa.ssc
executable file
·68 lines (58 loc) · 1.59 KB
/
testsfa.ssc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
:silent
val dir="../data/netflix/"
//val a0=loadSMat(dir+"train.smat.lz4")
//val ta0=loadSMat(dir+"test.smat.lz4")
val a0=loadSMat(dir+"newtrain.smat.lz4")
val ta0=loadSMat(dir+"newtest.smat.lz4")
val rebuild = false
val (a, ta) = if (rebuild) {
val (ii, jj, vv) = find3(a0+ta0);
val ir = rand(ii.length, 1) < 0.1f;
val itrain = find(ir == 0);
val itest = find(ir);
val a = sparse(ii(itrain),jj(itrain),vv(itrain),a0.nrows,a0.ncols);
val ta = sparse(ii(itest),jj(itest),vv(itest),a0.nrows,a0.ncols);
saveSMat(dir+"newtrain.smat.lz4", a)
saveSMat(dir+"newtest.smat.lz4", ta)
(a, ta)
} else {
(a0, ta0)
}
val d = 128
val fact = zeros(d, a.ncols);
val (nn,opts) = SFA.learner(a,fact,d)
// good values for movielens 10m
opts.lambdam = 5f
opts.lambdau = 5f
opts.uiter = 8
opts.npasses = 5
opts.batchSize = 2000
// good values for netflix
opts.batchSize = 1000
opts.lambdau = 1f;
opts.regumean = 0.1f;
opts.lambdam = 0.025f;
opts.regmmean = 0.000f;
opts.uiter = 8
opts.startup = 10
opts.npasses = 5
opts.evalStep = 101
opts.doUsers = true
opts.lrate = 0.03
opts.uconvg = 1e-3f
//opts.weightByUser = true
//opts.traceConverge = true
opts.autoReset = false
//opts.useDouble = true
nn.train
val model = nn.model.asInstanceOf[SFA]
val mm = FMat(nn.modelmat)
val iavg = FMat(nn.modelmats(1))
val tanz = ta > 0;
val preds = DDS(mm, fact, tanz) + iavg
min(preds.contents, 5f, preds.contents)
max(preds.contents, 1f, preds.contents)
val diff = DMat(preds.contents - ta.contents)
val rmse = sqrt((diff ^* diff) / diff.length).dv
println("rmse = %f" format rmse);
:silent