44 using namespace internal;
46 MedianHeuristic::MedianHeuristic(KernelManager& km,
CMMD* est) : KernelSelection(km, est),
distance(nullptr)
48 for (
auto i=0; i<kernel_mgr.num_kernels(); ++i)
51 "The underlying kernel has to be a GaussianKernel (was %s)!\n",
52 kernel_mgr.kernel_at(i)->get_name());
56 MedianHeuristic::~MedianHeuristic()
60 void MedianHeuristic::init_measures()
65 void MedianHeuristic::compute_measures()
68 tmp->set_disable_sqrt(
false);
70 distance=std::shared_ptr<CCustomDistance>(estimator->compute_joint_distance(tmp));
75 "Distance matrix is supposed to be a square matrix (was of dimension %dX%d)!\n",
79 for (
auto j=0; j<n; ++j)
81 for (
auto i=j+1; i<n; ++i)
82 measures[write_idx++]=
distance->distance(i, j);
84 std::sort(measures.data(), measures.data()+measures.size());
95 return distance->get_distance_matrix();
98 CKernel* MedianHeuristic::select_kernel()
101 auto median_distance=measures[measures.size()/2];
102 SG_SDEBUG(
"kernel width (shogun): %f\n", median_distance);
104 const auto num_kernels=kernel_mgr.num_kernels();
106 for (
auto i=0; i<num_kernels; ++i)
112 auto kernel_idx=(int64_t)
std::distance(measures.data(), std::min_element(measures.data(), measures.data()+measures.size()));
113 SG_SDEBUG(
"Selected kernel at %d position!\n", kernel_idx);
114 return kernel_mgr.kernel_at(kernel_idx);
float distance(CJLCoverTreePoint p1, CJLCoverTreePoint p2, float64_t upper_bound)
virtual float64_t get_width() const
#define SG_SNOTIMPLEMENTED
The well known Gaussian kernel (swiss army knife for SVMs) computed on CDotFeatures.
all of classes and functions are contained in the shogun namespace
Abstract base class that provides an interface for performing kernel two-sample test using Maximum Me...