cmfrec 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/cmfrec/data.rb +1 -1
- data/lib/cmfrec/ffi.rb +0 -1
- data/lib/cmfrec/recommender.rb +18 -19
- data/lib/cmfrec/version.rb +1 -1
- data/lib/cmfrec.rb +3 -3
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d530b650bba045d26a7c683ca7c8b8e7321c2043a8e80556c3c7c865a441432
|
4
|
+
data.tar.gz: d49736337135bc7b956a96f631ad54b88b354d3fbbe91e925962ba15fbd3735d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36d8fcfd4cd87539f728afd2d927bc8c4ea9a75a437bc32617dabb416ba9b322dcdc135855fa7144615955b42013029ada465c6209c38f9beca2e77f2d1059e9
|
7
|
+
data.tar.gz: c21ca152c2ec3edcf134ac9c915ca8ee3bd06c7ebd2c09e95bce592e9d5d64ac1dbbb8f7791756377b7febc899113ce255b4a8054b843fc1a6042ea50b8acaa3
|
data/CHANGELOG.md
CHANGED
data/lib/cmfrec/data.rb
CHANGED
@@ -30,7 +30,7 @@ module Cmfrec
|
|
30
30
|
next if movie_names[row[1]]
|
31
31
|
movie_names[row[1]] = true
|
32
32
|
|
33
|
-
item = {item_id: row[1], year: !row[2].empty? ? Date.
|
33
|
+
item = {item_id: row[1], year: !row[2].empty? ? Date.strptime(row[2], "%d-%b-%Y").year : 1970}
|
34
34
|
genres.each_with_index do |genre, i|
|
35
35
|
item[:"genre_#{genre}"] = row[i + 5].to_i
|
36
36
|
end
|
data/lib/cmfrec/ffi.rb
CHANGED
data/lib/cmfrec/recommender.rb
CHANGED
@@ -35,7 +35,7 @@ module Cmfrec
|
|
35
35
|
row = int_ptr(u)
|
36
36
|
col = int_ptr(i)
|
37
37
|
n_predict = data.size
|
38
|
-
predicted = Fiddle::Pointer.malloc(n_predict * Fiddle::SIZEOF_DOUBLE)
|
38
|
+
predicted = Fiddle::Pointer.malloc(n_predict * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)
|
39
39
|
|
40
40
|
if @implicit
|
41
41
|
check_status FFI.predict_X_old_collective_implicit(
|
@@ -414,16 +414,16 @@ module Cmfrec
|
|
414
414
|
# initialize w/ normal distribution
|
415
415
|
reset_values = !@fit
|
416
416
|
|
417
|
-
@a = Fiddle::Pointer.malloc([@m, @m_u].max * (@k_user + @k + @k_main) * Fiddle::SIZEOF_DOUBLE)
|
418
|
-
@b = Fiddle::Pointer.malloc([@n, @n_i].max * (@k_item + @k + @k_main) * Fiddle::SIZEOF_DOUBLE)
|
419
|
-
@c = p_ > 0 ? Fiddle::Pointer.malloc(p_ * (@k_user + @k) * Fiddle::SIZEOF_DOUBLE) : nil
|
420
|
-
@d = q > 0 ? Fiddle::Pointer.malloc(q * (@k_item + @k) * Fiddle::SIZEOF_DOUBLE) : nil
|
417
|
+
@a = Fiddle::Pointer.malloc([@m, @m_u].max * (@k_user + @k + @k_main) * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)
|
418
|
+
@b = Fiddle::Pointer.malloc([@n, @n_i].max * (@k_item + @k + @k_main) * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)
|
419
|
+
@c = p_ > 0 ? Fiddle::Pointer.malloc(p_ * (@k_user + @k) * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE) : nil
|
420
|
+
@d = q > 0 ? Fiddle::Pointer.malloc(q * (@k_item + @k) * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE) : nil
|
421
421
|
|
422
422
|
@bias_a = nil
|
423
423
|
@bias_b = nil
|
424
424
|
|
425
|
-
u_colmeans = Fiddle::Pointer.malloc(p_ * Fiddle::SIZEOF_DOUBLE)
|
426
|
-
i_colmeans = Fiddle::Pointer.malloc(q * Fiddle::SIZEOF_DOUBLE)
|
425
|
+
u_colmeans = Fiddle::Pointer.malloc(p_ * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)
|
426
|
+
i_colmeans = Fiddle::Pointer.malloc(q * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)
|
427
427
|
|
428
428
|
if @implicit
|
429
429
|
set_implicit_vars
|
@@ -458,18 +458,18 @@ module Cmfrec
|
|
458
458
|
|
459
459
|
@global_mean = 0
|
460
460
|
else
|
461
|
-
@bias_a = Fiddle::Pointer.malloc([@m, @m_u].max * Fiddle::SIZEOF_DOUBLE) if @user_bias
|
462
|
-
@bias_b = Fiddle::Pointer.malloc([@n, @n_i].max * Fiddle::SIZEOF_DOUBLE) if @item_bias
|
461
|
+
@bias_a = Fiddle::Pointer.malloc([@m, @m_u].max * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE) if @user_bias
|
462
|
+
@bias_b = Fiddle::Pointer.malloc([@n, @n_i].max * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE) if @item_bias
|
463
463
|
|
464
464
|
if @add_implicit_features
|
465
|
-
@ai = Fiddle::Pointer.malloc([@m, @m_u].max * (@k + @k_main) * Fiddle::SIZEOF_DOUBLE)
|
466
|
-
@bi = Fiddle::Pointer.malloc([@n, @n_i].max * (@k + @k_main) * Fiddle::SIZEOF_DOUBLE)
|
465
|
+
@ai = Fiddle::Pointer.malloc([@m, @m_u].max * (@k + @k_main) * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)
|
466
|
+
@bi = Fiddle::Pointer.malloc([@n, @n_i].max * (@k + @k_main) * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)
|
467
467
|
else
|
468
468
|
@ai = nil
|
469
469
|
@bi = nil
|
470
470
|
end
|
471
471
|
|
472
|
-
glob_mean = Fiddle::Pointer.malloc(Fiddle::SIZEOF_DOUBLE)
|
472
|
+
glob_mean = Fiddle::Pointer.malloc(Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)
|
473
473
|
|
474
474
|
# TODO add
|
475
475
|
scaling_bias_a = nil
|
@@ -689,8 +689,8 @@ module Cmfrec
|
|
689
689
|
n_exclude = 0
|
690
690
|
end
|
691
691
|
|
692
|
-
outp_ix = Fiddle::Pointer.malloc(count * Fiddle::SIZEOF_INT)
|
693
|
-
outp_score = Fiddle::Pointer.malloc(count * Fiddle::SIZEOF_DOUBLE)
|
692
|
+
outp_ix = Fiddle::Pointer.malloc(count * Fiddle::SIZEOF_INT, Fiddle::RUBY_FREE)
|
693
|
+
outp_score = Fiddle::Pointer.malloc(count * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)
|
694
694
|
|
695
695
|
[include_ix, n_include, exclude_ix, n_exclude, outp_ix, outp_score, count]
|
696
696
|
end
|
@@ -742,9 +742,8 @@ module Cmfrec
|
|
742
742
|
end
|
743
743
|
end
|
744
744
|
|
745
|
-
# convert boolean to int
|
746
745
|
def fiddle_args(args)
|
747
|
-
args
|
746
|
+
args
|
748
747
|
end
|
749
748
|
|
750
749
|
def check_status(ret_val)
|
@@ -790,11 +789,11 @@ module Cmfrec
|
|
790
789
|
end
|
791
790
|
|
792
791
|
def int_array(ptr)
|
793
|
-
ptr.
|
792
|
+
ptr.to_str(ptr.size).unpack("i*")
|
794
793
|
end
|
795
794
|
|
796
795
|
def real_array(ptr)
|
797
|
-
ptr.
|
796
|
+
ptr.to_str(ptr.size).unpack("d*")
|
798
797
|
end
|
799
798
|
|
800
799
|
def set_implicit_vars
|
@@ -811,7 +810,7 @@ module Cmfrec
|
|
811
810
|
end
|
812
811
|
|
813
812
|
def json_dump_ptr(ptr)
|
814
|
-
[ptr.
|
813
|
+
[ptr.to_str(ptr.size)].pack("m0") if ptr
|
815
814
|
end
|
816
815
|
|
817
816
|
def json_load_ptr(str)
|
data/lib/cmfrec/version.rb
CHANGED
data/lib/cmfrec.rb
CHANGED
@@ -3,9 +3,9 @@ require "etc"
|
|
3
3
|
require "fiddle/import"
|
4
4
|
|
5
5
|
# modules
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
require_relative "cmfrec/data"
|
7
|
+
require_relative "cmfrec/recommender"
|
8
|
+
require_relative "cmfrec/version"
|
9
9
|
|
10
10
|
module Cmfrec
|
11
11
|
class Error < StandardError; end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cmfrec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: fiddle
|
@@ -15,14 +15,14 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - ">="
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version:
|
18
|
+
version: 1.1.7
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - ">="
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version:
|
25
|
+
version: 1.1.7
|
26
26
|
email: andrew@ankane.org
|
27
27
|
executables: []
|
28
28
|
extensions: []
|
@@ -63,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
63
63
|
- !ruby/object:Gem::Version
|
64
64
|
version: '0'
|
65
65
|
requirements: []
|
66
|
-
rubygems_version: 3.6.
|
66
|
+
rubygems_version: 3.6.7
|
67
67
|
specification_version: 4
|
68
68
|
summary: Recommendations for Ruby using collective matrix factorization
|
69
69
|
test_files: []
|