11 #ifndef _MULTITASKKERNELPLIFNORMALIZER_H___
12 #define _MULTITASKKERNELPLIFNORMALIZER_H___
45 num_betas =
static_cast<int>(support_.size());
104 std::sort(vec.begin(), vec.end());
107 std::vector<int32_t>::iterator endLocation = std::unique(vec.begin(), vec.end());
149 int32_t upper_bound_idx = -1;
163 if (upper_bound_idx == -1)
170 int32_t lower_bound_idx = upper_bound_idx - 1;
173 float64_t factor_lower = 1 - (distance - support[lower_bound_idx]) / interval_size;
174 float64_t factor_upper = 1 - factor_lower;
176 similarity = factor_lower*
betas[lower_bound_idx] + factor_upper*
betas[upper_bound_idx];
226 ASSERT(task_lhs < num_tasks && task_lhs >= 0)
227 ASSERT(task_rhs < num_tasks && task_rhs >= 0)
242 ASSERT(task_lhs < num_tasks && task_lhs >= 0)
243 ASSERT(task_rhs < num_tasks && task_rhs >= 0)
257 ASSERT(task_lhs < num_tasks && task_lhs >= 0)
258 ASSERT(task_rhs < num_tasks && task_rhs >= 0)
273 ASSERT(task_lhs < num_tasks && task_lhs >= 0)
274 ASSERT(task_rhs < num_tasks && task_rhs >= 0)
317 return "MultitaskKernelPlifNormalizer";
float distance(CJLCoverTreePoint p1, CJLCoverTreePoint p2, float64_t upper_bound)
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
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="")
all of classes and functions are contained in the shogun namespace
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