11 #ifndef _MULTITASKKERNELPLIFNORMALIZER_H___
12 #define _MULTITASKKERNELPLIFNORMALIZER_H___
44 num_betas =
static_cast<int>(support_.size());
103 std::sort(vec.begin(), vec.end());
106 std::vector<int32_t>::iterator endLocation = std::unique(vec.begin(), vec.end());
109 int32_t num_vec = std::distance(vec.begin(), endLocation);
148 int32_t upper_bound_idx = -1;
162 if (upper_bound_idx == -1)
169 int32_t lower_bound_idx = upper_bound_idx - 1;
172 float64_t factor_lower = 1 - (distance - support[lower_bound_idx]) / interval_size;
173 float64_t factor_upper = 1 - factor_lower;
175 similarity = factor_lower*
betas[lower_bound_idx] + factor_upper*
betas[upper_bound_idx];
225 ASSERT(task_lhs < num_tasks && task_lhs >= 0);
226 ASSERT(task_rhs < num_tasks && task_rhs >= 0);
241 ASSERT(task_lhs < num_tasks && task_lhs >= 0);
242 ASSERT(task_rhs < num_tasks && task_rhs >= 0);
256 ASSERT(task_lhs < num_tasks && task_lhs >= 0);
257 ASSERT(task_rhs < num_tasks && task_rhs >= 0);
272 ASSERT(task_lhs < num_tasks && task_lhs >= 0);
273 ASSERT(task_rhs < num_tasks && task_rhs >= 0);
316 return "MultitaskKernelPlifNormalizer";
std::vector< int32_t > task_vector_rhs
virtual std::vector< int32_t > get_task_vector_rhs() const
void set_task_similarity(int32_t task_lhs, int32_t task_rhs, float64_t similarity)
virtual void register_params()
float64_t get_beta(int32_t idx)
float64_t compute_task_similarity(int32_t task_a, int32_t task_b)
virtual void set_task_vector_lhs(std::vector< int32_t > vec)
CMultitaskKernelPlifNormalizer(std::vector< float64_t > support_, std::vector< int32_t > task_vector)
int32_t get_num_unique_tasks(std::vector< int32_t > vec)
float64_t get_task_similarity(int32_t task_lhs, int32_t task_rhs)
virtual float64_t normalize(float64_t value, int32_t idx_lhs, int32_t idx_rhs)
virtual const char * get_name() const
CMultitaskKernelPlifNormalizer * KernelNormalizerToMultitaskKernelPlifNormalizer(CKernelNormalizer *n)
std::vector< float64_t > distance_matrix
void add(bool *param, const char *name, const char *description="")
std::vector< float64_t > betas
float64_t get_task_distance(int32_t task_lhs, int32_t task_rhs)
void set_task_distance(int32_t task_lhs, int32_t task_rhs, float64_t distance)
virtual std::vector< int32_t > get_task_vector_lhs() const
virtual void set_task_vector_rhs(std::vector< int32_t > vec)
The class Kernel Normalizer defines a function to post-process kernel values.
The MultitaskKernel allows learning a piece-wise linear function (PLIF) via MKL.
virtual ~CMultitaskKernelPlifNormalizer()
Base-class for parameterized Kernel Normalizers.
void add_vector(bool **param, index_t *length, const char *name, const char *description="")
CMultitaskKernelPlifNormalizer()
std::vector< int32_t > task_vector_lhs
void set_beta(int32_t idx, float64_t weight)
virtual void set_task_vector(std::vector< int32_t > vec)
std::vector< float64_t > similarity_matrix
std::vector< float64_t > support