cmfrec 0.3.1 → 0.3.3
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 +9 -0
- data/README.md +1 -1
- data/lib/cmfrec/data.rb +1 -1
- data/lib/cmfrec/ffi.rb +0 -1
- data/lib/cmfrec/recommender.rb +19 -24
- 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: ac5590ea6e166698a9a274b86cf8c8b5bfe6e995733002a4e5c3ab896f7b84c8
|
4
|
+
data.tar.gz: c8bf8c6bc93e78baf86a19b4583f5901402f239641a943c718848322111efab5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73f375181c7aa2af16b1bed8d1884f30e1e3f5ef81ead8f880dbbdd0d30b5b4b4c1e24406a82a8fb64768c91be2616a76f653821e250eb673953880ae3eb8906
|
7
|
+
data.tar.gz: d5281893b9e2d8f32fc994510bc776310aa25a1638452b416ed4d764964dc9a363ccd8c74c1b3954ead16248231aaf2f3080f2a213e6c1e592d069b83633f38e
|
data/CHANGELOG.md
CHANGED
data/README.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
|
@@ -620,11 +620,7 @@ module Cmfrec
|
|
620
620
|
def to_dataset(dataset)
|
621
621
|
if defined?(Rover::DataFrame) && dataset.is_a?(Rover::DataFrame)
|
622
622
|
# convert keys to symbols
|
623
|
-
dataset
|
624
|
-
dataset.keys.each do |k, v|
|
625
|
-
dataset[k.to_sym] ||= dataset.delete(k)
|
626
|
-
end
|
627
|
-
dataset.to_a
|
623
|
+
dataset.each_row.map { |v| v.transform_keys(&:to_sym) }
|
628
624
|
elsif defined?(Daru::DataFrame) && dataset.is_a?(Daru::DataFrame)
|
629
625
|
# convert keys to symbols
|
630
626
|
dataset = dataset.dup
|
@@ -689,8 +685,8 @@ module Cmfrec
|
|
689
685
|
n_exclude = 0
|
690
686
|
end
|
691
687
|
|
692
|
-
outp_ix = Fiddle::Pointer.malloc(count * Fiddle::SIZEOF_INT)
|
693
|
-
outp_score = Fiddle::Pointer.malloc(count * Fiddle::SIZEOF_DOUBLE)
|
688
|
+
outp_ix = Fiddle::Pointer.malloc(count * Fiddle::SIZEOF_INT, Fiddle::RUBY_FREE)
|
689
|
+
outp_score = Fiddle::Pointer.malloc(count * Fiddle::SIZEOF_DOUBLE, Fiddle::RUBY_FREE)
|
694
690
|
|
695
691
|
[include_ix, n_include, exclude_ix, n_exclude, outp_ix, outp_score, count]
|
696
692
|
end
|
@@ -742,9 +738,8 @@ module Cmfrec
|
|
742
738
|
end
|
743
739
|
end
|
744
740
|
|
745
|
-
# convert boolean to int
|
746
741
|
def fiddle_args(args)
|
747
|
-
args
|
742
|
+
args
|
748
743
|
end
|
749
744
|
|
750
745
|
def check_status(ret_val)
|
@@ -790,11 +785,11 @@ module Cmfrec
|
|
790
785
|
end
|
791
786
|
|
792
787
|
def int_array(ptr)
|
793
|
-
ptr.
|
788
|
+
ptr.to_str(ptr.size).unpack("i*")
|
794
789
|
end
|
795
790
|
|
796
791
|
def real_array(ptr)
|
797
|
-
ptr.
|
792
|
+
ptr.to_str(ptr.size).unpack("d*")
|
798
793
|
end
|
799
794
|
|
800
795
|
def set_implicit_vars
|
@@ -811,7 +806,7 @@ module Cmfrec
|
|
811
806
|
end
|
812
807
|
|
813
808
|
def json_dump_ptr(ptr)
|
814
|
-
[ptr.
|
809
|
+
[ptr.to_str(ptr.size)].pack("m0") if ptr
|
815
810
|
end
|
816
811
|
|
817
812
|
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.3
|
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.9
|
67
67
|
specification_version: 4
|
68
68
|
summary: Recommendations for Ruby using collective matrix factorization
|
69
69
|
test_files: []
|