28 using namespace shogun;
30 #ifndef DOXYGEN_SHOULD_SKIP_THIS
46 #endif // DOXYGEN_SHOULD_SKIP_THIS
119 SG_DEBUG(
"deleting CWeightedDegreeStringKernel optimization\n");
143 int32_t lhs_changed=(
lhs!=l);
144 int32_t rhs_changed=(
rhs!=r);
148 SG_DEBUG(
"lhs_changed: %i\n", lhs_changed);
149 SG_DEBUG(
"rhs_changed: %i\n", rhs_changed);
156 SG_ERROR(
"All strings in WD kernel must have same length (lhs wrong)!\n");
159 SG_ERROR(
"All strings in WD kernel must have same length (rhs wrong)!\n");
185 SG_DEBUG(
"deleting CWeightedDegreeStringKernel optimization\n");
210 SG_DEBUG(
"deleting CWeightedDegreeStringKernel optimization\n");
215 SG_DEBUG(
"initializing CWeightedDegreeStringKernel optimization\n") ;
217 for (int32_t i=0; i<count; i++)
221 if ( (i % (count/10+1)) == 0)
264 char* avec, int32_t alen,
char* bvec, int32_t blen)
268 for (int32_t i=0; i<alen; i++)
271 int32_t mismatches=0;
273 for (int32_t j=0; (i+j<alen) && (j<
degree); j++)
275 if (avec[i+j]!=bvec[i+j])
292 char* avec, int32_t alen,
char* bvec, int32_t blen)
297 int32_t match_len=-1;
299 for (int32_t i=0; i<alen; i++)
301 if (avec[i]==bvec[i])
318 char* avec, int32_t alen,
char* bvec, int32_t blen)
322 for (int32_t i=0; i<alen; i++)
326 for (int32_t j=0; (i+j<alen) && (j<
degree); j++)
328 if (avec[i+j]!=bvec[i+j])
341 char* avec, int32_t alen,
char* bvec, int32_t blen)
345 for (int32_t i=0; i<alen; i++)
348 for (int32_t j=0; (i+j<alen) && (j<
degree); j++)
350 if (avec[i+j]!=bvec[i+j])
367 bool free_avec, free_bvec;
402 for (int32_t i=0; i<len; i++)
408 for (int32_t i=0; i<len; i++)
421 for (int32_t i=0; i<len; i++)
437 int32_t idx,
float64_t alpha, int32_t tree_num)
448 for (int32_t i=tree_num; i<tree_num+
degree && i<len; i++)
473 for (int32_t i=0; i<len; i++)
477 for (int32_t i=0; i<len; i++)
488 int32_t idx,
float64_t alpha, int32_t tree_num)
499 for (int32_t i=tree_num; i<len && i<tree_num+
degree; i++)
523 ASSERT(char_vec && len>0);
526 for (int32_t i=0; i<len; i++)
532 for (int32_t i=0; i<len; i++)
551 for (int32_t i=0; i<len; i++)
556 for (int32_t i=0; i<len; i++)
632 SG_ERROR(
"WD: Dimension mismatch (should be (seq_length | 1) x degree) got (%d x %d)\n", len,
degree);
649 for (int32_t i=0; i<
degree*len; i++)
677 for (int32_t i=0; i<len; i++)
752 for (int32_t i=1; i<
degree+1 ; i++)
755 for (int32_t i=degree+1; i<
seq_length+1 ; i++)
766 for (int32_t i=1; i<
degree+1 ; i++)
769 for (int32_t i=degree+1; i<
seq_length+1 ; i++)
779 for (int32_t i=1; i<
degree+1 ; i++)
782 for (int32_t i=degree+1; i<
seq_length+1 ; i++)
793 for (int32_t i=1; i<
degree+1 ; i++)
796 for (int32_t i=degree+1; i<
seq_length+1 ; i++)
829 S_THREAD_PARAM* params = (S_THREAD_PARAM*) p;
834 int32_t
length=params->length;
835 int32_t* vec=params->vec;
838 int32_t* vec_idx=params->vec_idx;
843 for (int32_t i=params->start; i<params->end; i++)
864 int32_t num_vec, int32_t* vec_idx,
float64_t* result, int32_t num_suppvec,
871 ASSERT(num_vec<=rhs->get_num_vectors());
881 int32_t* vec=
SG_MALLOC(int32_t, num_threads*num_feat);
886 for (int32_t j=0; j<num_feat; j++)
893 S_THREAD_PARAM params;
895 params.result=result;
899 params.factor=factor;
904 params.vec_idx=vec_idx;
917 pthread_t* threads =
SG_MALLOC(pthread_t, num_threads-1);
918 S_THREAD_PARAM* params =
SG_MALLOC(S_THREAD_PARAM, num_threads);
919 int32_t step= num_vec/num_threads;
922 for (t=0; t<num_threads-1; t++)
924 params[t].vec=&vec[num_feat*t];
925 params[t].result=result;
927 params[t].kernel=
this;
928 params[t].tries=
tries;
929 params[t].factor=factor;
931 params[t].start = t*step;
932 params[t].end = (t+1)*step;
934 params[t].vec_idx=vec_idx;
937 params[t].vec=&vec[num_feat*t];
938 params[t].result=result;
940 params[t].kernel=
this;
941 params[t].tries=
tries;
942 params[t].factor=factor;
944 params[t].start=t*step;
945 params[t].end=num_vec;
947 params[t].vec_idx=vec_idx;
950 for (t=0; t<num_threads-1; t++)
951 pthread_join(threads[t], NULL);
974 if (
lhs!=NULL &&
rhs!=NULL)
980 void CWeightedDegreeStringKernel::init()
1014 "weights",
"WD Kernel weights.");
1017 "Weights per position.");
1021 "Number of allowed mismatches.");
1023 "If block computation shall be used.");
1025 "WeightedDegree kernel type.");
1027 "Unqueal -1 if just a single degree is selected.");
1029 "Alphabet of Features.");