rb-libsvm 1.2.0 → 1.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 430498716ebb529469fa73ece0ffe044bac7c04a
4
- data.tar.gz: d1effb4c07f3fa77418991d79ddf58ed5887ee8c
3
+ metadata.gz: a6628f92d9d2d643e194b46b8e225c5cade354eb
4
+ data.tar.gz: 58b9eee2167ec2d4eb60a6010c3d05fab7836c94
5
5
  SHA512:
6
- metadata.gz: 6546735dc65a8bff5215960cec78755eab7ddd4ecffe047bd1e4a6db485bfbcb970fed54b61581b259478b0451cbcca21b936ed2bc01f3c48af32240bd0be553
7
- data.tar.gz: 07c833fd03503d38e4b9a5c0a6ac6958e32b3ffcf8983f6ffe8663dd1914d9de9ee164f8725373d3957b9e264708783811929d49d69fce5bbfa461560d36400d
6
+ metadata.gz: 64ec0c4d492262ce7dbc4b28132c998a886e04b558beec111ee3118a7608732447d54641e5f9a400d7ed311d8cf8babfc07185e482359f998cd0d1174344fc78
7
+ data.tar.gz: 35956f1af2012ad765a3312b926f92e60af0c469924512db1325d0e52d97c6f9850cd8639fb02723615a6976a54d1c637ef51dd2baa232ee3c7eb6641f0091ce
data/.gitignore CHANGED
@@ -11,3 +11,5 @@ tags
11
11
  *~
12
12
  /.rbx
13
13
  /vendor
14
+ /.yardoc/
15
+ /doc/
data/.travis.yml CHANGED
@@ -2,6 +2,6 @@ language: ruby
2
2
  rvm:
3
3
  - 1.8.7
4
4
  - 1.9.3
5
- - 2.0.0
6
- - 2.1.1
5
+ - 2.1.5
6
+ - 2.2.0
7
7
  - ruby-head
data/README.md CHANGED
@@ -25,7 +25,7 @@ this gem. You should install the original package if you need them.
25
25
  It is helpful to consult the [README][] of the LIBSVM package for
26
26
  reference when configuring the training parameters.
27
27
 
28
- Currently this package includes libsvm version 3.18.
28
+ Currently this package includes libsvm version 3.20.
29
29
 
30
30
  ## Dependencies
31
31
 
data/ext/libsvm/libsvm.c CHANGED
@@ -85,7 +85,7 @@ static struct svm_node *example_to_internal(VALUE example_ary)
85
85
  if(x == 0) {
86
86
  rb_raise(rb_eNoMemError, "on Libsvm::Node allocation" " %s:%i", __FILE__,__LINE__);
87
87
  }
88
- /* loop it's element nodes */
88
+ /* loop its element nodes */
89
89
  for(j = 0; j < example_ary_len; ++j) {
90
90
  node = rb_ary_entry(example_ary,j);
91
91
  Data_Get_Struct(node,struct svm_node,node_struct);
@@ -122,12 +122,12 @@ static struct svm_node **examples_ary_to_internal(VALUE examples_ary)
122
122
  call-seq:
123
123
  problem.set_examples(labels, examples_array)
124
124
 
125
- double *y; // class (aka. label) of the example
126
- struct svm_node **x; // examples
125
+ Sets the examples and their label for a training set.
127
126
 
128
- This method sets the contents of an SVM Problem, which consists
129
- of lables (or classifications) and examples (or feature vectors).
130
- If those 2 don't match in length and ArgumentError is raised.
127
+ The indices of the arrays are supposed to correspond. If they don't
128
+ match in length an ArgumentError is raised.
129
+
130
+ @return [Integer] number of examples in the traning set
131
131
  */
132
132
  static VALUE cProblem_examples_set(VALUE obj,VALUE labels_ary,VALUE examples_ary)
133
133
  {
@@ -167,10 +167,14 @@ static VALUE cProblem_examples_set(VALUE obj,VALUE labels_ary,VALUE examples_ary
167
167
 
168
168
  /*
169
169
  call-seq:
170
- labels, array_of_arrays = problem.examples
170
+ problem.examples
171
+
172
+ Returns the array of labels and the array of corresponding examples
173
+ contained in this training set.
174
+
175
+ labels, array_of_examples = problem.examples
171
176
 
172
- double *y; // class/label of the example
173
- struct svm_node **x;
177
+ @return [[Array<Float>, Array<Array<Node>>]]
174
178
  */
175
179
  static VALUE cProblem_examples(VALUE problem) {
176
180
  struct svm_problem *prob;
@@ -249,21 +253,6 @@ rx_def_accessor(cSvmParameter,struct svm_parameter,double,cache_size);
249
253
  rx_def_accessor(cSvmParameter,struct svm_parameter,double,eps);
250
254
  rx_def_accessor_as(cSvmParameter,struct svm_parameter,double,C,c);
251
255
 
252
- /* Label weight.
253
-
254
- nr_weight, weight_label, and weight are used to change the penalty
255
- for some classes (If the weight for a class is not changed, it is
256
- set to 1). This is useful for training classifier using unbalanced
257
- input data or with asymmetric misclassification cost.
258
-
259
- nr_weight is the number of elements in the array weight_label and
260
- weight. Each weight[i] corresponds to weight_label[i], meaning that
261
- the penalty of class weight_label[i] is scaled by a factor of weight[i].
262
-
263
- If you do not want to change penalty for any of the classes,
264
- just set nr_weight to 0.
265
-
266
- */
267
256
  static VALUE cSvmParameter_label_weights_set(VALUE obj,VALUE weight_hash) {
268
257
  struct svm_parameter *param;
269
258
  int i;
@@ -316,8 +305,20 @@ rx_def_accessor(cSvmParameter,struct svm_parameter,double,p);
316
305
  rx_def_accessor(cSvmParameter,struct svm_parameter,int,shrinking);
317
306
  rx_def_accessor(cSvmParameter,struct svm_parameter,int,probability);
318
307
 
319
- /* Libsvm::Model */
320
-
308
+ /* call-seq:
309
+ * Model.train(problem, parameter)
310
+ *
311
+ * Train a model with given training set (problem) and training
312
+ * parameter object.
313
+ *
314
+ * Library function
315
+ * svm_train[https://github.com/cjlin1/libsvm/blob/master/README#L313]
316
+ *
317
+ * @param [Libsvm::Problem] the training set (problem)
318
+ * @param [Libsvm::SvmParameter] training parameter object
319
+ *
320
+ * @return [Libsvm::Model] the trained model
321
+ */
321
322
  static VALUE cModel_class_train(VALUE obj,VALUE problem,VALUE parameter) {
322
323
  const struct svm_problem *prob;
323
324
  const struct svm_parameter *param;
@@ -336,6 +337,19 @@ static VALUE cModel_class_train(VALUE obj,VALUE problem,VALUE parameter) {
336
337
  return Data_Wrap_Struct(cModel, 0, model_free, model);
337
338
  }
338
339
 
340
+ /* call-seq:
341
+ * model.predict(example)
342
+ *
343
+ * Classify an example and return the class (label).
344
+ *
345
+ * This is the class (label) value for a classifier model or the
346
+ * funtion value for a regression model. 1 or -1 for one-class model.
347
+ *
348
+ * Library function
349
+ * svm_predict[https://github.com/cjlin1/libsvm/blob/master/README#L511].
350
+ *
351
+ * @return [Float] predicted class label
352
+ */
339
353
  static VALUE cModel_predict(VALUE obj,VALUE example) {
340
354
  struct svm_node *x;
341
355
  struct svm_model *model;
@@ -350,6 +364,22 @@ static VALUE cModel_predict(VALUE obj,VALUE example) {
350
364
  return rb_float_new(class);
351
365
  }
352
366
 
367
+ /* call-seq:
368
+ * model.predict_probability(example)
369
+ *
370
+ * Classify an example and return both the label (or regression
371
+ * value), as well as the array of probability found for each class.
372
+ *
373
+ * The first element of the returned array contains the label. The
374
+ * second element is another array which contains the probability
375
+ * value found for each model class.
376
+ *
377
+ * Library function
378
+ * svm_predict_probability[https://github.com/cjlin1/libsvm/blob/master/README#L591].
379
+ *
380
+ * @return [Array<Float, Array<Float>>] predicted label and
381
+ * probability per class
382
+ */
353
383
  static VALUE cModel_predict_probability(VALUE obj,VALUE example) {
354
384
  struct svm_node *x;
355
385
  struct svm_model *model;
@@ -381,6 +411,15 @@ static VALUE cModel_predict_probability(VALUE obj,VALUE example) {
381
411
  return target;
382
412
  }
383
413
 
414
+ /* call-seq:
415
+ * model.save(filename)
416
+ *
417
+ * Saves the model to file `filename`. The format is the LIBSVM
418
+ * internal model representation.
419
+ *
420
+ * Library function
421
+ * svm_save_model[https://github.com/cjlin1/libsvm/blob/master/README#L621].
422
+ */
384
423
  static VALUE cModel_save(VALUE obj, VALUE filename)
385
424
  {
386
425
  const struct svm_model *model;
@@ -397,6 +436,14 @@ static VALUE cModel_save(VALUE obj, VALUE filename)
397
436
  return Qnil;
398
437
  }
399
438
 
439
+ /* Type of the model. Integer value, one of the constants in the
440
+ * {Libsvm::SvmType} module.
441
+ *
442
+ * Library function
443
+ * svm_get_svm_type[https://github.com/cjlin1/libsvm/blob/master/README#L533].
444
+ *
445
+ * @return [C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR]
446
+ */
400
447
  static VALUE cModel_svm_type(VALUE obj)
401
448
  {
402
449
  const struct svm_model *model;
@@ -404,20 +451,47 @@ static VALUE cModel_svm_type(VALUE obj)
404
451
  return INT2NUM(svm_get_svm_type(model));
405
452
  }
406
453
 
407
- static VALUE cModel_classes(VALUE obj)
454
+ /* Number of classes the model is configured and trained to
455
+ * predict. For single-class or regression models 2 is returned.
456
+ *
457
+ * Library function
458
+ * svm_get_nr_class[https://github.com/cjlin1/libsvm/blob/master/README#L538].
459
+ *
460
+ * @return [Integer] the number of classes
461
+ */
462
+ static VALUE cModel_classes_count(VALUE obj)
408
463
  {
409
464
  const struct svm_model *model;
410
465
  Data_Get_Struct(obj, struct svm_model, model);
411
466
  return INT2NUM(svm_get_nr_class(model));
412
467
  }
413
468
 
414
- static VALUE cModel_support_vectors(VALUE obj)
469
+ /*
470
+ * Number of the support vectors the model contains.
471
+ *
472
+ * This method binds to the function
473
+ * svm_get_nr_sv[https://github.com/cjlin1/libsvm/blob/master/README#L555].
474
+ *
475
+ * @return [Integer] the number of support vectors
476
+ */
477
+ static VALUE cModel_support_vectors_count(VALUE obj)
415
478
  {
416
479
  const struct svm_model *model;
417
480
  Data_Get_Struct(obj, struct svm_model, model);
418
481
  return INT2NUM(svm_get_nr_sv(model));
419
482
  }
420
483
 
484
+ /* call-seq:
485
+ * Model.load(filename) # => model
486
+ *
487
+ * Load a {Libsvm::Model} from a file
488
+ *
489
+ * This load a model from file `filename`. Format is the LIBSVM
490
+ * internal file representation of the model.
491
+ *
492
+ * @param filename [String] name of the model file
493
+ * @return [Libsvm::Model] the model
494
+ */
421
495
  static VALUE cModel_class_load(VALUE cls, VALUE filename)
422
496
  {
423
497
  struct svm_model *model;
@@ -427,6 +501,17 @@ static VALUE cModel_class_load(VALUE cls, VALUE filename)
427
501
  return Data_Wrap_Struct(cModel, 0, model_free, model);
428
502
  }
429
503
 
504
+ /* call-seq:
505
+ * Model.cross_validation(problem, parameter, num_fold)
506
+ *
507
+ * Perform a cross-validation with num_fold split of the training data
508
+ * contained in problem.
509
+ *
510
+ * @param problem [Libsvm::Problem] the training set
511
+ * @param parameter [Libsvm::SvmParameter] training parameters object
512
+ * @param num_fold [Integer] the number of splits to devide the traning set into
513
+ * @return [Array<Integer>] the labels for each instance in training set
514
+ */
430
515
  static VALUE cModel_class_cross_validation(VALUE cls, VALUE problem, VALUE parameter, VALUE num_fold)
431
516
  {
432
517
  const struct svm_problem *prob;
@@ -499,16 +584,36 @@ void Init_libsvm_ext() {
499
584
  rb_define_singleton_method(cModel, "load", cModel_class_load, 1);
500
585
  rb_define_method(cModel, "save", cModel_save, 1);
501
586
  rb_define_method(cModel, "svm_type", cModel_svm_type, 0);
502
- rb_define_method(cModel, "classes", cModel_classes, 0);
503
- rb_define_method(cModel, "support_vectors", cModel_support_vectors, 0);
587
+ rb_define_method(cModel, "classes_count", cModel_classes_count, 0);
588
+ rb_define_method(cModel, "support_vectors_count", cModel_support_vectors_count, 0);
504
589
  rb_define_method(cModel, "predict", cModel_predict, 1);
505
590
  rb_define_method(cModel, "predict_probability", cModel_predict_probability, 1);
506
591
 
592
+ /**
593
+ * Module with constants for values that are allowed for
594
+ * {Libsvm::SvmParameter#kernel_type}. The value controls what kind
595
+ * of kernel is used when training the model.
596
+ */
507
597
  mKernelType = rb_define_module_under(mLibsvm, "KernelType");
598
+ /**
599
+ * A linear kernel
600
+ */
508
601
  rb_define_const(mKernelType, "LINEAR", INT2NUM(LINEAR));
602
+ /**
603
+ * A polynomial kernel
604
+ */
509
605
  rb_define_const(mKernelType, "POLY", INT2NUM(POLY));
606
+ /**
607
+ * A redial basis function kernel
608
+ */
510
609
  rb_define_const(mKernelType, "RBF", INT2NUM(RBF));
610
+ /**
611
+ * A sigmoid kernel
612
+ */
511
613
  rb_define_const(mKernelType, "SIGMOID", INT2NUM(SIGMOID));
614
+ /**
615
+ * A precomputed kernel
616
+ */
512
617
  rb_define_const(mKernelType, "PRECOMPUTED", INT2NUM(PRECOMPUTED));
513
618
 
514
619
  mSvmType = rb_define_module_under(mLibsvm,"SvmType");
data/lib/libsvm.rb CHANGED
@@ -3,8 +3,36 @@ require 'libsvm/libsvm_ext'
3
3
  require 'libsvm/node'
4
4
 
5
5
  module Libsvm
6
+
7
+ # Module with constants for values that allowed for
8
+ # {Libsvm::SvmParameter#svm_type}. The value controls which kind of
9
+ # model is being trained.
10
+ #
11
+ # See the relevant section in the LIBSVM
12
+ # README[https://github.com/cjlin1/libsvm/blob/master/README#389]
13
+ # for more information.
14
+ module SvmType; end
15
+
6
16
  module CoreExtensions
7
17
  module Collection
18
+ # @!method to_example
19
+ #
20
+ # Converts this collection into an array of feature.
21
+ #
22
+ # { 1 => 0.4, 3 => 0.5, 5 => 0.9 }.to_example
23
+ # # => [#<Libsvm::Node: index=1, value=0.4>, #<Libsvm::Node: index=3, value=0.5>, #<Libsvm::Node: index=5, value=0.9>]
24
+ # { 1 => 0.4, 3 => 0.5, 5 => 0.9 }.to_example
25
+ # # => [#<Libsvm::Node: index=1, value=0.4>, #<Libsvm::Node: index=3, value=0.5>, #<Libsvm::Node: index=5, value=0.9>]
26
+ # [0.4, 0.5, 0.9].to_example
27
+ # # => [#<Libsvm::Node: index=0, value=0.4>, #<Libsvm::Node: index=1, value=0.5>, #<Libsvm::Node: index=2, value=0.9>]
28
+ # [ [1, 0.4], [3, 0.5], [5, 0.9] ].to_example
29
+ # # => [#<Libsvm::Node: index=1, value=0.4>, #<Libsvm::Node: index=3, value=0.5>, #<Libsvm::Node: index=5, value=0.9>]
30
+ #
31
+ # An array of features is the type used for classification and model learning.
32
+ #
33
+ # @note In an upcoming major release this core extension will become no longer included in Hash and Array, but rather be optional.
34
+ #
35
+ # @return [Array<Libsvm::Node>]
8
36
  def to_example
9
37
  Node.features(self)
10
38
  end
@@ -15,6 +43,7 @@ end
15
43
  class Hash
16
44
  include Libsvm::CoreExtensions::Collection
17
45
  end
46
+
18
47
  class Array
19
48
  include Libsvm::CoreExtensions::Collection
20
49
  end
@@ -0,0 +1,9 @@
1
+ module Libsvm
2
+ class Model
3
+ # @deprecated Use {#classes_count} instead
4
+ alias_method :classes, :classes_count
5
+
6
+ # @deprecated Use {#support_vectors_count} instead
7
+ alias_method :support_vectors, :support_vectors_count
8
+ end
9
+ end
data/lib/libsvm/node.rb CHANGED
@@ -1,15 +1,58 @@
1
1
  module Libsvm
2
+ # Represents a feature
3
+ #
4
+ # A feature has an index and a value.
5
+ #
6
+ # An array of features (Libsvm::Node instances) represents an
7
+ # example which can be classified, or in greater number can
8
+ # constitute the main part of a training set (Libsvm::Prolem).
9
+ #
10
+ # This class represents the struct
11
+ # svm_node[https://github.com/cjlin1/libsvm/blob/master/README#L357].
12
+ #
13
+ # @see Libsvm::Problem Libsvm::Problem, the training set class
2
14
  class Node
3
15
  class << self
16
+ # Create an array of features from collection or variable number
17
+ # of float values.
18
+ #
19
+ # Indices are converted to Integer, values are converted to
20
+ # Float. When passed a variable number of Float values or an
21
+ # array of Floast, the index is implied by the arguments
22
+ # position. Collection of tuples of hash arguments afford sparse
23
+ # feature arrays. These can represent features which don't have
24
+ # consecutive indices starting at zero.
25
+ #
26
+ # @overload features(0.3, 0.7, 0.8, ...)
27
+ # @param vararg variable number of value arguments, or
28
+ #
29
+ # @overload features([0.3, 0.7, 0.8, ...])
30
+ # @param array an array of values, or
31
+ #
32
+ # @overload features([[0, 0.3], [1, 0.7], [2, 0.8], ...])
33
+ # @param array an array of [index, value] tuples, or
34
+ #
35
+ # @overload features(0 => 0.3, 1 => 0.7, 2 => 0.8, 99 => 0.1)
36
+ # @param hash a hash from index to value
37
+ #
38
+ # @return [Array<Libsvm::Node>] example, i.e. an array of features
4
39
  def features(*vargs)
5
40
  array_of_nodes = []
6
41
  if vargs.size == 1
7
- if vargs.first.class == Array
8
- vargs.first.each_with_index do |value, index|
9
- array_of_nodes << Node.new(index.to_i, value.to_f)
42
+ argument = vargs.first
43
+ if argument.class == Array
44
+ case argument.first
45
+ when Array
46
+ argument.each do |pair|
47
+ array_of_nodes << Node.new(pair.first.to_i, pair.last.to_f)
48
+ end
49
+ else
50
+ argument.each_with_index do |value, index|
51
+ array_of_nodes << Node.new(index.to_i, value.to_f)
52
+ end
10
53
  end
11
- elsif vargs.first.class == Hash
12
- vargs.first.each do |index, value|
54
+ elsif argument.class == Hash
55
+ argument.each do |index, value|
13
56
  array_of_nodes << Node.new(index.to_i, value.to_f)
14
57
  end
15
58
  else
@@ -23,18 +66,44 @@ module Libsvm
23
66
  array_of_nodes
24
67
  end
25
68
 
69
+ # Create a feature node.
70
+ #
71
+ # Libsvm::Node[0, 1.1] # => #<Libsvm::Node: index=0, value=1.1>
72
+ #
73
+ # @return [Libsvm::Node]
26
74
  def [](index, value)
27
75
  new(index, value)
28
76
  end
29
77
  end
30
78
 
79
+ # @!attribute index
80
+ # The index identifies the feature for which this node represents a value
81
+
82
+ # @!attribute value
83
+ # The value of this feature in this instance
84
+
85
+ # Create a new feature node.
86
+ #
87
+ # Libsvm::Node.new(0, 1.1) # => #<Libsvm::Node: index=0, value=1.1>
31
88
  def initialize(index=0, value=0.0)
32
89
  self.index = index
33
90
  self.value = value
34
91
  end
35
92
 
93
+ # Compare features for equality.
94
+ #
95
+ # Nodes with equal index and value are equal.
96
+ #
97
+ # @return [Boolean]
36
98
  def ==(other)
37
99
  index == other.index && value == other.value
38
100
  end
101
+
102
+ def inspect # :nodoc:
103
+ vars = %w(index value).map { |name|
104
+ "#{name}=#{send(name)}"
105
+ }.join(", ")
106
+ "#<#{self.class}: #{vars}>"
107
+ end
39
108
  end
40
109
  end
@@ -0,0 +1,20 @@
1
+ module Libsvm
2
+ # This file only contains documentation comments. See
3
+ # ext/libsvm/libsvm.c for implementation.
4
+
5
+ # Represents a training set (alternatively called problem).
6
+ #
7
+ # In contains labels and examples in equal number.
8
+ #
9
+ # This class represents the struct
10
+ # svm_problem[https://github.com/cjlin1/libsvm/blob/master/README#L319].
11
+ class Problem
12
+
13
+ # @!attribute [r] l
14
+ #
15
+ # The number of labels and examples in this traning set. (The name
16
+ # is lower case L.)
17
+ #
18
+ # @return [Integer]
19
+ end
20
+ end
@@ -0,0 +1,115 @@
1
+ module Libsvm
2
+ # This file only contains documentation comments. See
3
+ # ext/libsvm/libsvm.c for implementation.
4
+
5
+ # Represents the learning parameter struct.
6
+ #
7
+ # The parameters in this object control how the SVM model is trained
8
+ # specifically.
9
+ #
10
+ # This class represents the struct
11
+ # svm_parameter[https://github.com/cjlin1/libsvm/blob/master/README#L366].
12
+ class SvmParameter
13
+
14
+ # @!attribute svm_type
15
+ #
16
+ # Type of SVM to use. This parameter controls if the model
17
+ # classifies or performs regression, if a one-class model is
18
+ # built, or if the NU variant of SVM is used.
19
+ #
20
+ # @see Libsvm::SvmType Libsvm::SvmType for value constants
21
+ # @return [C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR]
22
+
23
+ # @!attribute kernel_type
24
+ #
25
+ # Type of kernel to use.
26
+ #
27
+ # @see Libsvm::KernelType Libsvm::KernelType for kernel_type constants
28
+ # @return [LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED]
29
+
30
+
31
+ # @!attribute degree
32
+ #
33
+ # Degree parameter, relevant for POLY kernel type.
34
+ #
35
+ # @see Libsvm::KernelType Libsvm::KernelType for kernel_type constants
36
+ # @return [Integer]
37
+
38
+ # @!attribute gamma
39
+ #
40
+ # Gamma parameter, relevant for kernel types RBF, SIGMOID and POLY.
41
+ #
42
+ # @see Libsvm::KernelType Libsvm::KernelType for kernel_type constants
43
+ # @return [Float]
44
+
45
+ # @!attribute coef0
46
+ #
47
+ # Coeffectient 0, relevant for kernel types SIGMOID and POLY.
48
+ #
49
+ # @see Libsvm::KernelType Libsvm::KernelType for kernel_type constants
50
+ # @return [Float]
51
+
52
+ # @!attribute cache_size
53
+ #
54
+ # Size of the kernel cache, in megabytes.
55
+ #
56
+ # @return [Integer]
57
+
58
+ # @!attribute eps
59
+ #
60
+ # Stopping criterion parameter.
61
+ #
62
+ # @return [Float]
63
+
64
+ # @!attribute c
65
+ #
66
+ # The parameter C to use for this model.
67
+ #
68
+ # @return [Float]
69
+
70
+ # @!attribute label_weights
71
+ #
72
+ # Hash with indices of labels as keys and weights as values.
73
+ #
74
+ # These weights are used to change the penalty for specific labels
75
+ # (classes). If the weight for a label is not changed, it is set
76
+ # to 1.0.
77
+ #
78
+ # @return [Hash]
79
+
80
+ # @!attribute nu
81
+ #
82
+ # The nu parameter in nu-SVM, nu-SVR, and one-class-SVM (i.e. when
83
+ # the Libsvm::SvmParameter#svm_type is given as NU_SVC, NU_SVR or
84
+ # ONE_CLASS).
85
+ #
86
+ # @see Libsvm::SvmType Libsvm::SvmType for svm_type constants
87
+ # @return [Float]
88
+
89
+ # @!attribute p
90
+ #
91
+ # The epsilon in epsilon-insensitive loss function of epsilon-SVM
92
+ # regression (i.e. when the Libmsvm::SvmParameter#svm_type is
93
+ # given as Libsvm::SvmType::EPSILON_SVR).
94
+ #
95
+ # @return [Float]
96
+
97
+ # @!attribute shrinking
98
+ #
99
+ # Integer interpreted as boolean value.
100
+ #
101
+ # Controls if shrinking heuristics is used.
102
+ #
103
+ # @return [Integer] 0 meaning false, 1 true
104
+
105
+ # @!attribute probability
106
+ #
107
+ # Integer interpreted as boolean value.
108
+ #
109
+ # Controls if the model can create probability values for
110
+ # classifications in addition to the classification.
111
+ #
112
+ # @return [Integer] 0 meaning false, 1 true
113
+
114
+ end
115
+ end
@@ -1,3 +1,3 @@
1
1
  module Libsvm
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Create examples" do
4
+ describe "from a hash" do
5
+ example = { 11 => 0.11, 21 => 0.21, 101 => 0.99 }.to_example.sort_by(&:index)
6
+ example.should == Node.features({11 => 0.11, 21 => 0.21, 101 => 0.99 }).sort_by(&:index)
7
+ end
8
+
9
+ describe "from an array of tuples" do
10
+ it "can create example from array of pairs" do
11
+ example = [ [11, 0.11], [21, 0.21], [101, 0.99] ].to_example
12
+ example.should == Node.features({11 => 0.11, 21 => 0.21, 101 => 0.99 }).sort_by(&:index)
13
+ end
14
+ end
15
+ end
data/spec/model_spec.rb CHANGED
@@ -98,7 +98,7 @@ describe "A Libsvm model" do
98
98
  end
99
99
 
100
100
  it "can be asked for its number of classes (aka. labels)" do
101
- expect(@model.classes).to eq(2)
101
+ expect(@model.classes_count).to eq(2)
102
102
  end
103
103
  end
104
104
 
@@ -108,9 +108,9 @@ describe "A Libsvm model" do
108
108
  end
109
109
  end
110
110
 
111
- describe "support_vectors" do
111
+ describe "support_vectors_count" do
112
112
  it "returns count" do
113
- expect(@model.support_vectors).to eq(3)
113
+ expect(@model.support_vectors_count).to eq(3)
114
114
  end
115
115
  end
116
116
 
@@ -124,7 +124,7 @@ describe "A Libsvm model" do
124
124
  end
125
125
 
126
126
  it "produces probabilities for each class" do
127
- expect(probabilities.length).to eq(@model.classes)
127
+ expect(probabilities.length).to eq(@model.classes_count)
128
128
  end
129
129
 
130
130
  it "can predict probability" do
data/spec/node_spec.rb CHANGED
@@ -47,12 +47,14 @@ describe "A Node" do
47
47
  ary = Node.features([0.1, 0.2, 0.3, 0.4, 0.5])
48
48
  ary.map {|n| n.class.should == Node}
49
49
  ary.map {|n| n.value }.should == [0.1, 0.2, 0.3, 0.4, 0.5]
50
+ ary.map {|n| n.index }.should == [0, 1, 2, 3, 4]
50
51
  end
51
52
 
52
53
  it "class can create nodes from variable parameters" do
53
54
  ary = Node.features(0.1, 0.2, 0.3, 0.4, 0.5)
54
55
  ary.map {|n| Node.should === n }
55
56
  ary.map {|n| n.value }.should == [0.1, 0.2, 0.3, 0.4, 0.5]
57
+ ary.map {|n| n.index }.should == [0, 1, 2, 3, 4]
56
58
  end
57
59
 
58
60
  it "class can create nodes from hash" do
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.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - C. Florian Ebeling
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-11-16 00:00:00.000000000 Z
12
+ date: 2015-01-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake-compiler
@@ -67,9 +67,13 @@ files:
67
67
  - ext/libsvm/svm.cpp
68
68
  - ext/libsvm/svm.h
69
69
  - lib/libsvm.rb
70
+ - lib/libsvm/model.rb
70
71
  - lib/libsvm/node.rb
72
+ - lib/libsvm/problem.rb
73
+ - lib/libsvm/svm_parameter.rb
71
74
  - lib/libsvm/version.rb
72
75
  - rb-libsvm.gemspec
76
+ - spec/core_ext_spec.rb
73
77
  - spec/model_spec.rb
74
78
  - spec/node_spec.rb
75
79
  - spec/parameter_spec.rb
@@ -100,6 +104,7 @@ signing_key:
100
104
  specification_version: 4
101
105
  summary: Ruby bindings for LIBSVM
102
106
  test_files:
107
+ - spec/core_ext_spec.rb
103
108
  - spec/model_spec.rb
104
109
  - spec/node_spec.rb
105
110
  - spec/parameter_spec.rb