rb-libsvm 1.0.8 → 1.0.9
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/README.md +27 -20
- data/ext/libsvm/svm.cpp +22 -3
- data/ext/libsvm/svm.h +4 -1
- data/lib/libsvm/version.rb +1 -1
- metadata +8 -8
data/README.md
CHANGED
@@ -2,22 +2,29 @@
|
|
2
2
|
|
3
3
|
Spec Status: [](http://travis-ci.org/febeling/rb-libsvm)
|
4
4
|
|
5
|
-
This package provides a Ruby bindings to the LIBSVM
|
5
|
+
This package provides a Ruby bindings to the [LIBSVM][] library. SVM
|
6
6
|
is a machine learning and classification algorithm, and LIBSVM is a
|
7
7
|
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,"
|
8
|
+
Chih-Jen Lin, of National Taiwan University, Taipei. See the book ["Programming
|
9
|
+
Collective Intelligence,"](http://books.google.com/books?id=fEsZ3Ey-Hq4C) among others, for a usage example.
|
10
10
|
|
11
11
|
Note: There exist two other Ruby bindings for LIBSVM. One is named
|
12
|
-
Ruby SVM, written by Rudi Cilibrasi. It is hard to find
|
13
|
-
other, more actively developed one is
|
14
|
-
[
|
12
|
+
"Ruby SVM," and is written by Rudi Cilibrasi. It is hard to find
|
13
|
+
nowadays. The other, more actively developed one is
|
14
|
+
[libsvm-ruby-swig][svmrubyswig] by Tom Zeng, which is built using
|
15
|
+
SWIG.
|
15
16
|
|
16
17
|
## Dependencies
|
17
18
|
|
18
|
-
None.
|
19
|
+
None. LIBSVM is bundled with the project. Just install and go!
|
19
20
|
|
20
|
-
Currently includes libsvm version 3.
|
21
|
+
Currently this package includes libsvm version 3.13.
|
22
|
+
|
23
|
+
LIBSVM includes a number of command line tools for preprocessing
|
24
|
+
training data and finding parameters. These tools are not included in
|
25
|
+
this gem. You should install the original package if you need these.
|
26
|
+
It is also helpful to consult the Readme of the LIBSVM package for
|
27
|
+
reference when configuring the training parameters.
|
21
28
|
|
22
29
|
## Installation
|
23
30
|
|
@@ -48,13 +55,9 @@ pred = model.predict(Libsvm::Node.features(1, 1, 1))
|
|
48
55
|
puts "Example [1, 1, 1] - Predicted #{pred}"
|
49
56
|
```
|
50
57
|
|
51
|
-
## Author
|
52
|
-
|
53
|
-
Written by C. Florian Ebeling. This software can be freely used under
|
54
|
-
the terms of the MIT license, see file MIT-LICENSE.
|
58
|
+
## Author
|
55
59
|
|
56
|
-
|
57
|
-
the license in the file LIBSVM-LICENSE.
|
60
|
+
Written by C. Florian Ebeling.
|
58
61
|
|
59
62
|
## Contributors
|
60
63
|
|
@@ -62,16 +65,20 @@ the license in the file LIBSVM-LICENSE.
|
|
62
65
|
|
63
66
|
[Aleksander Pohl](https://github.com/apohllo)
|
64
67
|
|
65
|
-
|
68
|
+
## License
|
66
69
|
|
67
|
-
|
70
|
+
This software can be freely used under the terms of the MIT license,
|
71
|
+
see file MIT-LICENSE.
|
68
72
|
|
69
|
-
|
73
|
+
This package includes the source of LIBSVM, which is free to use under
|
74
|
+
the license in the file LIBSVM-LICENSE.
|
70
75
|
|
76
|
+
### Posts about using SVMs with Ruby
|
71
77
|
|
78
|
+
http://neovintage.blogspot.com/2011/11/text-classification-using-support.html
|
72
79
|
|
73
|
-
|
80
|
+
http://www.igvita.com/2008/01/07/support-vector-machines-svm-in-ruby/
|
74
81
|
|
75
|
-
[
|
82
|
+
[libsvm]: http://www.csie.ntu.edu.tw/~cjlin/libsvm/
|
76
83
|
|
77
|
-
[
|
84
|
+
[svmrubyswig]: http://github.com/tomz/libsvm-ruby-swig/tree/master
|
data/ext/libsvm/svm.cpp
CHANGED
@@ -737,7 +737,7 @@ void Solver::Solve(int l, const QMatrix& Q, const double *p_, const schar *y_,
|
|
737
737
|
active_size = l;
|
738
738
|
info("*");
|
739
739
|
}
|
740
|
-
|
740
|
+
fprintf(stderr,"\nWARNING: reaching max number of iterations\n");
|
741
741
|
}
|
742
742
|
|
743
743
|
// calculate rho
|
@@ -1006,7 +1006,7 @@ double Solver::calculate_rho()
|
|
1006
1006
|
//
|
1007
1007
|
// additional constraint: e^T \alpha = constant
|
1008
1008
|
//
|
1009
|
-
class Solver_NU
|
1009
|
+
class Solver_NU: public Solver
|
1010
1010
|
{
|
1011
1011
|
public:
|
1012
1012
|
Solver_NU() {}
|
@@ -2107,12 +2107,14 @@ svm_model *svm_train(const svm_problem *prob, const svm_parameter *param)
|
|
2107
2107
|
model->l = nSV;
|
2108
2108
|
model->SV = Malloc(svm_node *,nSV);
|
2109
2109
|
model->sv_coef[0] = Malloc(double,nSV);
|
2110
|
+
model->sv_indices = Malloc(int,nSV);
|
2110
2111
|
int j = 0;
|
2111
2112
|
for(i=0;i<prob->l;i++)
|
2112
2113
|
if(fabs(f.alpha[i]) > 0)
|
2113
2114
|
{
|
2114
2115
|
model->SV[j] = prob->x[i];
|
2115
2116
|
model->sv_coef[0][j] = f.alpha[i];
|
2117
|
+
model->sv_indices[j] = i+1;
|
2116
2118
|
++j;
|
2117
2119
|
}
|
2118
2120
|
|
@@ -2254,9 +2256,14 @@ svm_model *svm_train(const svm_problem *prob, const svm_parameter *param)
|
|
2254
2256
|
|
2255
2257
|
model->l = total_sv;
|
2256
2258
|
model->SV = Malloc(svm_node *,total_sv);
|
2259
|
+
model->sv_indices = Malloc(int,total_sv);
|
2257
2260
|
p = 0;
|
2258
2261
|
for(i=0;i<l;i++)
|
2259
|
-
if(nonzero[i])
|
2262
|
+
if(nonzero[i])
|
2263
|
+
{
|
2264
|
+
model->SV[p] = x[i];
|
2265
|
+
model->sv_indices[p++] = perm[i] + 1;
|
2266
|
+
}
|
2260
2267
|
|
2261
2268
|
int *nz_start = Malloc(int,nr_class);
|
2262
2269
|
nz_start[0] = 0;
|
@@ -2444,6 +2451,18 @@ void svm_get_labels(const svm_model *model, int* label)
|
|
2444
2451
|
label[i] = model->label[i];
|
2445
2452
|
}
|
2446
2453
|
|
2454
|
+
void svm_get_sv_indices(const svm_model *model, int* indices)
|
2455
|
+
{
|
2456
|
+
if (model->sv_indices != NULL)
|
2457
|
+
for(int i=0;i<model->l;i++)
|
2458
|
+
indices[i] = model->sv_indices[i];
|
2459
|
+
}
|
2460
|
+
|
2461
|
+
int svm_get_nr_sv(const svm_model *model)
|
2462
|
+
{
|
2463
|
+
return model->l;
|
2464
|
+
}
|
2465
|
+
|
2447
2466
|
double svm_get_svr_probability(const svm_model *model)
|
2448
2467
|
{
|
2449
2468
|
if ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) &&
|
data/ext/libsvm/svm.h
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#ifndef _LIBSVM_H
|
2
2
|
#define _LIBSVM_H
|
3
3
|
|
4
|
-
#define LIBSVM_VERSION
|
4
|
+
#define LIBSVM_VERSION 313
|
5
5
|
|
6
6
|
#ifdef __cplusplus
|
7
7
|
extern "C" {
|
@@ -59,6 +59,7 @@ struct svm_model
|
|
59
59
|
double *rho; /* constants in decision functions (rho[k*(k-1)/2]) */
|
60
60
|
double *probA; /* pariwise probability information */
|
61
61
|
double *probB;
|
62
|
+
int *sv_indices; /* sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to indicate SVs in the training set */
|
62
63
|
|
63
64
|
/* for classification only */
|
64
65
|
|
@@ -79,6 +80,8 @@ struct svm_model *svm_load_model(const char *model_file_name);
|
|
79
80
|
int svm_get_svm_type(const struct svm_model *model);
|
80
81
|
int svm_get_nr_class(const struct svm_model *model);
|
81
82
|
void svm_get_labels(const struct svm_model *model, int *label);
|
83
|
+
void svm_get_sv_indices(const struct svm_model *model, int *sv_indices);
|
84
|
+
int svm_get_nr_sv(const struct svm_model *model);
|
82
85
|
double svm_get_svr_probability(const struct svm_model *model);
|
83
86
|
|
84
87
|
double svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values);
|
data/lib/libsvm/version.rb
CHANGED
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.9
|
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: 2012-
|
13
|
+
date: 2012-11-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rake-compiler
|
17
|
-
requirement: &
|
17
|
+
requirement: &70287494349840 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :development
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70287494349840
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rspec
|
28
|
-
requirement: &
|
28
|
+
requirement: &70287494349340 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
version: 2.7.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70287494349340
|
37
37
|
description: libsvm and ruby without using swig
|
38
38
|
email:
|
39
39
|
- florian.ebeling@gmail.com
|
@@ -82,7 +82,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
82
82
|
version: '0'
|
83
83
|
segments:
|
84
84
|
- 0
|
85
|
-
hash:
|
85
|
+
hash: -1009595894930293011
|
86
86
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
87
|
none: false
|
88
88
|
requirements:
|
@@ -91,7 +91,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
91
|
version: '0'
|
92
92
|
segments:
|
93
93
|
- 0
|
94
|
-
hash:
|
94
|
+
hash: -1009595894930293011
|
95
95
|
requirements: []
|
96
96
|
rubyforge_project: rb-libsvm
|
97
97
|
rubygems_version: 1.8.10
|