jruby_mahout 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,296 @@
1
+ require 'spec_helper'
2
+
3
+ describe JrubyMahout::Recommender do
4
+ describe ".new" do
5
+ context "with valid arguments" do
6
+ it "should return an instance of JrubyMahout::Recommender for PearsonCorrelationSimilarity and GenericUserBasedRecommender" do
7
+ JrubyMahout::Recommender.new("PearsonCorrelationSimilarity", 5, "GenericUserBasedRecommender", false).should
8
+ be_an_instance_of JrubyMahout::Recommender
9
+ end
10
+
11
+ it "should return an instance of JrubyMahout::Recommender for EuclideanDistanceSimilarity and GenericUserBasedRecommender" do
12
+ JrubyMahout::Recommender.new("EuclideanDistanceSimilarity", 5, "GenericUserBasedRecommender", false).should
13
+ be_an_instance_of JrubyMahout::Recommender
14
+ end
15
+
16
+ it "should return an instance of JrubyMahout::Recommender for SpearmanCorrelationSimilarity and GenericUserBasedRecommender" do
17
+ JrubyMahout::Recommender.new("SpearmanCorrelationSimilarity", 5, "GenericUserBasedRecommender", false).should
18
+ be_an_instance_of JrubyMahout::Recommender
19
+ end
20
+
21
+ it "should return an instance of JrubyMahout::Recommender for LogLikelihoodSimilarity and GenericUserBasedRecommender" do
22
+ JrubyMahout::Recommender.new("LogLikelihoodSimilarity", 5, "GenericUserBasedRecommender", false).should
23
+ be_an_instance_of JrubyMahout::Recommender
24
+ end
25
+
26
+ it "should return an instance of JrubyMahout::Recommender for TanimotoCoefficientSimilarity and GenericUserBasedRecommender" do
27
+ JrubyMahout::Recommender.new("TanimotoCoefficientSimilarity", 5, "GenericUserBasedRecommender", false).should
28
+ be_an_instance_of JrubyMahout::Recommender
29
+ end
30
+
31
+ it "should return an instance of JrubyMahout::Recommender for GenericItemSimilarity and GenericUserBasedRecommender" do
32
+ JrubyMahout::Recommender.new("GenericItemSimilarity", 5, "GenericUserBasedRecommender", false).should
33
+ be_an_instance_of JrubyMahout::Recommender
34
+ end
35
+
36
+ it "should return an instance of JrubyMahout::Recommender for PearsonCorrelationSimilarity and GenericItemBasedRecommender" do
37
+ JrubyMahout::Recommender.new("PearsonCorrelationSimilarity", nil, "GenericItemBasedRecommender", false).should
38
+ be_an_instance_of JrubyMahout::Recommender
39
+ end
40
+
41
+ it "should return an instance of JrubyMahout::Recommender for EuclideanDistanceSimilarity and GenericItemBasedRecommender" do
42
+ JrubyMahout::Recommender.new("EuclideanDistanceSimilarity", nil, "GenericItemBasedRecommender", false).should
43
+ be_an_instance_of JrubyMahout::Recommender
44
+ end
45
+
46
+ it "should return an instance of JrubyMahout::Recommender for SpearmanCorrelationSimilarity and GenericItemBasedRecommender" do
47
+ JrubyMahout::Recommender.new("SpearmanCorrelationSimilarity", nil, "GenericItemBasedRecommender", false).should
48
+ be_an_instance_of JrubyMahout::Recommender
49
+ end
50
+
51
+ it "should return an instance of JrubyMahout::Recommender for LogLikelihoodSimilarity and GenericItemBasedRecommender" do
52
+ JrubyMahout::Recommender.new("LogLikelihoodSimilarity", nil, "GenericItemBasedRecommender", false).should
53
+ be_an_instance_of JrubyMahout::Recommender
54
+ end
55
+
56
+ it "should return an instance of JrubyMahout::Recommender for TanimotoCoefficientSimilarity and GenericItemBasedRecommender" do
57
+ JrubyMahout::Recommender.new("TanimotoCoefficientSimilarity", nil, "GenericItemBasedRecommender", false).should
58
+ be_an_instance_of JrubyMahout::Recommender
59
+ end
60
+
61
+ it "should return an instance of JrubyMahout::Recommender for GenericItemSimilarity and GenericItemBasedRecommender" do
62
+ JrubyMahout::Recommender.new("GenericItemSimilarity", nil, "GenericItemBasedRecommender", false).should
63
+ be_an_instance_of JrubyMahout::Recommender
64
+ end
65
+
66
+ it "should return an instance of JrubyMahout::Recommender for SlopeOneRecommender" do
67
+ JrubyMahout::Recommender.new(nil, nil, "SlopeOneRecommender", false).should
68
+ be_an_instance_of JrubyMahout::Recommender
69
+ end
70
+ end
71
+ end
72
+
73
+ describe "data_model=" do
74
+ it "should load file data model" do
75
+ recommender = JrubyMahout::Recommender.new("TanimotoCoefficientSimilarity", 5, "GenericUserBasedRecommender", false)
76
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
77
+
78
+ recommender.data_model.should be_an_instance_of org.apache.mahout.cf.taste.impl.model.file.FileDataModel
79
+ end
80
+
81
+ it "should load postgres data model" do
82
+ recommender = JrubyMahout::Recommender.new("TanimotoCoefficientSimilarity", 5, "GenericUserBasedRecommender", false)
83
+ recommender.data_model = JrubyMahout::DataModel.new("postgres", {
84
+ :host => "localhost",
85
+ :port => 5432,
86
+ :db_name => "postgres",
87
+ :username => "postgres",
88
+ :password => "postgres",
89
+ :table_name => "taste_preferences"
90
+ }).data_model
91
+
92
+ recommender.data_model.should be_an_instance_of org.apache.mahout.cf.taste.impl.model.jdbc.PostgreSQLJDBCDataModel
93
+ end
94
+ end
95
+
96
+ describe ".recommend" do
97
+ context "with valid arguments" do
98
+ it "should return an array for PearsonCorrelationSimilarity and GenericUserBasedRecommender" do
99
+ recommender = JrubyMahout::Recommender.new("PearsonCorrelationSimilarity", 5, "GenericUserBasedRecommender", false)
100
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
101
+
102
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
103
+ end
104
+
105
+ it "should return an array for EuclideanDistanceSimilarity and GenericUserBasedRecommender" do
106
+ recommender = JrubyMahout::Recommender.new("EuclideanDistanceSimilarity", 5, "GenericUserBasedRecommender", false)
107
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
108
+
109
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
110
+ end
111
+
112
+ it "should return an array for SpearmanCorrelationSimilarity and GenericUserBasedRecommender" do
113
+ recommender = JrubyMahout::Recommender.new("SpearmanCorrelationSimilarity", 5, "GenericUserBasedRecommender", false)
114
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
115
+
116
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
117
+ end
118
+
119
+ it "should return an array for LogLikelihoodSimilarity and GenericUserBasedRecommender" do
120
+ recommender = JrubyMahout::Recommender.new("LogLikelihoodSimilarity", 5, "GenericUserBasedRecommender", false)
121
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
122
+
123
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
124
+ end
125
+
126
+ it "should return an array for TanimotoCoefficientSimilarity and GenericUserBasedRecommender" do
127
+ recommender = JrubyMahout::Recommender.new("TanimotoCoefficientSimilarity", 5, "GenericUserBasedRecommender", false)
128
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
129
+
130
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
131
+ end
132
+
133
+ it "should return an array for GenericItemSimilarity and GenericUserBasedRecommender" do
134
+ recommender = JrubyMahout::Recommender.new("GenericItemSimilarity", 5, "GenericUserBasedRecommender", false)
135
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
136
+
137
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
138
+ end
139
+
140
+ it "should return an array for PearsonCorrelationSimilarity and GenericItemBasedRecommender" do
141
+ recommender = JrubyMahout::Recommender.new("PearsonCorrelationSimilarity", nil, "GenericItemBasedRecommender", false)
142
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
143
+
144
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
145
+ end
146
+
147
+ it "should return an array for EuclideanDistanceSimilarity and GenericItemBasedRecommender" do
148
+ recommender = JrubyMahout::Recommender.new("EuclideanDistanceSimilarity", nil, "GenericItemBasedRecommender", false)
149
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
150
+
151
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
152
+ end
153
+
154
+ it "should return an array for LogLikelihoodSimilarity and GenericItemBasedRecommender" do
155
+ recommender = JrubyMahout::Recommender.new("LogLikelihoodSimilarity", nil, "GenericItemBasedRecommender", false)
156
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
157
+
158
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
159
+ end
160
+
161
+ it "should return an array for TanimotoCoefficientSimilarity and GenericItemBasedRecommender" do
162
+ recommender = JrubyMahout::Recommender.new("TanimotoCoefficientSimilarity", nil, "GenericItemBasedRecommender", false)
163
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
164
+
165
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
166
+ end
167
+
168
+ it "should return an array for GenericItemSimilarity and GenericItemBasedRecommender" do
169
+ recommender = JrubyMahout::Recommender.new("GenericItemSimilarity", nil, "GenericItemBasedRecommender", false)
170
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
171
+
172
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
173
+ end
174
+
175
+ it "should return an array for SlopeOneRecommender" do
176
+ recommender = JrubyMahout::Recommender.new("nil", nil, "SlopeOneRecommender", false)
177
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
178
+
179
+ recommender.recommend(1, 10, nil).should be_an_instance_of Array
180
+ end
181
+ end
182
+
183
+ context "with invalid arguments" do
184
+ it "should return nil for SpearmanCorrelationSimilarity and GenericItemBasedRecommender" do
185
+ recommender = JrubyMahout::Recommender.new("SpearmanCorrelationSimilarity", nil, "GenericItemBasedRecommender", false)
186
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
187
+
188
+ recommender.recommend(1, 10, nil).should be nil
189
+ end
190
+ end
191
+ end
192
+
193
+ describe ".evaluate" do
194
+ context "with valid arguments" do
195
+ it "should return a float" do
196
+ recommender = JrubyMahout::Recommender.new("TanimotoCoefficientSimilarity", 5, "GenericUserBasedRecommender", false)
197
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
198
+
199
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
200
+ end
201
+
202
+ it "should return an array for PearsonCorrelationSimilarity and GenericUserBasedRecommender" do
203
+ recommender = JrubyMahout::Recommender.new("PearsonCorrelationSimilarity", 5, "GenericUserBasedRecommender", false)
204
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
205
+
206
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
207
+ end
208
+
209
+ it "should return a float for EuclideanDistanceSimilarity and GenericUserBasedRecommender" do
210
+ recommender = JrubyMahout::Recommender.new("EuclideanDistanceSimilarity", 5, "GenericUserBasedRecommender", false)
211
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
212
+
213
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
214
+ end
215
+
216
+ it "should return a float for SpearmanCorrelationSimilarity and GenericUserBasedRecommender" do
217
+ recommender = JrubyMahout::Recommender.new("SpearmanCorrelationSimilarity", 5, "GenericUserBasedRecommender", false)
218
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
219
+
220
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
221
+ end
222
+
223
+ it "should return a float for LogLikelihoodSimilarity and GenericUserBasedRecommender" do
224
+ recommender = JrubyMahout::Recommender.new("LogLikelihoodSimilarity", 5, "GenericUserBasedRecommender", false)
225
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
226
+
227
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
228
+ end
229
+
230
+ it "should return a float for TanimotoCoefficientSimilarity and GenericUserBasedRecommender" do
231
+ recommender = JrubyMahout::Recommender.new("TanimotoCoefficientSimilarity", 5, "GenericUserBasedRecommender", false)
232
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
233
+
234
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
235
+ end
236
+
237
+ it "should return a float for GenericItemSimilarity and GenericUserBasedRecommender" do
238
+ recommender = JrubyMahout::Recommender.new("GenericItemSimilarity", 5, "GenericUserBasedRecommender", false)
239
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
240
+
241
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
242
+ end
243
+
244
+ it "should return a float for PearsonCorrelationSimilarity and GenericItemBasedRecommender" do
245
+ recommender = JrubyMahout::Recommender.new("PearsonCorrelationSimilarity", nil, "GenericItemBasedRecommender", false)
246
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
247
+
248
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
249
+ end
250
+
251
+ it "should return a float for EuclideanDistanceSimilarity and GenericItemBasedRecommender" do
252
+ recommender = JrubyMahout::Recommender.new("EuclideanDistanceSimilarity", nil, "GenericItemBasedRecommender", false)
253
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
254
+
255
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
256
+ end
257
+
258
+ it "should return a float for LogLikelihoodSimilarity and GenericItemBasedRecommender" do
259
+ recommender = JrubyMahout::Recommender.new("LogLikelihoodSimilarity", nil, "GenericItemBasedRecommender", false)
260
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
261
+
262
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
263
+ end
264
+
265
+ it "should return a float for TanimotoCoefficientSimilarity and GenericItemBasedRecommender" do
266
+ recommender = JrubyMahout::Recommender.new("TanimotoCoefficientSimilarity", nil, "GenericItemBasedRecommender", false)
267
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
268
+
269
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
270
+ end
271
+
272
+ it "should return a float for GenericItemSimilarity and GenericItemBasedRecommender" do
273
+ recommender = JrubyMahout::Recommender.new("GenericItemSimilarity", nil, "GenericItemBasedRecommender", false)
274
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
275
+
276
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
277
+ end
278
+
279
+ it "should return a float for SlopeOneRecommender" do
280
+ recommender = JrubyMahout::Recommender.new("nil", nil, "SlopeOneRecommender", false)
281
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
282
+
283
+ recommender.evaluate(0.7, 0.3).should be_an_instance_of Float
284
+ end
285
+ end
286
+
287
+ context "with invalid arguments" do
288
+ it "should return nil for SpearmanCorrelationSimilarity and GenericItemBasedRecommender" do
289
+ recommender = JrubyMahout::Recommender.new("SpearmanCorrelationSimilarity", nil, "GenericItemBasedRecommender", false)
290
+ recommender.data_model = JrubyMahout::DataModel.new("file", { :file_path => "spec/recommender_data.csv" }).data_model
291
+
292
+ recommender.evaluate(0.7, 0.3).should be nil
293
+ end
294
+ end
295
+ end
296
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'jruby_mahout'
4
+
5
+ RSpec.configure do |config|
6
+
7
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jruby_mahout
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.2.0
6
+ platform: ruby
7
+ authors:
8
+ - Vasily Vasinov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ version_requirements: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ! '>='
19
+ - !ruby/object:Gem::Version
20
+ version: !binary |-
21
+ MA==
22
+ none: false
23
+ requirement: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ! '>='
26
+ - !ruby/object:Gem::Version
27
+ version: !binary |-
28
+ MA==
29
+ none: false
30
+ prerelease: false
31
+ type: :development
32
+ - !ruby/object:Gem::Dependency
33
+ name: rspec
34
+ version_requirements: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: !binary |-
39
+ MA==
40
+ none: false
41
+ requirement: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: !binary |-
46
+ MA==
47
+ none: false
48
+ prerelease: false
49
+ type: :development
50
+ description: Jruby Mahout is a gem that unleashes the power of Apache Mahout in the world of Jruby. Mahout is a superior machine learning library written in Java. It deals with recommendations, clustering and classification machine learning problems at scale. Until now it was difficult to use it in Ruby projects. You'd have to implement Java interfaces in Jruby yourself, which is not quick especially if you just started exploring the world of machine learning.
51
+ email:
52
+ - vasinov@me.com
53
+ executables: []
54
+ extensions: []
55
+ extra_rdoc_files: []
56
+ files:
57
+ - .gitignore
58
+ - .rspec
59
+ - Gemfile
60
+ - Gemfile.lock
61
+ - MIT-LICENSE
62
+ - README.md
63
+ - Rakefile
64
+ - jruby_mahout.gemspec
65
+ - lib/jruby_mahout.rb
66
+ - lib/jruby_mahout/data_model.rb
67
+ - lib/jruby_mahout/evaluator.rb
68
+ - lib/jruby_mahout/mahout_imports.rb
69
+ - lib/jruby_mahout/mysql_manager.rb
70
+ - lib/jruby_mahout/postgres_manager.rb
71
+ - lib/jruby_mahout/recommender.rb
72
+ - lib/jruby_mahout/recommender_builder.rb
73
+ - lib/jruby_mahout/version.rb
74
+ - spec/recommender_data.csv
75
+ - spec/recommender_spec.rb
76
+ - spec/spec_helper.rb
77
+ homepage: https://github.com/vasinov/jruby_mahout
78
+ licenses:
79
+ - MIT
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: !binary |-
89
+ MA==
90
+ none: false
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: !binary |-
96
+ MA==
97
+ none: false
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 1.8.24
101
+ signing_key:
102
+ specification_version: 3
103
+ summary: Jruby Mahout is a gem that unleashes the power of Apache Mahout in the world of Jruby.
104
+ test_files:
105
+ - !binary |-
106
+ c3BlYy9yZWNvbW1lbmRlcl9kYXRhLmNzdg==
107
+ - !binary |-
108
+ c3BlYy9yZWNvbW1lbmRlcl9zcGVjLnJi
109
+ - !binary |-
110
+ c3BlYy9zcGVjX2hlbHBlci5yYg==