svmlightcli 0.1.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.
@@ -0,0 +1,169 @@
1
+ /***********************************************************************/
2
+ /* */
3
+ /* svm_learn.h */
4
+ /* */
5
+ /* Declarations for learning module of Support Vector Machine. */
6
+ /* */
7
+ /* Author: Thorsten Joachims */
8
+ /* Date: 02.07.02 */
9
+ /* */
10
+ /* Copyright (c) 2002 Thorsten Joachims - All rights reserved */
11
+ /* */
12
+ /* This software is available for non-commercial use only. It must */
13
+ /* not be modified and distributed without prior permission of the */
14
+ /* author. The author is not responsible for implications from the */
15
+ /* use of this software. */
16
+ /* */
17
+ /***********************************************************************/
18
+
19
+ #ifndef SVM_LEARN
20
+ #define SVM_LEARN
21
+
22
+ void svm_learn_classification(DOC **, double *, long, long, LEARN_PARM *,
23
+ KERNEL_PARM *, KERNEL_CACHE *, MODEL *,
24
+ double *);
25
+ void svm_learn_regression(DOC **, double *, long, long, LEARN_PARM *,
26
+ KERNEL_PARM *, KERNEL_CACHE **, MODEL *);
27
+ void svm_learn_ranking(DOC **, double *, long, long, LEARN_PARM *,
28
+ KERNEL_PARM *, KERNEL_CACHE **, MODEL *);
29
+ void svm_learn_optimization(DOC **, double *, long, long, LEARN_PARM *,
30
+ KERNEL_PARM *, KERNEL_CACHE *, MODEL *,
31
+ double *);
32
+ long optimize_to_convergence(DOC **, long *, long, long, LEARN_PARM *,
33
+ KERNEL_PARM *, KERNEL_CACHE *, SHRINK_STATE *,
34
+ MODEL *, long *, long *, double *,
35
+ double *, double *,
36
+ TIMING *, double *, long, long);
37
+ long optimize_to_convergence_sharedslack(DOC **, long *, long, long,
38
+ LEARN_PARM *,
39
+ KERNEL_PARM *, KERNEL_CACHE *, SHRINK_STATE *,
40
+ MODEL *, double *, double *, double *,
41
+ TIMING *, double *);
42
+ double compute_objective_function(double *, double *, double *, double,
43
+ long *, long *);
44
+ void clear_index(long *);
45
+ void add_to_index(long *, long);
46
+ long compute_index(long *,long, long *);
47
+ void optimize_svm(DOC **, long *, long *, long *, double, long *, long *,
48
+ MODEL *,
49
+ long, long *, long, double *, double *, double *,
50
+ LEARN_PARM *, CFLOAT *, KERNEL_PARM *, QP *, double *);
51
+ void compute_matrices_for_optimization(DOC **, long *, long *, long *, double,
52
+ long *,
53
+ long *, long *, MODEL *, double *,
54
+ double *, double *, long, long, LEARN_PARM *,
55
+ CFLOAT *, KERNEL_PARM *, QP *);
56
+ long calculate_svm_model(DOC **, long *, long *, double *, double *,
57
+ double *, double *, LEARN_PARM *, long *,
58
+ long *, MODEL *);
59
+ long check_optimality(MODEL *, long *, long *, double *, double *,
60
+ double *, long,
61
+ LEARN_PARM *,double *, double, long *, long *, long *,
62
+ long *, long, KERNEL_PARM *);
63
+ long check_optimality_sharedslack(DOC **docs, MODEL *model, long int *label,
64
+ double *a, double *lin, double *c, double *slack,
65
+ double *alphaslack, long int totdoc,
66
+ LEARN_PARM *learn_parm, double *maxdiff,
67
+ double epsilon_crit_org, long int *misclassified,
68
+ long int *active2dnum,
69
+ long int *last_suboptimal_at,
70
+ long int iteration, KERNEL_PARM *kernel_parm);
71
+ void compute_shared_slacks(DOC **docs, long int *label, double *a,
72
+ double *lin, double *c, long int *active2dnum,
73
+ LEARN_PARM *learn_parm,
74
+ double *slack, double *alphaslack);
75
+ long identify_inconsistent(double *, long *, long *, long, LEARN_PARM *,
76
+ long *, long *);
77
+ long identify_misclassified(double *, long *, long *, long,
78
+ MODEL *, long *, long *);
79
+ long identify_one_misclassified(double *, long *, long *, long,
80
+ MODEL *, long *, long *);
81
+ long incorporate_unlabeled_examples(MODEL *, long *,long *, long *,
82
+ double *, double *, long, double *,
83
+ long *, long *, long, KERNEL_PARM *,
84
+ LEARN_PARM *);
85
+ void update_linear_component(DOC **, long *, long *, double *, double *,
86
+ long *, long, long, KERNEL_PARM *,
87
+ KERNEL_CACHE *, double *,
88
+ CFLOAT *, double *);
89
+ long select_next_qp_subproblem_grad(long *, long *, double *,
90
+ double *, double *, long,
91
+ long, LEARN_PARM *, long *, long *,
92
+ long *, double *, long *, KERNEL_CACHE *,
93
+ long, long *, long *);
94
+ long select_next_qp_subproblem_rand(long *, long *, double *,
95
+ double *, double *, long,
96
+ long, LEARN_PARM *, long *, long *,
97
+ long *, double *, long *, KERNEL_CACHE *,
98
+ long *, long *, long);
99
+ long select_next_qp_slackset(DOC **docs, long int *label, double *a,
100
+ double *lin, double *slack, double *alphaslack,
101
+ double *c, LEARN_PARM *learn_parm,
102
+ long int *active2dnum, double *maxviol);
103
+ void select_top_n(double *, long, long *, long);
104
+ void init_shrink_state(SHRINK_STATE *, long, long);
105
+ void shrink_state_cleanup(SHRINK_STATE *);
106
+ long shrink_problem(DOC **, LEARN_PARM *, SHRINK_STATE *, KERNEL_PARM *,
107
+ long *, long *, long, long, long, double *, long *);
108
+ void reactivate_inactive_examples(long *, long *, double *, SHRINK_STATE *,
109
+ double *, double*, long, long, long, LEARN_PARM *,
110
+ long *, DOC **, KERNEL_PARM *,
111
+ KERNEL_CACHE *, MODEL *, CFLOAT *,
112
+ double *, double *);
113
+
114
+ /* cache kernel evalutations to improve speed */
115
+ KERNEL_CACHE *kernel_cache_init(long, long);
116
+ void kernel_cache_cleanup(KERNEL_CACHE *);
117
+ void get_kernel_row(KERNEL_CACHE *,DOC **, long, long, long *, CFLOAT *,
118
+ KERNEL_PARM *);
119
+ void cache_kernel_row(KERNEL_CACHE *,DOC **, long, KERNEL_PARM *);
120
+ void cache_multiple_kernel_rows(KERNEL_CACHE *,DOC **, long *, long,
121
+ KERNEL_PARM *);
122
+ void kernel_cache_shrink(KERNEL_CACHE *,long, long, long *);
123
+ void kernel_cache_reset_lru(KERNEL_CACHE *);
124
+ long kernel_cache_malloc(KERNEL_CACHE *);
125
+ void kernel_cache_free(KERNEL_CACHE *,long);
126
+ long kernel_cache_free_lru(KERNEL_CACHE *);
127
+ CFLOAT *kernel_cache_clean_and_malloc(KERNEL_CACHE *,long);
128
+ long kernel_cache_touch(KERNEL_CACHE *,long);
129
+ long kernel_cache_check(KERNEL_CACHE *,long);
130
+ long kernel_cache_space_available(KERNEL_CACHE *);
131
+
132
+ void compute_xa_estimates(MODEL *, long *, long *, long, DOC **,
133
+ double *, double *, KERNEL_PARM *,
134
+ LEARN_PARM *, double *, double *, double *);
135
+ double xa_estimate_error(MODEL *, long *, long *, long, DOC **,
136
+ double *, double *, KERNEL_PARM *,
137
+ LEARN_PARM *);
138
+ double xa_estimate_recall(MODEL *, long *, long *, long, DOC **,
139
+ double *, double *, KERNEL_PARM *,
140
+ LEARN_PARM *);
141
+ double xa_estimate_precision(MODEL *, long *, long *, long, DOC **,
142
+ double *, double *, KERNEL_PARM *,
143
+ LEARN_PARM *);
144
+ void avg_similarity_of_sv_of_one_class(MODEL *, DOC **, double *, long *, KERNEL_PARM *, double *, double *);
145
+ double most_similar_sv_of_same_class(MODEL *, DOC **, double *, long, long *, KERNEL_PARM *, LEARN_PARM *);
146
+ double distribute_alpha_t_greedily(long *, long, DOC **, double *, long, long *, KERNEL_PARM *, LEARN_PARM *, double);
147
+ double distribute_alpha_t_greedily_noindex(MODEL *, DOC **, double *, long, long *, KERNEL_PARM *, LEARN_PARM *, double);
148
+ void estimate_transduction_quality(MODEL *, long *, long *, long, DOC **, double *);
149
+ double estimate_margin_vcdim(MODEL *, double, double, KERNEL_PARM *);
150
+ double estimate_sphere(MODEL *, KERNEL_PARM *);
151
+ double estimate_r_delta_average(DOC **, long, KERNEL_PARM *);
152
+ double estimate_r_delta(DOC **, long, KERNEL_PARM *);
153
+ double length_of_longest_document_vector(DOC **, long, KERNEL_PARM *);
154
+
155
+ void write_model(char *, MODEL *);
156
+ void write_prediction(char *, MODEL *, double *, double *, long *, long *,
157
+ long, LEARN_PARM *);
158
+ void write_alphas(char *, double *, long *, long);
159
+
160
+ typedef struct cache_parm_s {
161
+ KERNEL_CACHE *kernel_cache;
162
+ CFLOAT *cache;
163
+ DOC **docs;
164
+ long m;
165
+ KERNEL_PARM *kernel_parm;
166
+ long offset,stepsize;
167
+ } cache_parm_t;
168
+
169
+ #endif
@@ -0,0 +1,397 @@
1
+ /***********************************************************************/
2
+ /* */
3
+ /* svm_learn_main.c */
4
+ /* */
5
+ /* Command line interface to the learning module of the */
6
+ /* Support Vector Machine. */
7
+ /* */
8
+ /* Author: Thorsten Joachims */
9
+ /* Date: 02.07.02 */
10
+ /* */
11
+ /* Copyright (c) 2000 Thorsten Joachims - All rights reserved */
12
+ /* */
13
+ /* This software is available for non-commercial use only. It must */
14
+ /* not be modified and distributed without prior permission of the */
15
+ /* author. The author is not responsible for implications from the */
16
+ /* use of this software. */
17
+ /* */
18
+ /***********************************************************************/
19
+
20
+
21
+ /* if svm-learn is used out of C++, define it as extern "C" */
22
+ #ifdef __cplusplus
23
+ extern "C" {
24
+ #endif
25
+
26
+ # include "svm_common.h"
27
+ # include "svm_learn.h"
28
+
29
+ #ifdef __cplusplus
30
+ }
31
+ #endif
32
+
33
+ char docfile[200]; /* file with training examples */
34
+ char modelfile[200]; /* file for resulting classifier */
35
+ char restartfile[200]; /* file with initial alphas */
36
+
37
+ void read_input_parameters(int, char **, char *, char *, char *, long *,
38
+ LEARN_PARM *, KERNEL_PARM *);
39
+ void wait_any_key();
40
+ void print_help();
41
+
42
+
43
+
44
+ int main (int argc, char* argv[])
45
+ {
46
+ DOC **docs; /* training examples */
47
+ long totwords,totdoc,i;
48
+ double *target;
49
+ double *alpha_in=NULL;
50
+ KERNEL_CACHE *kernel_cache;
51
+ LEARN_PARM learn_parm;
52
+ KERNEL_PARM kernel_parm;
53
+ MODEL *model=(MODEL *)my_malloc(sizeof(MODEL));
54
+
55
+ read_input_parameters(argc,argv,docfile,modelfile,restartfile,&verbosity,
56
+ &learn_parm,&kernel_parm);
57
+ read_documents(docfile,&docs,&target,&totwords,&totdoc);
58
+ if(restartfile[0]) alpha_in=read_alphas(restartfile,totdoc);
59
+
60
+ if(kernel_parm.kernel_type == LINEAR) { /* don't need the cache */
61
+ kernel_cache=NULL;
62
+ }
63
+ else {
64
+ /* Always get a new kernel cache. It is not possible to use the
65
+ same cache for two different training runs */
66
+ kernel_cache=kernel_cache_init(totdoc,learn_parm.kernel_cache_size);
67
+ }
68
+
69
+ if(learn_parm.type == CLASSIFICATION) {
70
+ svm_learn_classification(docs,target,totdoc,totwords,&learn_parm,
71
+ &kernel_parm,kernel_cache,model,alpha_in);
72
+ }
73
+ else if(learn_parm.type == REGRESSION) {
74
+ svm_learn_regression(docs,target,totdoc,totwords,&learn_parm,
75
+ &kernel_parm,&kernel_cache,model);
76
+ }
77
+ else if(learn_parm.type == RANKING) {
78
+ svm_learn_ranking(docs,target,totdoc,totwords,&learn_parm,
79
+ &kernel_parm,&kernel_cache,model);
80
+ }
81
+ else if(learn_parm.type == OPTIMIZATION) {
82
+ svm_learn_optimization(docs,target,totdoc,totwords,&learn_parm,
83
+ &kernel_parm,kernel_cache,model,alpha_in);
84
+ }
85
+
86
+ if(kernel_cache) {
87
+ /* Free the memory used for the cache. */
88
+ kernel_cache_cleanup(kernel_cache);
89
+ }
90
+
91
+ /* Warning: The model contains references to the original data 'docs'.
92
+ If you want to free the original data, and only keep the model, you
93
+ have to make a deep copy of 'model'. */
94
+ /* deep_copy_of_model=copy_model(model); */
95
+ write_model(modelfile,model);
96
+
97
+ free(alpha_in);
98
+ free_model(model,0);
99
+ for(i=0;i<totdoc;i++)
100
+ free_example(docs[i],1);
101
+ free(docs);
102
+ free(target);
103
+
104
+ return(0);
105
+ }
106
+
107
+ /*---------------------------------------------------------------------------*/
108
+
109
+ void read_input_parameters(int argc,char *argv[],char *docfile,char *modelfile,
110
+ char *restartfile,long *verbosity,
111
+ LEARN_PARM *learn_parm,KERNEL_PARM *kernel_parm)
112
+ {
113
+ long i;
114
+ char type[100];
115
+
116
+ /* set default */
117
+ strcpy (modelfile, "svm_model");
118
+ strcpy (learn_parm->predfile, "trans_predictions");
119
+ strcpy (learn_parm->alphafile, "");
120
+ strcpy (restartfile, "");
121
+ (*verbosity)=1;
122
+ learn_parm->biased_hyperplane=1;
123
+ learn_parm->sharedslack=0;
124
+ learn_parm->remove_inconsistent=0;
125
+ learn_parm->skip_final_opt_check=0;
126
+ learn_parm->svm_maxqpsize=10;
127
+ learn_parm->svm_newvarsinqp=0;
128
+ learn_parm->svm_iter_to_shrink=-9999;
129
+ learn_parm->maxiter=100000;
130
+ learn_parm->kernel_cache_size=40;
131
+ learn_parm->svm_c=0.0;
132
+ learn_parm->eps=0.1;
133
+ learn_parm->transduction_posratio=-1.0;
134
+ learn_parm->svm_costratio=1.0;
135
+ learn_parm->svm_costratio_unlab=1.0;
136
+ learn_parm->svm_unlabbound=1E-5;
137
+ learn_parm->epsilon_crit=0.001;
138
+ learn_parm->epsilon_a=1E-15;
139
+ learn_parm->compute_loo=0;
140
+ learn_parm->rho=1.0;
141
+ learn_parm->xa_depth=0;
142
+ kernel_parm->kernel_type=0;
143
+ kernel_parm->poly_degree=3;
144
+ kernel_parm->rbf_gamma=1.0;
145
+ kernel_parm->coef_lin=1;
146
+ kernel_parm->coef_const=1;
147
+ strcpy(kernel_parm->custom,"empty");
148
+ strcpy(type,"c");
149
+
150
+ for(i=1;(i<argc) && ((argv[i])[0] == '-');i++) {
151
+ switch ((argv[i])[1])
152
+ {
153
+ case '?': print_help(); exit(0);
154
+ case 'z': i++; strcpy(type,argv[i]); break;
155
+ case 'v': i++; (*verbosity)=atol(argv[i]); break;
156
+ case 'b': i++; learn_parm->biased_hyperplane=atol(argv[i]); break;
157
+ case 'i': i++; learn_parm->remove_inconsistent=atol(argv[i]); break;
158
+ case 'f': i++; learn_parm->skip_final_opt_check=!atol(argv[i]); break;
159
+ case 'q': i++; learn_parm->svm_maxqpsize=atol(argv[i]); break;
160
+ case 'n': i++; learn_parm->svm_newvarsinqp=atol(argv[i]); break;
161
+ case '#': i++; learn_parm->maxiter=atol(argv[i]); break;
162
+ case 'h': i++; learn_parm->svm_iter_to_shrink=atol(argv[i]); break;
163
+ case 'm': i++; learn_parm->kernel_cache_size=atol(argv[i]); break;
164
+ case 'c': i++; learn_parm->svm_c=atof(argv[i]); break;
165
+ case 'w': i++; learn_parm->eps=atof(argv[i]); break;
166
+ case 'p': i++; learn_parm->transduction_posratio=atof(argv[i]); break;
167
+ case 'j': i++; learn_parm->svm_costratio=atof(argv[i]); break;
168
+ case 'e': i++; learn_parm->epsilon_crit=atof(argv[i]); break;
169
+ case 'o': i++; learn_parm->rho=atof(argv[i]); break;
170
+ case 'k': i++; learn_parm->xa_depth=atol(argv[i]); break;
171
+ case 'x': i++; learn_parm->compute_loo=atol(argv[i]); break;
172
+ case 't': i++; kernel_parm->kernel_type=atol(argv[i]); break;
173
+ case 'd': i++; kernel_parm->poly_degree=atol(argv[i]); break;
174
+ case 'g': i++; kernel_parm->rbf_gamma=atof(argv[i]); break;
175
+ case 's': i++; kernel_parm->coef_lin=atof(argv[i]); break;
176
+ case 'r': i++; kernel_parm->coef_const=atof(argv[i]); break;
177
+ case 'u': i++; strcpy(kernel_parm->custom,argv[i]); break;
178
+ case 'l': i++; strcpy(learn_parm->predfile,argv[i]); break;
179
+ case 'a': i++; strcpy(learn_parm->alphafile,argv[i]); break;
180
+ case 'y': i++; strcpy(restartfile,argv[i]); break;
181
+ default: printf("\nUnrecognized option %s!\n\n",argv[i]);
182
+ print_help();
183
+ exit(0);
184
+ }
185
+ }
186
+ if(i>=argc) {
187
+ printf("\nNot enough input parameters!\n\n");
188
+ wait_any_key();
189
+ print_help();
190
+ exit(0);
191
+ }
192
+ strcpy (docfile, argv[i]);
193
+ if((i+1)<argc) {
194
+ strcpy (modelfile, argv[i+1]);
195
+ }
196
+ if(learn_parm->svm_iter_to_shrink == -9999) {
197
+ if(kernel_parm->kernel_type == LINEAR)
198
+ learn_parm->svm_iter_to_shrink=2;
199
+ else
200
+ learn_parm->svm_iter_to_shrink=100;
201
+ }
202
+ if(strcmp(type,"c")==0) {
203
+ learn_parm->type=CLASSIFICATION;
204
+ }
205
+ else if(strcmp(type,"r")==0) {
206
+ learn_parm->type=REGRESSION;
207
+ }
208
+ else if(strcmp(type,"p")==0) {
209
+ learn_parm->type=RANKING;
210
+ }
211
+ else if(strcmp(type,"o")==0) {
212
+ learn_parm->type=OPTIMIZATION;
213
+ }
214
+ else if(strcmp(type,"s")==0) {
215
+ learn_parm->type=OPTIMIZATION;
216
+ learn_parm->sharedslack=1;
217
+ }
218
+ else {
219
+ printf("\nUnknown type '%s': Valid types are 'c' (classification), 'r' regession, and 'p' preference ranking.\n",type);
220
+ wait_any_key();
221
+ print_help();
222
+ exit(0);
223
+ }
224
+ if((learn_parm->skip_final_opt_check)
225
+ && (kernel_parm->kernel_type == LINEAR)) {
226
+ printf("\nIt does not make sense to skip the final optimality check for linear kernels.\n\n");
227
+ learn_parm->skip_final_opt_check=0;
228
+ }
229
+ if((learn_parm->skip_final_opt_check)
230
+ && (learn_parm->remove_inconsistent)) {
231
+ printf("\nIt is necessary to do the final optimality check when removing inconsistent \nexamples.\n");
232
+ wait_any_key();
233
+ print_help();
234
+ exit(0);
235
+ }
236
+ if((learn_parm->svm_maxqpsize<2)) {
237
+ printf("\nMaximum size of QP-subproblems not in valid range: %ld [2..]\n",learn_parm->svm_maxqpsize);
238
+ wait_any_key();
239
+ print_help();
240
+ exit(0);
241
+ }
242
+ if((learn_parm->svm_maxqpsize<learn_parm->svm_newvarsinqp)) {
243
+ printf("\nMaximum size of QP-subproblems [%ld] must be larger than the number of\n",learn_parm->svm_maxqpsize);
244
+ printf("new variables [%ld] entering the working set in each iteration.\n",learn_parm->svm_newvarsinqp);
245
+ wait_any_key();
246
+ print_help();
247
+ exit(0);
248
+ }
249
+ if(learn_parm->svm_iter_to_shrink<1) {
250
+ printf("\nMaximum number of iterations for shrinking not in valid range: %ld [1,..]\n",learn_parm->svm_iter_to_shrink);
251
+ wait_any_key();
252
+ print_help();
253
+ exit(0);
254
+ }
255
+ if(learn_parm->svm_c<0) {
256
+ printf("\nThe C parameter must be greater than zero!\n\n");
257
+ wait_any_key();
258
+ print_help();
259
+ exit(0);
260
+ }
261
+ if(learn_parm->transduction_posratio>1) {
262
+ printf("\nThe fraction of unlabeled examples to classify as positives must\n");
263
+ printf("be less than 1.0 !!!\n\n");
264
+ wait_any_key();
265
+ print_help();
266
+ exit(0);
267
+ }
268
+ if(learn_parm->svm_costratio<=0) {
269
+ printf("\nThe COSTRATIO parameter must be greater than zero!\n\n");
270
+ wait_any_key();
271
+ print_help();
272
+ exit(0);
273
+ }
274
+ if(learn_parm->epsilon_crit<=0) {
275
+ printf("\nThe epsilon parameter must be greater than zero!\n\n");
276
+ wait_any_key();
277
+ print_help();
278
+ exit(0);
279
+ }
280
+ if(learn_parm->rho<0) {
281
+ printf("\nThe parameter rho for xi/alpha-estimates and leave-one-out pruning must\n");
282
+ printf("be greater than zero (typically 1.0 or 2.0, see T. Joachims, Estimating the\n");
283
+ printf("Generalization Performance of an SVM Efficiently, ICML, 2000.)!\n\n");
284
+ wait_any_key();
285
+ print_help();
286
+ exit(0);
287
+ }
288
+ if((learn_parm->xa_depth<0) || (learn_parm->xa_depth>100)) {
289
+ printf("\nThe parameter depth for ext. xi/alpha-estimates must be in [0..100] (zero\n");
290
+ printf("for switching to the conventional xa/estimates described in T. Joachims,\n");
291
+ printf("Estimating the Generalization Performance of an SVM Efficiently, ICML, 2000.)\n");
292
+ wait_any_key();
293
+ print_help();
294
+ exit(0);
295
+ }
296
+ }
297
+
298
+ void wait_any_key()
299
+ {
300
+ printf("\n(more)\n");
301
+ (void)getc(stdin);
302
+ }
303
+
304
+ void print_help()
305
+ {
306
+ printf("\nSVM-light %s: Support Vector Machine, learning module %s\n",VERSION,VERSION_DATE);
307
+ copyright_notice();
308
+ printf(" usage: svm_learn [options] example_file model_file\n\n");
309
+ printf("Arguments:\n");
310
+ printf(" example_file-> file with training data\n");
311
+ printf(" model_file -> file to store learned decision rule in\n");
312
+
313
+ printf("General options:\n");
314
+ printf(" -? -> this help\n");
315
+ printf(" -v [0..3] -> verbosity level (default 1)\n");
316
+ printf("Learning options:\n");
317
+ printf(" -z {c,r,p} -> select between classification (c), regression (r),\n");
318
+ printf(" and preference ranking (p) (default classification)\n");
319
+ printf(" -c float -> C: trade-off between training error\n");
320
+ printf(" and margin (default [avg. x*x]^-1)\n");
321
+ printf(" -w [0..] -> epsilon width of tube for regression\n");
322
+ printf(" (default 0.1)\n");
323
+ printf(" -j float -> Cost: cost-factor, by which training errors on\n");
324
+ printf(" positive examples outweight errors on negative\n");
325
+ printf(" examples (default 1) (see [4])\n");
326
+ printf(" -b [0,1] -> use biased hyperplane (i.e. x*w+b>0) instead\n");
327
+ printf(" of unbiased hyperplane (i.e. x*w>0) (default 1)\n");
328
+ printf(" -i [0,1] -> remove inconsistent training examples\n");
329
+ printf(" and retrain (default 0)\n");
330
+ printf("Performance estimation options:\n");
331
+ printf(" -x [0,1] -> compute leave-one-out estimates (default 0)\n");
332
+ printf(" (see [5])\n");
333
+ printf(" -o ]0..2] -> value of rho for XiAlpha-estimator and for pruning\n");
334
+ printf(" leave-one-out computation (default 1.0) (see [2])\n");
335
+ printf(" -k [0..100] -> search depth for extended XiAlpha-estimator \n");
336
+ printf(" (default 0)\n");
337
+ printf("Transduction options (see [3]):\n");
338
+ printf(" -p [0..1] -> fraction of unlabeled examples to be classified\n");
339
+ printf(" into the positive class (default is the ratio of\n");
340
+ printf(" positive and negative examples in the training data)\n");
341
+ printf("Kernel options:\n");
342
+ printf(" -t int -> type of kernel function:\n");
343
+ printf(" 0: linear (default)\n");
344
+ printf(" 1: polynomial (s a*b+c)^d\n");
345
+ printf(" 2: radial basis function exp(-gamma ||a-b||^2)\n");
346
+ printf(" 3: sigmoid tanh(s a*b + c)\n");
347
+ printf(" 4: user defined kernel from kernel.h\n");
348
+ printf(" -d int -> parameter d in polynomial kernel\n");
349
+ printf(" -g float -> parameter gamma in rbf kernel\n");
350
+ printf(" -s float -> parameter s in sigmoid/poly kernel\n");
351
+ printf(" -r float -> parameter c in sigmoid/poly kernel\n");
352
+ printf(" -u string -> parameter of user defined kernel\n");
353
+ printf("Optimization options (see [1]):\n");
354
+ printf(" -q [2..] -> maximum size of QP-subproblems (default 10)\n");
355
+ printf(" -n [2..q] -> number of new variables entering the working set\n");
356
+ printf(" in each iteration (default n = q). Set n<q to prevent\n");
357
+ printf(" zig-zagging.\n");
358
+ printf(" -m [5..] -> size of cache for kernel evaluations in MB (default 40)\n");
359
+ printf(" The larger the faster...\n");
360
+ printf(" -e float -> eps: Allow that error for termination criterion\n");
361
+ printf(" [y [w*x+b] - 1] >= eps (default 0.001)\n");
362
+ printf(" -y [0,1] -> restart the optimization from alpha values in file\n");
363
+ printf(" specified by -a option. (default 0)\n");
364
+ printf(" -h [5..] -> number of iterations a variable needs to be\n");
365
+ printf(" optimal before considered for shrinking (default 100)\n");
366
+ printf(" -f [0,1] -> do final optimality check for variables removed\n");
367
+ printf(" by shrinking. Although this test is usually \n");
368
+ printf(" positive, there is no guarantee that the optimum\n");
369
+ printf(" was found if the test is omitted. (default 1)\n");
370
+ printf(" -y string -> if option is given, reads alphas from file with given\n");
371
+ printf(" and uses them as starting point. (default 'disabled')\n");
372
+ printf(" -# int -> terminate optimization, if no progress after this\n");
373
+ printf(" number of iterations. (default 100000)\n");
374
+ printf("Output options:\n");
375
+ printf(" -l string -> file to write predicted labels of unlabeled\n");
376
+ printf(" examples into after transductive learning\n");
377
+ printf(" -a string -> write all alphas to this file after learning\n");
378
+ printf(" (in the same order as in the training set)\n");
379
+ wait_any_key();
380
+ printf("\nMore details in:\n");
381
+ printf("[1] T. Joachims, Making Large-Scale SVM Learning Practical. Advances in\n");
382
+ printf(" Kernel Methods - Support Vector Learning, B. Sch�lkopf and C. Burges and\n");
383
+ printf(" A. Smola (ed.), MIT Press, 1999.\n");
384
+ printf("[2] T. Joachims, Estimating the Generalization performance of an SVM\n");
385
+ printf(" Efficiently. International Conference on Machine Learning (ICML), 2000.\n");
386
+ printf("[3] T. Joachims, Transductive Inference for Text Classification using Support\n");
387
+ printf(" Vector Machines. International Conference on Machine Learning (ICML),\n");
388
+ printf(" 1999.\n");
389
+ printf("[4] K. Morik, P. Brockhausen, and T. Joachims, Combining statistical learning\n");
390
+ printf(" with a knowledge-based approach - A case study in intensive care \n");
391
+ printf(" monitoring. International Conference on Machine Learning (ICML), 1999.\n");
392
+ printf("[5] T. Joachims, Learning to Classify Text Using Support Vector\n");
393
+ printf(" Machines: Methods, Theory, and Algorithms. Dissertation, Kluwer,\n");
394
+ printf(" 2002.\n\n");
395
+ }
396
+
397
+