rb-libsvm 1.0.1 → 1.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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: [![Build Status](https://secure.travis-ci.org/febeling/rb-libsvm.png)](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
|
-
|