rb-libsvm 1.1.4 → 1.1.5
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 +4 -4
 - data/.travis.yml +4 -3
 - data/README.md +2 -2
 - data/ext/libsvm/svm.cpp +77 -71
 - data/ext/libsvm/svm.h +1 -1
 - data/lib/libsvm/version.rb +1 -1
 - data/rb-libsvm.gemspec +1 -1
 - metadata +4 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 50ef30c4d3cfe8e3785f6c408a48a34b5ff585b2
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 80bbaef88fe9e9738b61fde4804c592e4e053367
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 1b8a9ff101bdc72026634f744583f858f1963b7241a18068a22fdd3ac0d84413937ed23093a34507a10f42052e9a73b79c396e85bf6e4b542c8c6c96249ea79a
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 13de67e9c95836e814cc88077f8e9c59977f27dd9fa4e4171591c60f93059216046676a4ecc933ab9e37a47fb2e6b795e1aed45ccf82e0b0a8ef29bb8abd3ebb
         
     | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -21,7 +21,7 @@ this gem. You should install the original package if you need them. 
     | 
|
| 
       21 
21 
     | 
    
         
             
            It is helpful to consult the [README][] of the LIBSVM package for
         
     | 
| 
       22 
22 
     | 
    
         
             
            reference when configuring the training parameters.
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
       24 
     | 
    
         
            -
            Currently this package includes libsvm version 3. 
     | 
| 
      
 24 
     | 
    
         
            +
            Currently this package includes libsvm version 3.18.
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
       26 
26 
     | 
    
         
             
            ## Dependencies
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
         @@ -110,4 +110,4 @@ http://www.igvita.com/2008/01/07/support-vector-machines-svm-in-ruby/ 
     | 
|
| 
       110 
110 
     | 
    
         | 
| 
       111 
111 
     | 
    
         
             
            [ruby-svm]:     http://sourceforge.net/projects/rubysvm/
         
     | 
| 
       112 
112 
     | 
    
         | 
| 
       113 
     | 
    
         
            -
            [README]:       https://github.com/ 
     | 
| 
      
 113 
     | 
    
         
            +
            [README]:       https://github.com/cjlin1/libsvm/blob/master/README
         
     | 
    
        data/ext/libsvm/svm.cpp
    CHANGED
    
    | 
         @@ -74,7 +74,7 @@ public: 
     | 
|
| 
       74 
74 
     | 
    
         
             
            	// return some position p where [p,len) need to be filled
         
     | 
| 
       75 
75 
     | 
    
         
             
            	// (p >= len if nothing needs to be filled)
         
     | 
| 
       76 
76 
     | 
    
         
             
            	int get_data(const int index, Qfloat **data, int len);
         
     | 
| 
       77 
     | 
    
         
            -
            	void swap_index(int i, int j); 
     | 
| 
      
 77 
     | 
    
         
            +
            	void swap_index(int i, int j);
         
     | 
| 
       78 
78 
     | 
    
         
             
            private:
         
     | 
| 
       79 
79 
     | 
    
         
             
            	int l;
         
     | 
| 
       80 
80 
     | 
    
         
             
            	long int size;
         
     | 
| 
         @@ -444,7 +444,7 @@ protected: 
     | 
|
| 
       444 
444 
     | 
    
         
             
            	virtual double calculate_rho();
         
     | 
| 
       445 
445 
     | 
    
         
             
            	virtual void do_shrinking();
         
     | 
| 
       446 
446 
     | 
    
         
             
            private:
         
     | 
| 
       447 
     | 
    
         
            -
            	bool be_shrunk(int i, double Gmax1, double Gmax2); 
     | 
| 
      
 447 
     | 
    
         
            +
            	bool be_shrunk(int i, double Gmax1, double Gmax2);
         
     | 
| 
       448 
448 
     | 
    
         
             
            };
         
     | 
| 
       449 
449 
     | 
    
         | 
| 
       450 
450 
     | 
    
         
             
            void Solver::swap_index(int i, int j)
         
     | 
| 
         @@ -833,7 +833,7 @@ int Solver::select_working_set(int &out_i, int &out_j) 
     | 
|
| 
       833 
833 
     | 
    
         
             
            					Gmax2 = G[j];
         
     | 
| 
       834 
834 
     | 
    
         
             
            				if (grad_diff > 0)
         
     | 
| 
       835 
835 
     | 
    
         
             
            				{
         
     | 
| 
       836 
     | 
    
         
            -
            					double obj_diff; 
     | 
| 
      
 836 
     | 
    
         
            +
            					double obj_diff;
         
     | 
| 
       837 
837 
     | 
    
         
             
            					double quad_coef = QD[i]+QD[j]-2.0*y[i]*Q_i[j];
         
     | 
| 
       838 
838 
     | 
    
         
             
            					if (quad_coef > 0)
         
     | 
| 
       839 
839 
     | 
    
         
             
            						obj_diff = -(grad_diff*grad_diff)/quad_coef;
         
     | 
| 
         @@ -857,7 +857,7 @@ int Solver::select_working_set(int &out_i, int &out_j) 
     | 
|
| 
       857 
857 
     | 
    
         
             
            					Gmax2 = -G[j];
         
     | 
| 
       858 
858 
     | 
    
         
             
            				if (grad_diff > 0)
         
     | 
| 
       859 
859 
     | 
    
         
             
            				{
         
     | 
| 
       860 
     | 
    
         
            -
            					double obj_diff; 
     | 
| 
      
 860 
     | 
    
         
            +
            					double obj_diff;
         
     | 
| 
       861 
861 
     | 
    
         
             
            					double quad_coef = QD[i]+QD[j]+2.0*y[i]*Q_i[j];
         
     | 
| 
       862 
862 
     | 
    
         
             
            					if (quad_coef > 0)
         
     | 
| 
       863 
863 
     | 
    
         
             
            						obj_diff = -(grad_diff*grad_diff)/quad_coef;
         
     | 
| 
         @@ -1085,7 +1085,7 @@ int Solver_NU::select_working_set(int &out_i, int &out_j) 
     | 
|
| 
       1085 
1085 
     | 
    
         
             
            					Gmaxp2 = G[j];
         
     | 
| 
       1086 
1086 
     | 
    
         
             
            				if (grad_diff > 0)
         
     | 
| 
       1087 
1087 
     | 
    
         
             
            				{
         
     | 
| 
       1088 
     | 
    
         
            -
            					double obj_diff; 
     | 
| 
      
 1088 
     | 
    
         
            +
            					double obj_diff;
         
     | 
| 
       1089 
1089 
     | 
    
         
             
            					double quad_coef = QD[ip]+QD[j]-2*Q_ip[j];
         
     | 
| 
       1090 
1090 
     | 
    
         
             
            					if (quad_coef > 0)
         
     | 
| 
       1091 
1091 
     | 
    
         
             
            						obj_diff = -(grad_diff*grad_diff)/quad_coef;
         
     | 
| 
         @@ -1109,7 +1109,7 @@ int Solver_NU::select_working_set(int &out_i, int &out_j) 
     | 
|
| 
       1109 
1109 
     | 
    
         
             
            					Gmaxn2 = -G[j];
         
     | 
| 
       1110 
1110 
     | 
    
         
             
            				if (grad_diff > 0)
         
     | 
| 
       1111 
1111 
     | 
    
         
             
            				{
         
     | 
| 
       1112 
     | 
    
         
            -
            					double obj_diff; 
     | 
| 
      
 1112 
     | 
    
         
            +
            					double obj_diff;
         
     | 
| 
       1113 
1113 
     | 
    
         
             
            					double quad_coef = QD[in]+QD[j]-2*Q_in[j];
         
     | 
| 
       1114 
1114 
     | 
    
         
             
            					if (quad_coef > 0)
         
     | 
| 
       1115 
1115 
     | 
    
         
             
            						obj_diff = -(grad_diff*grad_diff)/quad_coef;
         
     | 
| 
         @@ -1641,7 +1641,7 @@ static void solve_nu_svr( 
     | 
|
| 
       1641 
1641 
     | 
    
         
             
            struct decision_function
         
     | 
| 
       1642 
1642 
     | 
    
         
             
            {
         
     | 
| 
       1643 
1643 
     | 
    
         
             
            	double *alpha;
         
     | 
| 
       1644 
     | 
    
         
            -
            	double rho; 
     | 
| 
      
 1644 
     | 
    
         
            +
            	double rho;
         
     | 
| 
       1645 
1645 
     | 
    
         
             
            };
         
     | 
| 
       1646 
1646 
     | 
    
         | 
| 
       1647 
1647 
     | 
    
         
             
            static decision_function svm_train_one(
         
     | 
| 
         @@ -1722,7 +1722,7 @@ static void sigmoid_train( 
     | 
|
| 
       1722 
1722 
     | 
    
         
             
            	double *t=Malloc(double,l);
         
     | 
| 
       1723 
1723 
     | 
    
         
             
            	double fApB,p,q,h11,h22,h21,g1,g2,det,dA,dB,gd,stepsize;
         
     | 
| 
       1724 
1724 
     | 
    
         
             
            	double newA,newB,newf,d1,d2;
         
     | 
| 
       1725 
     | 
    
         
            -
            	int iter; 
     | 
| 
      
 1725 
     | 
    
         
            +
            	int iter;
         
     | 
| 
       1726 
1726 
     | 
    
         | 
| 
       1727 
1727 
     | 
    
         
             
            	// Initial Point and Initial Fun Value
         
     | 
| 
       1728 
1728 
     | 
    
         
             
            	A=0.0; B=log((prior0+1.0)/(prior1+1.0));
         
     | 
| 
         @@ -1961,7 +1961,7 @@ static void svm_binary_svc_probability( 
     | 
|
| 
       1961 
1961 
     | 
    
         
             
            			struct svm_model *submodel = svm_train(&subprob,&subparam);
         
     | 
| 
       1962 
1962 
     | 
    
         
             
            			for(j=begin;j<end;j++)
         
     | 
| 
       1963 
1963 
     | 
    
         
             
            			{
         
     | 
| 
       1964 
     | 
    
         
            -
            				svm_predict_values(submodel,prob->x[perm[j]],&(dec_values[perm[j]])); 
     | 
| 
      
 1964 
     | 
    
         
            +
            				svm_predict_values(submodel,prob->x[perm[j]],&(dec_values[perm[j]]));
         
     | 
| 
       1965 
1965 
     | 
    
         
             
            				// ensure +1 -1 order; reason not using CV subroutine
         
     | 
| 
       1966 
1966 
     | 
    
         
             
            				dec_values[perm[j]] *= submodel->label[0];
         
     | 
| 
       1967 
1967 
     | 
    
         
             
            			}		
         
     | 
| 
         @@ -2018,7 +2018,7 @@ static void svm_group_classes(const svm_problem *prob, int *nr_class_ret, int ** 
     | 
|
| 
       2018 
2018 
     | 
    
         
             
            	int nr_class = 0;
         
     | 
| 
       2019 
2019 
     | 
    
         
             
            	int *label = Malloc(int,max_nr_class);
         
     | 
| 
       2020 
2020 
     | 
    
         
             
            	int *count = Malloc(int,max_nr_class);
         
     | 
| 
       2021 
     | 
    
         
            -
            	int *data_label = Malloc(int,l); 
     | 
| 
      
 2021 
     | 
    
         
            +
            	int *data_label = Malloc(int,l);
         
     | 
| 
       2022 
2022 
     | 
    
         
             
            	int i;
         
     | 
| 
       2023 
2023 
     | 
    
         | 
| 
       2024 
2024 
     | 
    
         
             
            	for(i=0;i<l;i++)
         
     | 
| 
         @@ -2394,9 +2394,9 @@ void svm_cross_validation(const svm_problem *prob, const svm_parameter *param, i 
     | 
|
| 
       2394 
2394 
     | 
    
         
             
            		fold_start[0]=0;
         
     | 
| 
       2395 
2395 
     | 
    
         
             
            		for (i=1;i<=nr_fold;i++)
         
     | 
| 
       2396 
2396 
     | 
    
         
             
            			fold_start[i] = fold_start[i-1]+fold_count[i-1];
         
     | 
| 
       2397 
     | 
    
         
            -
            		free(start); 
     | 
| 
      
 2397 
     | 
    
         
            +
            		free(start);
         
     | 
| 
       2398 
2398 
     | 
    
         
             
            		free(label);
         
     | 
| 
       2399 
     | 
    
         
            -
            		free(count); 
     | 
| 
      
 2399 
     | 
    
         
            +
            		free(count);
         
     | 
| 
       2400 
2400 
     | 
    
         
             
            		free(index);
         
     | 
| 
       2401 
2401 
     | 
    
         
             
            		free(fold_count);
         
     | 
| 
       2402 
2402 
     | 
    
         
             
            	}
         
     | 
| 
         @@ -2443,7 +2443,7 @@ void svm_cross_validation(const svm_problem *prob, const svm_parameter *param, i 
     | 
|
| 
       2443 
2443 
     | 
    
         
             
            			double *prob_estimates=Malloc(double,svm_get_nr_class(submodel));
         
     | 
| 
       2444 
2444 
     | 
    
         
             
            			for(j=begin;j<end;j++)
         
     | 
| 
       2445 
2445 
     | 
    
         
             
            				target[perm[j]] = svm_predict_probability(submodel,prob->x[perm[j]],prob_estimates);
         
     | 
| 
       2446 
     | 
    
         
            -
            			free(prob_estimates); 
     | 
| 
      
 2446 
     | 
    
         
            +
            			free(prob_estimates);
         
     | 
| 
       2447 
2447 
     | 
    
         
             
            		}
         
     | 
| 
       2448 
2448 
     | 
    
         
             
            		else
         
     | 
| 
       2449 
2449 
     | 
    
         
             
            			for(j=begin;j<end;j++)
         
     | 
| 
         @@ -2453,7 +2453,7 @@ void svm_cross_validation(const svm_problem *prob, const svm_parameter *param, i 
     | 
|
| 
       2453 
2453 
     | 
    
         
             
            		free(subprob.y);
         
     | 
| 
       2454 
2454 
     | 
    
         
             
            	}		
         
     | 
| 
       2455 
2455 
     | 
    
         
             
            	free(fold_start);
         
     | 
| 
       2456 
     | 
    
         
            -
            	free(perm); 
     | 
| 
      
 2456 
     | 
    
         
            +
            	free(perm);
         
     | 
| 
       2457 
2457 
     | 
    
         
             
            }
         
     | 
| 
       2458 
2458 
     | 
    
         | 
| 
       2459 
2459 
     | 
    
         | 
| 
         @@ -2621,7 +2621,7 @@ double svm_predict_probability( 
     | 
|
| 
       2621 
2621 
     | 
    
         
             
            		for(i=0;i<nr_class;i++)
         
     | 
| 
       2622 
2622 
     | 
    
         
             
            			free(pairwise_prob[i]);
         
     | 
| 
       2623 
2623 
     | 
    
         
             
            		free(dec_values);
         
     | 
| 
       2624 
     | 
    
         
            -
            		free(pairwise_prob); 
     | 
| 
      
 2624 
     | 
    
         
            +
            		free(pairwise_prob);
         
     | 
| 
       2625 
2625 
     | 
    
         
             
            		return model->label[prob_max_idx];
         
     | 
| 
       2626 
2626 
     | 
    
         
             
            	}
         
     | 
| 
       2627 
2627 
     | 
    
         
             
            	else 
         
     | 
| 
         @@ -2753,33 +2753,25 @@ static char* readline(FILE *input) 
     | 
|
| 
       2753 
2753 
     | 
    
         
             
            	return line;
         
     | 
| 
       2754 
2754 
     | 
    
         
             
            }
         
     | 
| 
       2755 
2755 
     | 
    
         | 
| 
       2756 
     | 
    
         
            -
             
     | 
| 
      
 2756 
     | 
    
         
            +
            //
         
     | 
| 
      
 2757 
     | 
    
         
            +
            // FSCANF helps to handle fscanf failures.
         
     | 
| 
      
 2758 
     | 
    
         
            +
            // Its do-while block avoids the ambiguity when
         
     | 
| 
      
 2759 
     | 
    
         
            +
            // if (...)
         
     | 
| 
      
 2760 
     | 
    
         
            +
            //    FSCANF();
         
     | 
| 
      
 2761 
     | 
    
         
            +
            // is used
         
     | 
| 
      
 2762 
     | 
    
         
            +
            //
         
     | 
| 
      
 2763 
     | 
    
         
            +
            #define FSCANF(_stream, _format, _var) do{ if (fscanf(_stream, _format, _var) != 1) return false; }while(0)
         
     | 
| 
      
 2764 
     | 
    
         
            +
            bool read_model_header(FILE *fp, svm_model* model)
         
     | 
| 
       2757 
2765 
     | 
    
         
             
            {
         
     | 
| 
       2758 
     | 
    
         
            -
            	FILE *fp = fopen(model_file_name,"rb");
         
     | 
| 
       2759 
     | 
    
         
            -
            	if(fp==NULL) return NULL;
         
     | 
| 
       2760 
     | 
    
         
            -
             
     | 
| 
       2761 
     | 
    
         
            -
            	char *old_locale = strdup(setlocale(LC_ALL, NULL));
         
     | 
| 
       2762 
     | 
    
         
            -
            	setlocale(LC_ALL, "C");
         
     | 
| 
       2763 
     | 
    
         
            -
             
     | 
| 
       2764 
     | 
    
         
            -
            	// read parameters
         
     | 
| 
       2765 
     | 
    
         
            -
             
     | 
| 
       2766 
     | 
    
         
            -
            	svm_model *model = Malloc(svm_model,1);
         
     | 
| 
       2767 
2766 
     | 
    
         
             
            	svm_parameter& param = model->param;
         
     | 
| 
       2768 
     | 
    
         
            -
            	model->rho = NULL;
         
     | 
| 
       2769 
     | 
    
         
            -
            	model->probA = NULL;
         
     | 
| 
       2770 
     | 
    
         
            -
            	model->probB = NULL;
         
     | 
| 
       2771 
     | 
    
         
            -
            	model->sv_indices = NULL;
         
     | 
| 
       2772 
     | 
    
         
            -
            	model->label = NULL;
         
     | 
| 
       2773 
     | 
    
         
            -
            	model->nSV = NULL;
         
     | 
| 
       2774 
     | 
    
         
            -
             
     | 
| 
       2775 
2767 
     | 
    
         
             
            	char cmd[81];
         
     | 
| 
       2776 
2768 
     | 
    
         
             
            	while(1)
         
     | 
| 
       2777 
2769 
     | 
    
         
             
            	{
         
     | 
| 
       2778 
     | 
    
         
            -
            		 
     | 
| 
      
 2770 
     | 
    
         
            +
            		FSCANF(fp,"%80s",cmd);
         
     | 
| 
       2779 
2771 
     | 
    
         | 
| 
       2780 
2772 
     | 
    
         
             
            		if(strcmp(cmd,"svm_type")==0)
         
     | 
| 
       2781 
2773 
     | 
    
         
             
            		{
         
     | 
| 
       2782 
     | 
    
         
            -
            			 
     | 
| 
      
 2774 
     | 
    
         
            +
            			FSCANF(fp,"%80s",cmd);
         
     | 
| 
       2783 
2775 
     | 
    
         
             
            			int i;
         
     | 
| 
       2784 
2776 
     | 
    
         
             
            			for(i=0;svm_type_table[i];i++)
         
     | 
| 
       2785 
2777 
     | 
    
         
             
            			{
         
     | 
| 
         @@ -2792,19 +2784,12 @@ svm_model *svm_load_model(const char *model_file_name) 
     | 
|
| 
       2792 
2784 
     | 
    
         
             
            			if(svm_type_table[i] == NULL)
         
     | 
| 
       2793 
2785 
     | 
    
         
             
            			{
         
     | 
| 
       2794 
2786 
     | 
    
         
             
            				fprintf(stderr,"unknown svm type.\n");
         
     | 
| 
       2795 
     | 
    
         
            -
            				
         
     | 
| 
       2796 
     | 
    
         
            -
            				setlocale(LC_ALL, old_locale);
         
     | 
| 
       2797 
     | 
    
         
            -
            				free(old_locale);
         
     | 
| 
       2798 
     | 
    
         
            -
            				free(model->rho);
         
     | 
| 
       2799 
     | 
    
         
            -
            				free(model->label);
         
     | 
| 
       2800 
     | 
    
         
            -
            				free(model->nSV);
         
     | 
| 
       2801 
     | 
    
         
            -
            				free(model);
         
     | 
| 
       2802 
     | 
    
         
            -
            				return NULL;
         
     | 
| 
      
 2787 
     | 
    
         
            +
            				return false;
         
     | 
| 
       2803 
2788 
     | 
    
         
             
            			}
         
     | 
| 
       2804 
2789 
     | 
    
         
             
            		}
         
     | 
| 
       2805 
2790 
     | 
    
         
             
            		else if(strcmp(cmd,"kernel_type")==0)
         
     | 
| 
       2806 
2791 
     | 
    
         
             
            		{		
         
     | 
| 
       2807 
     | 
    
         
            -
            			 
     | 
| 
      
 2792 
     | 
    
         
            +
            			FSCANF(fp,"%80s",cmd);
         
     | 
| 
       2808 
2793 
     | 
    
         
             
            			int i;
         
     | 
| 
       2809 
2794 
     | 
    
         
             
            			for(i=0;kernel_type_table[i];i++)
         
     | 
| 
       2810 
2795 
     | 
    
         
             
            			{
         
     | 
| 
         @@ -2816,85 +2801,106 @@ svm_model *svm_load_model(const char *model_file_name) 
     | 
|
| 
       2816 
2801 
     | 
    
         
             
            			}
         
     | 
| 
       2817 
2802 
     | 
    
         
             
            			if(kernel_type_table[i] == NULL)
         
     | 
| 
       2818 
2803 
     | 
    
         
             
            			{
         
     | 
| 
       2819 
     | 
    
         
            -
            				fprintf(stderr,"unknown kernel function.\n");
         
     | 
| 
       2820 
     | 
    
         
            -
            				
         
     | 
| 
       2821 
     | 
    
         
            -
            				setlocale(LC_ALL, old_locale);
         
     | 
| 
       2822 
     | 
    
         
            -
            				free(old_locale);
         
     | 
| 
       2823 
     | 
    
         
            -
            				free(model->rho);
         
     | 
| 
       2824 
     | 
    
         
            -
            				free(model->label);
         
     | 
| 
       2825 
     | 
    
         
            -
            				free(model->nSV);
         
     | 
| 
       2826 
     | 
    
         
            -
            				free(model);
         
     | 
| 
       2827 
     | 
    
         
            -
            				return NULL;
         
     | 
| 
      
 2804 
     | 
    
         
            +
            				fprintf(stderr,"unknown kernel function.\n");	
         
     | 
| 
      
 2805 
     | 
    
         
            +
            				return false;
         
     | 
| 
       2828 
2806 
     | 
    
         
             
            			}
         
     | 
| 
       2829 
2807 
     | 
    
         
             
            		}
         
     | 
| 
       2830 
2808 
     | 
    
         
             
            		else if(strcmp(cmd,"degree")==0)
         
     | 
| 
       2831 
     | 
    
         
            -
            			 
     | 
| 
      
 2809 
     | 
    
         
            +
            			FSCANF(fp,"%d",¶m.degree);
         
     | 
| 
       2832 
2810 
     | 
    
         
             
            		else if(strcmp(cmd,"gamma")==0)
         
     | 
| 
       2833 
     | 
    
         
            -
            			 
     | 
| 
      
 2811 
     | 
    
         
            +
            			FSCANF(fp,"%lf",¶m.gamma);
         
     | 
| 
       2834 
2812 
     | 
    
         
             
            		else if(strcmp(cmd,"coef0")==0)
         
     | 
| 
       2835 
     | 
    
         
            -
            			 
     | 
| 
      
 2813 
     | 
    
         
            +
            			FSCANF(fp,"%lf",¶m.coef0);
         
     | 
| 
       2836 
2814 
     | 
    
         
             
            		else if(strcmp(cmd,"nr_class")==0)
         
     | 
| 
       2837 
     | 
    
         
            -
            			 
     | 
| 
      
 2815 
     | 
    
         
            +
            			FSCANF(fp,"%d",&model->nr_class);
         
     | 
| 
       2838 
2816 
     | 
    
         
             
            		else if(strcmp(cmd,"total_sv")==0)
         
     | 
| 
       2839 
     | 
    
         
            -
            			 
     | 
| 
      
 2817 
     | 
    
         
            +
            			FSCANF(fp,"%d",&model->l);
         
     | 
| 
       2840 
2818 
     | 
    
         
             
            		else if(strcmp(cmd,"rho")==0)
         
     | 
| 
       2841 
2819 
     | 
    
         
             
            		{
         
     | 
| 
       2842 
2820 
     | 
    
         
             
            			int n = model->nr_class * (model->nr_class-1)/2;
         
     | 
| 
       2843 
2821 
     | 
    
         
             
            			model->rho = Malloc(double,n);
         
     | 
| 
       2844 
2822 
     | 
    
         
             
            			for(int i=0;i<n;i++)
         
     | 
| 
       2845 
     | 
    
         
            -
            				 
     | 
| 
      
 2823 
     | 
    
         
            +
            				FSCANF(fp,"%lf",&model->rho[i]);
         
     | 
| 
       2846 
2824 
     | 
    
         
             
            		}
         
     | 
| 
       2847 
2825 
     | 
    
         
             
            		else if(strcmp(cmd,"label")==0)
         
     | 
| 
       2848 
2826 
     | 
    
         
             
            		{
         
     | 
| 
       2849 
2827 
     | 
    
         
             
            			int n = model->nr_class;
         
     | 
| 
       2850 
2828 
     | 
    
         
             
            			model->label = Malloc(int,n);
         
     | 
| 
       2851 
2829 
     | 
    
         
             
            			for(int i=0;i<n;i++)
         
     | 
| 
       2852 
     | 
    
         
            -
            				 
     | 
| 
      
 2830 
     | 
    
         
            +
            				FSCANF(fp,"%d",&model->label[i]);
         
     | 
| 
       2853 
2831 
     | 
    
         
             
            		}
         
     | 
| 
       2854 
2832 
     | 
    
         
             
            		else if(strcmp(cmd,"probA")==0)
         
     | 
| 
       2855 
2833 
     | 
    
         
             
            		{
         
     | 
| 
       2856 
2834 
     | 
    
         
             
            			int n = model->nr_class * (model->nr_class-1)/2;
         
     | 
| 
       2857 
2835 
     | 
    
         
             
            			model->probA = Malloc(double,n);
         
     | 
| 
       2858 
2836 
     | 
    
         
             
            			for(int i=0;i<n;i++)
         
     | 
| 
       2859 
     | 
    
         
            -
            				 
     | 
| 
      
 2837 
     | 
    
         
            +
            				FSCANF(fp,"%lf",&model->probA[i]);
         
     | 
| 
       2860 
2838 
     | 
    
         
             
            		}
         
     | 
| 
       2861 
2839 
     | 
    
         
             
            		else if(strcmp(cmd,"probB")==0)
         
     | 
| 
       2862 
2840 
     | 
    
         
             
            		{
         
     | 
| 
       2863 
2841 
     | 
    
         
             
            			int n = model->nr_class * (model->nr_class-1)/2;
         
     | 
| 
       2864 
2842 
     | 
    
         
             
            			model->probB = Malloc(double,n);
         
     | 
| 
       2865 
2843 
     | 
    
         
             
            			for(int i=0;i<n;i++)
         
     | 
| 
       2866 
     | 
    
         
            -
            				 
     | 
| 
      
 2844 
     | 
    
         
            +
            				FSCANF(fp,"%lf",&model->probB[i]);
         
     | 
| 
       2867 
2845 
     | 
    
         
             
            		}
         
     | 
| 
       2868 
2846 
     | 
    
         
             
            		else if(strcmp(cmd,"nr_sv")==0)
         
     | 
| 
       2869 
2847 
     | 
    
         
             
            		{
         
     | 
| 
       2870 
2848 
     | 
    
         
             
            			int n = model->nr_class;
         
     | 
| 
       2871 
2849 
     | 
    
         
             
            			model->nSV = Malloc(int,n);
         
     | 
| 
       2872 
2850 
     | 
    
         
             
            			for(int i=0;i<n;i++)
         
     | 
| 
       2873 
     | 
    
         
            -
            				 
     | 
| 
      
 2851 
     | 
    
         
            +
            				FSCANF(fp,"%d",&model->nSV[i]);
         
     | 
| 
       2874 
2852 
     | 
    
         
             
            		}
         
     | 
| 
       2875 
2853 
     | 
    
         
             
            		else if(strcmp(cmd,"SV")==0)
         
     | 
| 
       2876 
2854 
     | 
    
         
             
            		{
         
     | 
| 
       2877 
2855 
     | 
    
         
             
            			while(1)
         
     | 
| 
       2878 
2856 
     | 
    
         
             
            			{
         
     | 
| 
       2879 
2857 
     | 
    
         
             
            				int c = getc(fp);
         
     | 
| 
       2880 
     | 
    
         
            -
            				if(c==EOF || c=='\n') break; 
     | 
| 
      
 2858 
     | 
    
         
            +
            				if(c==EOF || c=='\n') break;
         
     | 
| 
       2881 
2859 
     | 
    
         
             
            			}
         
     | 
| 
       2882 
2860 
     | 
    
         
             
            			break;
         
     | 
| 
       2883 
2861 
     | 
    
         
             
            		}
         
     | 
| 
       2884 
2862 
     | 
    
         
             
            		else
         
     | 
| 
       2885 
2863 
     | 
    
         
             
            		{
         
     | 
| 
       2886 
2864 
     | 
    
         
             
            			fprintf(stderr,"unknown text in model file: [%s]\n",cmd);
         
     | 
| 
       2887 
     | 
    
         
            -
            			
         
     | 
| 
       2888 
     | 
    
         
            -
            			setlocale(LC_ALL, old_locale);
         
     | 
| 
       2889 
     | 
    
         
            -
            			free(old_locale);
         
     | 
| 
       2890 
     | 
    
         
            -
            			free(model->rho);
         
     | 
| 
       2891 
     | 
    
         
            -
            			free(model->label);
         
     | 
| 
       2892 
     | 
    
         
            -
            			free(model->nSV);
         
     | 
| 
       2893 
     | 
    
         
            -
            			free(model);
         
     | 
| 
       2894 
     | 
    
         
            -
            			return NULL;
         
     | 
| 
      
 2865 
     | 
    
         
            +
            			return false;
         
     | 
| 
       2895 
2866 
     | 
    
         
             
            		}
         
     | 
| 
       2896 
2867 
     | 
    
         
             
            	}
         
     | 
| 
       2897 
2868 
     | 
    
         | 
| 
      
 2869 
     | 
    
         
            +
            	return true;
         
     | 
| 
      
 2870 
     | 
    
         
            +
             
     | 
| 
      
 2871 
     | 
    
         
            +
            }
         
     | 
| 
      
 2872 
     | 
    
         
            +
             
     | 
| 
      
 2873 
     | 
    
         
            +
            svm_model *svm_load_model(const char *model_file_name)
         
     | 
| 
      
 2874 
     | 
    
         
            +
            {
         
     | 
| 
      
 2875 
     | 
    
         
            +
            	FILE *fp = fopen(model_file_name,"rb");
         
     | 
| 
      
 2876 
     | 
    
         
            +
            	if(fp==NULL) return NULL;
         
     | 
| 
      
 2877 
     | 
    
         
            +
             
     | 
| 
      
 2878 
     | 
    
         
            +
            	char *old_locale = strdup(setlocale(LC_ALL, NULL));
         
     | 
| 
      
 2879 
     | 
    
         
            +
            	setlocale(LC_ALL, "C");
         
     | 
| 
      
 2880 
     | 
    
         
            +
             
     | 
| 
      
 2881 
     | 
    
         
            +
            	// read parameters
         
     | 
| 
      
 2882 
     | 
    
         
            +
             
     | 
| 
      
 2883 
     | 
    
         
            +
            	svm_model *model = Malloc(svm_model,1);
         
     | 
| 
      
 2884 
     | 
    
         
            +
            	model->rho = NULL;
         
     | 
| 
      
 2885 
     | 
    
         
            +
            	model->probA = NULL;
         
     | 
| 
      
 2886 
     | 
    
         
            +
            	model->probB = NULL;
         
     | 
| 
      
 2887 
     | 
    
         
            +
            	model->sv_indices = NULL;
         
     | 
| 
      
 2888 
     | 
    
         
            +
            	model->label = NULL;
         
     | 
| 
      
 2889 
     | 
    
         
            +
            	model->nSV = NULL;
         
     | 
| 
      
 2890 
     | 
    
         
            +
            	
         
     | 
| 
      
 2891 
     | 
    
         
            +
            	// read header
         
     | 
| 
      
 2892 
     | 
    
         
            +
            	if (!read_model_header(fp, model))
         
     | 
| 
      
 2893 
     | 
    
         
            +
            	{
         
     | 
| 
      
 2894 
     | 
    
         
            +
            		fprintf(stderr, "ERROR: fscanf failed to read model\n");
         
     | 
| 
      
 2895 
     | 
    
         
            +
            		setlocale(LC_ALL, old_locale);
         
     | 
| 
      
 2896 
     | 
    
         
            +
            		free(old_locale);
         
     | 
| 
      
 2897 
     | 
    
         
            +
            		free(model->rho);
         
     | 
| 
      
 2898 
     | 
    
         
            +
            		free(model->label);
         
     | 
| 
      
 2899 
     | 
    
         
            +
            		free(model->nSV);
         
     | 
| 
      
 2900 
     | 
    
         
            +
            		free(model);
         
     | 
| 
      
 2901 
     | 
    
         
            +
            		return NULL;
         
     | 
| 
      
 2902 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2903 
     | 
    
         
            +
            	
         
     | 
| 
       2898 
2904 
     | 
    
         
             
            	// read sv_coef and SV
         
     | 
| 
       2899 
2905 
     | 
    
         | 
| 
       2900 
2906 
     | 
    
         
             
            	int elements = 0;
         
     | 
    
        data/ext/libsvm/svm.h
    CHANGED
    
    
    
        data/lib/libsvm/version.rb
    CHANGED
    
    
    
        data/rb-libsvm.gemspec
    CHANGED
    
    | 
         @@ -10,6 +10,7 @@ Gem::Specification.new do |s| 
     | 
|
| 
       10 
10 
     | 
    
         
             
              s.homepage    = "https://github.com/febeling/rb-libsvm"
         
     | 
| 
       11 
11 
     | 
    
         
             
              s.summary     = %q{Ruby language bindings for LIBSVM}
         
     | 
| 
       12 
12 
     | 
    
         
             
              s.description = %q{libsvm and ruby without using swig}
         
     | 
| 
      
 13 
     | 
    
         
            +
              s.required_ruby_version = '>= 1.8.7'
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
15 
     | 
    
         
             
              s.rubyforge_project = "rb-libsvm"
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
         @@ -18,7 +19,6 @@ Gem::Specification.new do |s| 
     | 
|
| 
       18 
19 
     | 
    
         
             
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         
     | 
| 
       19 
20 
     | 
    
         
             
              s.require_paths = ["lib"]
         
     | 
| 
       20 
21 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
              # specify any dependencies here; for example:
         
     | 
| 
       22 
22 
     | 
    
         
             
              s.add_development_dependency('rake-compiler')
         
     | 
| 
       23 
23 
     | 
    
         
             
              s.add_development_dependency('rspec', '>= 2.7.0')
         
     | 
| 
       24 
24 
     | 
    
         | 
    
        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.1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.5
         
     | 
| 
       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- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2014-04-24 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: rake-compiler
         
     | 
| 
         @@ -85,7 +85,7 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       85 
85 
     | 
    
         
             
              requirements:
         
     | 
| 
       86 
86 
     | 
    
         
             
              - - ">="
         
     | 
| 
       87 
87 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       88 
     | 
    
         
            -
                  version:  
     | 
| 
      
 88 
     | 
    
         
            +
                  version: 1.8.7
         
     | 
| 
       89 
89 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       90 
90 
     | 
    
         
             
              requirements:
         
     | 
| 
       91 
91 
     | 
    
         
             
              - - ">="
         
     | 
| 
         @@ -104,3 +104,4 @@ test_files: 
     | 
|
| 
       104 
104 
     | 
    
         
             
            - spec/problem_spec.rb
         
     | 
| 
       105 
105 
     | 
    
         
             
            - spec/spec_helper.rb
         
     | 
| 
       106 
106 
     | 
    
         
             
            - spec/usage_spec.rb
         
     | 
| 
      
 107 
     | 
    
         
            +
            has_rdoc: 
         
     |