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.
- data/README.txt +1 -1
- data/Rakefile +1 -1
- data/ext/main.cpp +48 -0
- 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
|
5
|
+
Improvements made by FeedbackMine (http://www.tweetjobsearch.com):
|
6
6
|
Model#save
|
7
7
|
Model#load
|
8
8
|
Parameter#probability
|
data/Rakefile
CHANGED
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);
|