feedbackmine-libsvm-ruby 0.1.0 → 0.1.1

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.
Files changed (4) hide show
  1. data/README.txt +1 -1
  2. data/Rakefile +1 -1
  3. data/ext/main.cpp +48 -0
  4. metadata +1 -1
data/README.txt CHANGED
@@ -2,7 +2,7 @@ This is the Ruby binding for LIBSVM.
2
2
  Rudi Cilibrasi (cilibrar@cilibrar.com) wrote this Ruby binding.
3
3
  It makes it easy to use Support Vector Machines from Ruby.
4
4
 
5
- Improvements made by feedbackmine:
5
+ Improvements made by FeedbackMine (http://www.tweetjobsearch.com):
6
6
  Model#save
7
7
  Model#load
8
8
  Parameter#probability
data/Rakefile CHANGED
@@ -3,7 +3,7 @@ require 'hoe'
3
3
 
4
4
  EXT = "ext/blah.#{Hoe::DLEXT}"
5
5
 
6
- Hoe.new('libsvm-ruby', '0.1.0') do |p|
6
+ Hoe.new('libsvm-ruby', '0.1.1') do |p|
7
7
  p.author = 'FeedbackMine'
8
8
  p.email = 'feedbackmine@feedbackmine.com'
9
9
  p.url = 'http://www.tweetjobsearch.com'
data/ext/main.cpp CHANGED
@@ -44,6 +44,24 @@ VALUE svmpa_new(VALUE cl);
44
44
  * value-index svm_node's.
45
45
  */
46
46
  struct svm_node *rubyArrayToNodelist(VALUE xs)
47
+ {
48
+ //struct obstack xso;
49
+ struct svm_node *n;
50
+ int i;
51
+ int len = RARRAY(xs)->len;
52
+ n = (struct svm_node *) calloc(sizeof(struct svm_node), len+1);
53
+ for (i = 0; i < len; ++i) {
54
+ n[i].value = NUM2DBL(rb_ary_entry(xs, i));
55
+ n[i].index = i;
56
+ }
57
+ n[i].value = 0;
58
+ n[i].index = -1;
59
+
60
+ return n;
61
+ }
62
+
63
+ /*value is harcoded as 1, array is sorted features*/
64
+ struct svm_node *rubyArrayToNodelist2(VALUE xs)
47
65
  {
48
66
  //struct obstack xso;
49
67
  struct svm_node *n;
@@ -60,6 +78,7 @@ struct svm_node *rubyArrayToNodelist(VALUE xs)
60
78
  return n;
61
79
  }
62
80
 
81
+
63
82
  /*
64
83
  * Serializes an SVMParameter object
65
84
  */
@@ -539,6 +558,20 @@ static VALUE svmpm_predict(VALUE self, VALUE xs)
539
558
  return rb_float_new(result);
540
559
  }
541
560
 
561
+ /*
562
+ * Predicts a value (regression or classification) based on an input vector
563
+ */
564
+ static VALUE svmpm_predict2(VALUE self, VALUE xs)
565
+ {
566
+ double result;
567
+ struct RSVM_Model *rp;
568
+ Data_Get_Struct(self, struct RSVM_Model, rp);
569
+ struct svm_node *x = rubyArrayToNodelist2(xs);
570
+ result = svm_predict(rp->m, x);
571
+ free(x);
572
+ return rb_float_new(result);
573
+ }
574
+
542
575
  static VALUE svmpm_save(VALUE self, VALUE filename)
543
576
  {
544
577
  int result;
@@ -619,6 +652,19 @@ static VALUE svmpr_addex(VALUE self, VALUE y, VALUE xs)
619
652
  return Qnil;
620
653
  }
621
654
 
655
+ static VALUE svmpr_addex2(VALUE self, VALUE y, VALUE xs)
656
+ {
657
+ struct RSVM_Problem *rp;
658
+ struct svm_node *fini;
659
+ double yd;
660
+ Data_Get_Struct(self, struct RSVM_Problem, rp);
661
+ yd = NUM2DBL(y);
662
+ fini = rubyArrayToNodelist2(xs);
663
+ addExample(rp, yd, fini);
664
+ if (rp->k == 0) rp->k = RARRAY(xs)->len;
665
+ return Qnil;
666
+ }
667
+
622
668
  /* To be removed in next version */
623
669
  struct svm_model
624
670
  {
@@ -663,6 +709,7 @@ void Init_SVM()
663
709
  rb_define_method(cSVMProblem, "initialize", (VALUE (*) (...))svmpr_init, 0);
664
710
  rb_define_method(cSVMProblem, "size", (VALUE (*) (...))svmpr_size, 0);
665
711
  rb_define_method(cSVMProblem, "addExample", (VALUE (*) (...))svmpr_addex, 2);
712
+ rb_define_method(cSVMProblem, "addExample2", (VALUE (*) (...))svmpr_addex2, 2);
666
713
 
667
714
  rb_define_const(mSVM, "C_SVC", INT2FIX(C_SVC));
668
715
  rb_define_const(mSVM, "NU_SVC", INT2FIX(NU_SVC));
@@ -717,6 +764,7 @@ void Init_SVM()
717
764
 
718
765
  rb_define_singleton_method(cSVMModel, "new", (VALUE (*) (...))svmpm_new, 2);
719
766
  rb_define_method(cSVMModel, "predict", (VALUE (*) (...))svmpm_predict, 1);
767
+ rb_define_method(cSVMModel, "predict2", (VALUE (*) (...))svmpm_predict2, 1);
720
768
  rb_define_method(cSVMModel, "predict_probability", (VALUE (*) (...))svmpm_predict_probability, 1);
721
769
  rb_define_method(cSVMModel, "predict_values", (VALUE (*) (...))svmpm_predict_values, 1);
722
770
  rb_define_method(cSVMModel, "svcount", (VALUE (*) (...))svmpm_svcount, 0);
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feedbackmine-libsvm-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - FeedbackMine