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