rb-libsvm 1.0.1 → 1.0.5
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/.gitignore +3 -0
- data/.travis.yml +2 -0
- data/README.md +74 -0
- data/Rakefile +2 -0
- data/examples/toy.rb +21 -0
- data/ext/rb-libsvm/extconf.rb +1 -1
- data/ext/rb-libsvm/libsvm.c +6 -2
- data/ext/rb-libsvm/ruby-ext.h +2 -2
- data/lib/rb-libsvm/version.rb +1 -1
- data/rb-libsvm.gemspec +2 -2
- data/spec/usage_spec.rb +10 -0
- metadata +11 -10
- data/Gemfile.lock +0 -28
- data/README.textile +0 -37
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/README.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# rb-libsvm -- Ruby language bindings for LIBSVM
|
2
|
+
|
3
|
+
Spec Status: [](http://travis-ci.org/febeling/rb-libsvm)
|
4
|
+
|
5
|
+
This is a module which provides a Ruby API to the LIBSVM [1] library.
|
6
|
+
SVM is a machine learning and classification algorithm, and LIBSVM is
|
7
|
+
a popular free implementation of it, written by Chih-Chung Chang and
|
8
|
+
Chih-Jen Lin, of National Taiwan University, Taipei. See "Programming
|
9
|
+
Collective Intelligence," [2] among others, for a usage example.
|
10
|
+
|
11
|
+
Note: There exists another Ruby binding for LIBSVM, named Ruby SVM,
|
12
|
+
[3] written by Rudi Cilibrasi. (That's the one mentioned in the
|
13
|
+
libsvm documentation.) This package is not related but written
|
14
|
+
independently and from scratch.
|
15
|
+
|
16
|
+
## Dependencies
|
17
|
+
|
18
|
+
None. Libsvm is bundled with the project. Just install and go!
|
19
|
+
|
20
|
+
Currently using libsvm version 3.1
|
21
|
+
|
22
|
+
## Installation
|
23
|
+
|
24
|
+
gem install rb-libsvm
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
require 'libsvm'
|
29
|
+
|
30
|
+
# This library is namespaced.
|
31
|
+
problem = Libsvm::Problem.new
|
32
|
+
parameter = Libsvm::SvmParameter.new
|
33
|
+
|
34
|
+
parameter.cache_size = 1 # in megabytes
|
35
|
+
|
36
|
+
parameter.eps = 0.001
|
37
|
+
parameter.c = 10
|
38
|
+
|
39
|
+
examples = [ [1,0,1], [-1,0,-1] ].map {|ary| Libsvm::Node.features(ary) }
|
40
|
+
labels = [1, -1]
|
41
|
+
|
42
|
+
problem.set_examples(labels, examples)
|
43
|
+
|
44
|
+
model = Libsvm::Model.train(problem, parameter)
|
45
|
+
|
46
|
+
pred = model.predict(Libsvm::Node.features(1, 1, 1))
|
47
|
+
puts "Example [1, 1, 1] - Predicted #{pred}"
|
48
|
+
|
49
|
+
|
50
|
+
## Author, License
|
51
|
+
|
52
|
+
Written by C. Florian Ebeling. This software can be freely used under
|
53
|
+
the terms of the MIT license, see file MIT-LICENSE.
|
54
|
+
|
55
|
+
## Contributors
|
56
|
+
|
57
|
+
Rimas Silkaitis
|
58
|
+
|
59
|
+
### Posts about SVMs and Ruby
|
60
|
+
|
61
|
+
[http://neovintage.blogspot.com/2011/11/text-classification-using-support.html](http://neovintage.blogspot.com/2011/11/text-classification-using-support.html)
|
62
|
+
|
63
|
+
[http://www.igvita.com/2008/01/07/support-vector-machines-svm-in-ruby/](http://www.igvita.com/2008/01/07/support-vector-machines-svm-in-ruby/)
|
64
|
+
|
65
|
+
|
66
|
+
### Notes
|
67
|
+
|
68
|
+
[http://www.csie.ntu.edu.tw/~cjlin/libsvm/](http://www.csie.ntu.edu.tw/~cjlin/libsvm/)
|
69
|
+
|
70
|
+
[http://books.google.com/books?id=fEsZ3Ey-Hq4C](http://books.google.com/books?id=fEsZ3Ey-Hq4C)
|
71
|
+
|
72
|
+
[http://rubysvm.cilibrar.com/](http://rubysvm.cilibrar.com/)
|
73
|
+
|
74
|
+
|
data/Rakefile
CHANGED
data/examples/toy.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'libsvm'
|
2
|
+
|
3
|
+
# This library is namespaced.
|
4
|
+
problem = Libsvm::Problem.new
|
5
|
+
parameter = Libsvm::SvmParameter.new
|
6
|
+
|
7
|
+
parameter.cache_size = 1 # in megabytes
|
8
|
+
|
9
|
+
parameter.eps = 0.001
|
10
|
+
parameter.c = 10
|
11
|
+
|
12
|
+
examples = [ [1,0,1], [-1,0,-1] ].map {|ary| Libsvm::Node.features(ary) }
|
13
|
+
labels = [1, -1]
|
14
|
+
|
15
|
+
problem.set_examples(labels, examples)
|
16
|
+
|
17
|
+
model = Libsvm::Model.train(problem, parameter)
|
18
|
+
|
19
|
+
pred = model.predict(Libsvm::Node.features(1, 1, 1))
|
20
|
+
puts "Example [1, 1, 1] - Predicted #{pred}"
|
21
|
+
|
data/ext/rb-libsvm/extconf.rb
CHANGED
data/ext/rb-libsvm/libsvm.c
CHANGED
@@ -15,6 +15,10 @@ VALUE mSvmType;
|
|
15
15
|
|
16
16
|
const struct svm_node TERMINATOR = (struct svm_node) { -1, 0.0 };
|
17
17
|
|
18
|
+
static void model_free(struct svm_model *model) {
|
19
|
+
svm_free_and_destroy_model(&model);
|
20
|
+
}
|
21
|
+
|
18
22
|
/* Libsvm::Node */
|
19
23
|
static struct svm_node *node_new() {
|
20
24
|
struct svm_node *n;
|
@@ -334,7 +338,7 @@ static VALUE cModel_class_train(VALUE obj,VALUE problem,VALUE parameter) {
|
|
334
338
|
}
|
335
339
|
model = svm_train(prob,param);
|
336
340
|
|
337
|
-
return Data_Wrap_Struct(cModel, 0,
|
341
|
+
return Data_Wrap_Struct(cModel, 0, model_free, model);
|
338
342
|
}
|
339
343
|
|
340
344
|
static VALUE cModel_predict(VALUE obj,VALUE example) {
|
@@ -385,7 +389,7 @@ static VALUE cModel_class_load(VALUE cls, VALUE filename)
|
|
385
389
|
char *path;
|
386
390
|
path = StringValueCStr(filename);
|
387
391
|
model = svm_load_model(path);
|
388
|
-
return Data_Wrap_Struct(cModel, 0,
|
392
|
+
return Data_Wrap_Struct(cModel, 0, model_free, model);
|
389
393
|
}
|
390
394
|
|
391
395
|
static VALUE cModel_class_cross_validation(VALUE cls, VALUE problem, VALUE parameter, VALUE num_fold)
|
data/ext/rb-libsvm/ruby-ext.h
CHANGED
@@ -21,13 +21,13 @@
|
|
21
21
|
rx_def_accessor0(CLASS,STRUCT,MEMBER_TYPE,ATTR,RNAME,)
|
22
22
|
|
23
23
|
#define rx_def_accessor0(CLASS,STRUCT,MEMBER_TYPE,ATTR,RNAME,DEREF) \
|
24
|
-
|
24
|
+
VALUE CLASS ## _ ## RNAME(VALUE obj) { \
|
25
25
|
STRUCT *struct_var; \
|
26
26
|
Data_Get_Struct(obj, STRUCT, struct_var); \
|
27
27
|
return rx_from_ ## MEMBER_TYPE(DEREF struct_var->ATTR); \
|
28
28
|
} \
|
29
29
|
\
|
30
|
-
|
30
|
+
VALUE CLASS ## _ ## RNAME ## _set(VALUE obj,VALUE val) { \
|
31
31
|
STRUCT *struct_var; \
|
32
32
|
Data_Get_Struct(obj, STRUCT, struct_var); \
|
33
33
|
DEREF struct_var->ATTR = rx_to_ ## MEMBER_TYPE(val); \
|
data/lib/rb-libsvm/version.rb
CHANGED
data/rb-libsvm.gemspec
CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |s|
|
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
21
|
# specify any dependencies here; for example:
|
22
|
-
s.add_development_dependency
|
23
|
-
s.add_development_dependency
|
22
|
+
s.add_development_dependency('rake-compiler')
|
23
|
+
s.add_development_dependency('rspec', '>= 2.7.0')
|
24
24
|
|
25
25
|
s.extensions << 'ext/rb-libsvm/extconf.rb'
|
26
26
|
end
|
data/spec/usage_spec.rb
CHANGED
@@ -34,4 +34,14 @@ describe "Basic usage" do
|
|
34
34
|
pred = model.predict(Node.features(-1, 55, -1))
|
35
35
|
pred.should == -1.0
|
36
36
|
end
|
37
|
+
|
38
|
+
it "kernel parameter use" do
|
39
|
+
@parameter.kernel_type = SvmParameter::KernelType::RBF
|
40
|
+
examples = [[1, 2, 3], [-2, -2, -2]].map {|ary| Node.features(ary) }
|
41
|
+
@problem.set_examples([1, 2], examples)
|
42
|
+
|
43
|
+
model = Model.train(@problem, @parameter)
|
44
|
+
|
45
|
+
model.predict(Node.features(1, 2, 3)).should == 2
|
46
|
+
end
|
37
47
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rb-libsvm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-12-07 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake-compiler
|
17
|
-
requirement: &
|
17
|
+
requirement: &2153848920 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,18 +22,18 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2153848920
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rspec
|
28
|
-
requirement: &
|
28
|
+
requirement: &2153848420 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 2.7.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2153848420
|
37
37
|
description: libsvm and ruby without using swig
|
38
38
|
email:
|
39
39
|
- neovintage@gmail.com
|
@@ -44,11 +44,12 @@ extra_rdoc_files: []
|
|
44
44
|
files:
|
45
45
|
- .gitignore
|
46
46
|
- .rvmrc
|
47
|
+
- .travis.yml
|
47
48
|
- Gemfile
|
48
|
-
- Gemfile.lock
|
49
49
|
- MIT-LICENSE
|
50
|
-
- README.
|
50
|
+
- README.md
|
51
51
|
- Rakefile
|
52
|
+
- examples/toy.rb
|
52
53
|
- ext/rb-libsvm/extconf.rb
|
53
54
|
- ext/rb-libsvm/libsvm.c
|
54
55
|
- ext/rb-libsvm/ruby-ext.h
|
@@ -84,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
85
|
version: '0'
|
85
86
|
requirements: []
|
86
87
|
rubyforge_project: rb-libsvm
|
87
|
-
rubygems_version: 1.8.
|
88
|
+
rubygems_version: 1.8.11
|
88
89
|
signing_key:
|
89
90
|
specification_version: 3
|
90
91
|
summary: Ruby language bindings for LIBSVM
|
data/Gemfile.lock
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
rb-libsvm (1.0.0)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: http://rubygems.org/
|
8
|
-
specs:
|
9
|
-
diff-lcs (1.1.3)
|
10
|
-
rake (0.9.2.2)
|
11
|
-
rake-compiler (0.7.9)
|
12
|
-
rake
|
13
|
-
rspec (2.7.0)
|
14
|
-
rspec-core (~> 2.7.0)
|
15
|
-
rspec-expectations (~> 2.7.0)
|
16
|
-
rspec-mocks (~> 2.7.0)
|
17
|
-
rspec-core (2.7.1)
|
18
|
-
rspec-expectations (2.7.0)
|
19
|
-
diff-lcs (~> 1.1.2)
|
20
|
-
rspec-mocks (2.7.0)
|
21
|
-
|
22
|
-
PLATFORMS
|
23
|
-
ruby
|
24
|
-
|
25
|
-
DEPENDENCIES
|
26
|
-
rake-compiler
|
27
|
-
rb-libsvm!
|
28
|
-
rspec (= 2.7.0)
|
data/README.textile
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
h1. rb-libsvm -- Ruby language bindings for LIBSVM
|
2
|
-
|
3
|
-
This is a module which provides a Ruby API to the LIBSVM [1] library.
|
4
|
-
SVM is a machine learning and classification algorithm, and LIBSVM is
|
5
|
-
a popular free implementation of it, written by Chih-Chung Chang and
|
6
|
-
Chih-Jen Lin, of National Taiwan University, Taipei. See "Programming
|
7
|
-
Collective Intelligence," [2] among others, for a usage example.
|
8
|
-
|
9
|
-
Note: There exists another Ruby binding for LIBSVM, named Ruby SVM,
|
10
|
-
[3] written by Rudi Cilibrasi. (That's the one mentioned in the
|
11
|
-
libsvm documentation.) This package is not related but written
|
12
|
-
independently and from scratch.
|
13
|
-
|
14
|
-
h2. Dependencies
|
15
|
-
|
16
|
-
None. Libsvm is bundled with the project. Just clone and go!
|
17
|
-
|
18
|
-
Currently using libsvm version 3.1
|
19
|
-
|
20
|
-
h2. Author, License
|
21
|
-
|
22
|
-
Written by C. Florian Ebeling. This software can be freely used under
|
23
|
-
the terms of the MIT license, see file MIT-LICENSE.
|
24
|
-
|
25
|
-
h2. Contributors
|
26
|
-
|
27
|
-
Rimas Silkaitis
|
28
|
-
|
29
|
-
h3. Notes
|
30
|
-
|
31
|
-
fn1. http://www.csie.ntu.edu.tw/~cjlin/libsvm/
|
32
|
-
|
33
|
-
fn2. http://books.google.com/books?id=fEsZ3Ey-Hq4C
|
34
|
-
|
35
|
-
fn3. http://rubysvm.cilibrar.com/
|
36
|
-
|
37
|
-
|