svmredlight 0.1.0

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.
data/test/helper.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ begin
5
+ Bundler.setup(:default, :development)
6
+ rescue Bundler::BundlerError => e
7
+ $stderr.puts e.message
8
+ $stderr.puts "Run `bundle install` to install missing gems"
9
+ exit e.status_code
10
+ end
11
+ require 'test/unit'
12
+ require 'shoulda'
13
+ require './lib/svmredlight'
14
+
15
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
17
+
18
+ class Test::Unit::TestCase
19
+ end
@@ -0,0 +1,55 @@
1
+ require './test/helper'
2
+ include SVMLight
3
+
4
+ class TestDocument < Test::Unit::TestCase
5
+
6
+ def test_create
7
+ d = Document.create(0, 0.5, 1, 0, [[1, 1.0 ], [4, 0.0] , [10, 0.0] ,[ 11, 0.5 ]])
8
+ assert_kind_of Document, d
9
+ end
10
+
11
+ def test_create_should_accept_integer_as_feature_weight
12
+ d = Document.create(0, 0.5, 1, 0, [[1, 0 ], [4, 0.0] , [10, 0.0] ,[ 11, 0.5 ]])
13
+ assert_kind_of Document, d
14
+ end
15
+
16
+ def test_create_using_new
17
+ d = Document.new({1 => 566.0, 4 => 133.0}, {docnum: 10, slackid: 1, queryid: 2, costfactor: 0.5})
18
+
19
+ assert_equal 10, d.docnum
20
+ assert_equal 1, d.slackid
21
+ assert_equal 2, d.queryid
22
+ assert_equal 0.5, d.costfactor
23
+ end
24
+
25
+ def test_should_be_able_to_access_properties
26
+ d1 = Document.create(0, 0.5, 1, 0, [[1, 1.0 ], [10, 0.0 ], [20, 0.0], [21, 0.1 ]])
27
+ d2 = Document.create(1, 0.6, 2, 1, [[1, 1.0 ], [30, 0.0 ], [40, 0.0], [41, 0.1 ]])
28
+
29
+ assert_equal 0, d1.docnum
30
+ assert_equal 1, d2.docnum
31
+
32
+ assert_equal 1, d1.slackid
33
+ assert_equal 2, d2.slackid
34
+
35
+ assert_equal 0, d1.queryid
36
+ assert_equal 1, d2.queryid
37
+
38
+ assert_equal 0.5, d1.costfactor
39
+ assert_equal 0.6, d2.costfactor
40
+ end
41
+
42
+ def test_all_word_numbers_should_be_greater_than_zero
43
+ assert_raise(ArgumentError){ Document.create(0, 0.5, 1, 0, [[0, 1.0 ], [10, 0.0 ], [20, 0.0], [21, 0.1 ]]) }
44
+ assert_raise(ArgumentError){ Document.create(1, 0.5, 1, 0, [[-1, 1.0 ], [30, 0.0 ], [40, 0.0], [41, 0.1 ]])}
45
+ end
46
+
47
+ def test_create_with_no_array
48
+ assert_raise(TypeError) { Document.create(-1, 0, 1, 0, {}) }
49
+ end
50
+
51
+ def test_create_with_empty_array
52
+ assert_raise(ArgumentError) { Document.create(-1, 0, 1, 0 [])}
53
+ end
54
+ end
55
+
@@ -0,0 +1,114 @@
1
+ require './test/helper'
2
+ include SVMLight
3
+
4
+ class TestModel < Test::Unit::TestCase
5
+
6
+ def setup
7
+ @features ||= [
8
+ [ [1,0.6], [11, 0.0], [34, 0.1] ],
9
+ [ [5,0.4], [15, 0.0], [30, 0.1] ],
10
+ [ [1,0.1], [13, 0.0], [31, 0.1] ],
11
+ [ [7,0.7], [15, 0.0], [35, 0.1] ],
12
+ [ [5,0.6], [19, 0.0], [44, 0.1] ],
13
+ ]
14
+ @docs_and_labels ||= @features.each_with_index.map{|f,i| [ Document.create(i + 1, 1, 0, 0, f), i%2 * -1]}
15
+ end
16
+
17
+ def test_learn_classification_with_alpha
18
+ m = Model.new(:classification, @docs_and_labels, {}, {}, [1, 0.0] * 50)
19
+ assert_kind_of Model, m
20
+
21
+ @docs_and_labels.each_with_index do |item, i|
22
+ assert_kind_of Numeric, m.classify(item.first), "failed in item # #{i}"
23
+ end
24
+ end
25
+
26
+ def test_learn_classification
27
+ m = Model.new(:classification, @docs_and_labels, {}, {}, nil)
28
+ assert_kind_of Model, m
29
+ assert_equal 44, m.total_words
30
+ assert_equal 5, m.totdoc
31
+
32
+ @docs_and_labels.each_with_index do |item, i|
33
+ assert_kind_of Numeric, m.classify(item.first), "failed in item # #{i}"
34
+ end
35
+
36
+ end
37
+
38
+ def test_learn_classification_with_learn_params
39
+
40
+ learn_params = {
41
+ "predfile" => "custom_file",
42
+ "alphafile" => "alpha",
43
+ "biased_hyperplane" => false,
44
+ "sharedslack" => false,
45
+ "remove_inconsistent" => true
46
+ }
47
+
48
+ m = Model.new(:classification, @docs_and_labels, learn_params, {}, nil)
49
+ assert_kind_of Model, m
50
+
51
+ @docs_and_labels.each_with_index do |item, i|
52
+ assert_kind_of Numeric, m.classify(item.first), "failed in item # #{i}"
53
+ end
54
+ end
55
+
56
+ def test_learn_classification_with_invalid_learn_params
57
+ learn_params = {"svm_c" => -1}
58
+ assert_raises(ArgumentError){Model.new(:classification, @docs_and_labels, learn_params, {}, nil)}
59
+ learn_params = {"svm_iter_to_shrink" => -1}
60
+ assert_raises(ArgumentError){Model.new(:classification, @docs_and_labels, learn_params, {}, nil)}
61
+ end
62
+
63
+ def test_learn_classification_with_kernel_params
64
+
65
+ kernel_params = {
66
+ "poly_degree" => 3,
67
+ "rbf_gamma" => 0.5,
68
+ "coef_lin" => 0.4,
69
+ "coef_const" => 0.56
70
+ }
71
+
72
+ m = Model.new(:classification, @docs_and_labels, {}, kernel_params, nil)
73
+ assert_kind_of Model, m
74
+
75
+ @docs_and_labels.each_with_index do |item, i|
76
+ assert_kind_of Numeric, m.classify(item.first), "failed in item # #{i}"
77
+ end
78
+ end
79
+
80
+ def test_learn_classification_with_learn_params_when_predfile_is_not_string
81
+
82
+ learn_params = { "predfile" => {}}
83
+
84
+ assert_raise(ArgumentError) do
85
+ Model.new(:classification, @docs_and_labels, learn_params, {}, [1, 0.0, 1])
86
+ end
87
+
88
+ end
89
+
90
+ def test_learn_classification_fails_when_element_is_not_array
91
+ @docs_and_labels << []
92
+ assert_raises(ArgumentError){Model.new(:classification, @docs_and_labels, {}, {}, nil)}
93
+ end
94
+
95
+ def test_learn_classification_fails_when_element_is_arry_with_the_wrong_types
96
+ assert_raises(ArgumentError){Model.new(:classification, @docs_and_labels, {}, {}, [1, {}] )}
97
+ end
98
+
99
+ def test_read
100
+ assert m = Model.read_from_file('test/assets/model')
101
+ assert_equal 3877, m.support_vectors_count
102
+ assert_equal 39118, m.total_words
103
+ end
104
+
105
+ def test_classify
106
+ m = Model.read_from_file('test/assets/model')
107
+ assert_kind_of Numeric, m.classify( Document.create(-1, 1, 0, 0,[1.0, 0, 0, 0, 0.5 ].each_with_index.map{|v, i| [i + 1 ,v.to_f]} ) )
108
+ assert_kind_of Numeric, m.classify( Document.create(-1, 1, 0, 0,[1.0, 0, 0, 0, 0.5 ].each_with_index.map{|v, i| [i + 1,v.to_f]}) )
109
+ assert_kind_of Numeric, m.classify( Document.create(-1, 1, 0, 0,[1, 0, 0, 0, 0.8, 0, 0 , 0 ].each_with_index.map{|v, i| [i + 1,v.to_f]}) )
110
+ assert_kind_of Numeric, m.classify( Document.create(-1, 1, 0, 0,[1, 0.5, 0, 0, 0, 0 , 0 ].each_with_index.map{|v, i| [i + 1,v.to_f]}) )
111
+ end
112
+
113
+ end
114
+
metadata ADDED
@@ -0,0 +1,134 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: svmredlight
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Camilo Lopez
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-09-11 00:00:00 -04:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: shoulda
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ type: :development
25
+ prerelease: false
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 1.0.0
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: jeweler
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.6.0
46
+ type: :development
47
+ prerelease: false
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: ZenTest
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: ruby-debug19
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: *id005
71
+ description: Ruby interface to SVMLight
72
+ email: camilo@camilolopez.com
73
+ executables: []
74
+
75
+ extensions:
76
+ - ext/extconf.rb
77
+ extra_rdoc_files:
78
+ - LICENSE.txt
79
+ - README.rdoc
80
+ files:
81
+ - .document
82
+ - Gemfile
83
+ - Gemfile.lock
84
+ - LICENSE.txt
85
+ - README.rdoc
86
+ - Rakefile
87
+ - VERSION
88
+ - examples/example1/example.rb
89
+ - examples/example1/test.dat
90
+ - examples/example1/train.dat
91
+ - examples/example1/words
92
+ - ext/extconf.rb
93
+ - ext/svmredlight.c
94
+ - lib/svmredlight.rb
95
+ - lib/svmredlight/document.rb
96
+ - lib/svmredlight/model.rb
97
+ - svmredlight.gemspec
98
+ - test/assets/model
99
+ - test/helper.rb
100
+ - test/test_document.rb
101
+ - test/test_model.rb
102
+ has_rdoc: true
103
+ homepage: http://github.com/camilo/svmredlight
104
+ licenses:
105
+ - MIT
106
+ post_install_message:
107
+ rdoc_options: []
108
+
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ hash: 2455726499843414946
117
+ segments:
118
+ - 0
119
+ version: "0"
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: "0"
126
+ requirements: []
127
+
128
+ rubyforge_project:
129
+ rubygems_version: 1.5.0
130
+ signing_key:
131
+ specification_version: 3
132
+ summary: Ruby interface to SVMLight
133
+ test_files: []
134
+