www.pudn.com > SVM20.rar > svm_common.h
#if !defined(AFX_TEST_H__B678A414_54CC_480B_8068_4FAEED66F002__INCLUDED_) #define AFX_TEST_H__B678A414_54CC_480B_8068_4FAEED66F002__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 /* # define MICROSOFT */ # include# include # include # include # include # include # include # define VERSION "V3.50" # define VERSION_DATE "01.11.00" # define CFLOAT float /* the type of float to use for caching */ /* kernel evaluations. Using float saves */ /* us some memory, but you can use double, too */ # define FNUM long /* the type used for storing feature ids */ # define FVAL float /* the type used for storing feature values */ # define LINEAR 0 /* linear kernel type */ # define POLY 1 /* polynoial kernel type */ # define RBF 2 /* rbf kernel type */ # define SIGMOID 3 /* sigmoid kernel type */ # define CUSTOM 4 typedef struct word { FNUM wnum; FVAL weight; } SVM_WORD; typedef struct doc { long docnum; double twonorm_sq; SVM_WORD *words; } DOC; typedef struct learn_parm { double svm_c; /* upper bound C on alphas */ double svm_costratio; /* factor to multiply C for positive examples */ double transduction_posratio;/* fraction of unlabeled examples to be */ /* classified as positives */ long biased_hyperplane; /* if nonzero, use hyperplane w*x+b=0 otherwise w*x=0 */ long svm_maxqpsize; /* size q of working set */ long svm_newvarsinqp; /* new variables to enter the working set in each iteration */ double epsilon_crit; /* tolerable error for distances used in stopping criterion */ double epsilon_shrink; /* how much a multiplier should be above zero for shrinking */ long svm_iter_to_shrink; /* iterations h after which an example can be removed by shrinking */ long remove_inconsistent; /* exclude examples with alpha at C and retrain */ long skip_final_opt_check; /* do not check KT-Conditions at the end of optimization for examples removed by shrinking. WARNING: This might lead to sub-optimal solutions! */ long compute_loo; /* if nonzero, computes leave-one-out estimates */ double rho; /* parameter in xi/alpha-estimates and for pruning leave-one-out range [1..2] */ long xa_depth; /* parameter in xi/alpha-estimates upper bounding the number of SV the current alpha_t is distributed over */ char predfile[200]; /* file for predicitions on unlabeled examples in transduction */ char alphafile[200]; /* file to store optimal alphas in. use empty string if alphas should not be output */ /* you probably do not want to touch the following */ double epsilon_const; /* tolerable error on eq-constraint */ double epsilon_a; /* tolerable error on alphas at bounds */ double opt_precision; /* precision of solver, set to e.g. 1e-21 if you get convergence problems */ /* the following are only for internal use */ long svm_c_steps; /* do so many steps for finding optimal C */ double svm_c_factor; /* increase C by this factor every step */ double svm_costratio_unlab; double svm_unlabbound; double *svm_cost; /* individual upper bounds for each var */ long totwords; /* number of features */ } LEARN_PARM; typedef struct kernel_parm { long kernel_type; long poly_degree; double rbf_gamma; double coef_lin; double coef_const; char custom[50]; /* for user supplied kernel */ } KERNEL_PARM; typedef struct model { long sv_num; long at_upper_bound; double b; DOC **supvec; double *alpha; long *index; /* index from docnum to position in model */ long totwords; /* number of features */ long totdoc; /* number of training documents */ KERNEL_PARM kernel_parm; /* kernel */ /* the following values are not written to file */ double loo_error,loo_recall,loo_precision; /* leave-one-out estimates */ double xa_error,xa_recall,xa_precision; /* xi/alpha estimates */ double *lin_weights; /* weights for linear case using folding */ } MODEL; typedef struct quadratic_program { long opt_n; /* number of variables */ long opt_m; /* number of linear equality constraints */ double *opt_ce,*opt_ce0; /* linear equality constraints */ double *opt_g; /* hessian of objective */ double *opt_g0; /* linear part of objective */ double *opt_xinit; /* initial value for variables */ double *opt_low,*opt_up; /* box constraints */ } QP; typedef struct kernel_cache { long *index; /* cache some kernel evalutations */ CFLOAT *buffer; /* to improve speed */ long *invindex; long *active2totdoc; long *totdoc2active; long *lru; long *occu; long elems; long max_elems; long time; long activenum; long buffsize; } KERNEL_CACHE; typedef struct timing_profile { long time_kernel; long time_opti; long time_shrink; long time_update; long time_model; long time_check; long time_select; } TIMING; typedef struct shrink_state { long *active; long *inactive_since; long deactnum; double **a_history; } SHRINK_STATE; double classify_example(MODEL *, DOC *); double classify_example_linear(MODEL *, DOC *); CFLOAT kernel(KERNEL_PARM *, DOC *, DOC *); double custom_kernel(KERNEL_PARM *, DOC *, DOC *); double sprod_ss(SVM_WORD *, SVM_WORD *); double model_length_s(MODEL *, KERNEL_PARM *); void clear_vector_n(double *, long); void add_vector_ns(double *, SVM_WORD *, double); double sprod_ns(double *, SVM_WORD *); void add_weight_vector_to_linear_model(MODEL *); int read_model(char *, MODEL *, long, long); int read_documents(char *, DOC *, long *, long, long, long *, long *); int parse_document(char *, DOC *, long *, long *, long); int nol_ll(char *, long *, long *, long *); long minl(long, long); long maxl(long, long); long get_runtime(); void *my_malloc(long); void copyright_notice(); double custom_kernel(KERNEL_PARM *kernel_parm,DOC *a,DOC*b); void SetInitParam(); int isnan(double); //chen Longbin void printm(char* str); void printe(char* str); #endif // !defined(AFX_TEST_H__B678A414_54CC_480B_8068_4FAEED66F002__INCLUDED_)