Took out the template argument that specified the local polynomial order
This commit is contained in:
@@ -42,7 +42,7 @@
|
||||
* fast_kde.Compute(&results);
|
||||
* @endcode
|
||||
*/
|
||||
template<typename TKernel, int lpr_order, typename TPruneRule>
|
||||
template<typename TKernel, typename TPruneRule>
|
||||
class DenseLpr {
|
||||
|
||||
FORBID_ACCIDENTAL_COPIES(DenseLpr);
|
||||
@@ -91,6 +91,9 @@ class DenseLpr {
|
||||
*/
|
||||
void Init(int dimension) {
|
||||
|
||||
struct datanode* local_linear_module =
|
||||
fx_submodule(NULL, "lpr", "lpr_module");
|
||||
int lpr_order = fx_param_int(local_linear_module, "lpr_order", 0);
|
||||
int matrix_dimension =
|
||||
(int) math::BinomialCoefficient(dimension + lpr_order, dimension);
|
||||
|
||||
@@ -127,7 +130,7 @@ class DenseLpr {
|
||||
const double *reference_point = dataset.GetColumnPtr(start + r);
|
||||
|
||||
MultiIndexUtil::ComputePointMultivariatePolynomial
|
||||
(dataset.n_rows(), lpr_order, reference_point,
|
||||
(dataset.n_rows(), lpr_order_, reference_point,
|
||||
reference_point_expansion.ptr());
|
||||
|
||||
// Based on the polynomial expansion computed, sum up its
|
||||
@@ -287,7 +290,7 @@ class DenseLpr {
|
||||
void Init(int dimension) {
|
||||
|
||||
int matrix_dimension =
|
||||
(int) math::BinomialCoefficient(dimension + lpr_order, dimension);
|
||||
(int) math::BinomialCoefficient(dimension + lpr_order_, dimension);
|
||||
|
||||
// Initialize quantities associated with the numerator matrix.
|
||||
numerator_norm_l_ = 0;
|
||||
@@ -335,7 +338,10 @@ class DenseLpr {
|
||||
typedef BinarySpaceTree<DHrectBound<2>, Matrix, LprRStat > ReferenceTree;
|
||||
|
||||
////////// Private Member Variables //////////
|
||||
|
||||
|
||||
/** @brief The local polynomial order. */
|
||||
int lpr_order_;
|
||||
|
||||
/** @brief The required relative error. */
|
||||
double relative_error_;
|
||||
|
||||
@@ -551,11 +557,15 @@ class DenseLpr {
|
||||
void Init(Matrix &queries, Matrix &references, Matrix &reference_targets,
|
||||
struct datanode *module_in) {
|
||||
|
||||
// set the incoming parameter module.
|
||||
module_ = module_in;
|
||||
|
||||
// read in the number of points owned by a leaf
|
||||
int leaflen = fx_param_int(module_in, "leaflen", 20);
|
||||
|
||||
// set the local polynomial approximation order.
|
||||
lpr_order_ = fx_param_double(module_in, "lpr_order", 0);
|
||||
|
||||
// copy reference dataset and reference weights.
|
||||
rset_.Copy(references);
|
||||
rset_targets_.Copy(reference_targets.GetColumnPtr(0),
|
||||
@@ -564,7 +574,7 @@ class DenseLpr {
|
||||
// Record dimensionality and the appropriately cache the number of
|
||||
// components required.
|
||||
dimension_ = rset_.n_rows();
|
||||
row_length_ = (int) math::BinomialCoefficient(dimension_ + lpr_order,
|
||||
row_length_ = (int) math::BinomialCoefficient(dimension_ + lpr_order_,
|
||||
dimension_);
|
||||
|
||||
// copy query dataset.
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
|
||||
#include "matrix_util.h"
|
||||
|
||||
template<typename TKernel, int lpr_order, typename TPruneRule>
|
||||
void DenseLpr<TKernel, lpr_order, TPruneRule>::SqdistAndKernelRanges_
|
||||
template<typename TKernel, typename TPruneRule>
|
||||
void DenseLpr<TKernel, TPruneRule>::SqdistAndKernelRanges_
|
||||
(QueryTree *qnode, ReferenceTree *rnode,
|
||||
DRange &dsqd_range, DRange &kernel_value_range) {
|
||||
|
||||
@@ -16,8 +16,8 @@ void DenseLpr<TKernel, lpr_order, TPruneRule>::SqdistAndKernelRanges_
|
||||
kernel_value_range = kernel_.RangeUnnormOnSq(dsqd_range);
|
||||
}
|
||||
|
||||
template<typename TKernel, int lpr_order, typename TPruneRule>
|
||||
void DenseLpr<TKernel, lpr_order, TPruneRule>::ResetQuery_(int q) {
|
||||
template<typename TKernel, typename TPruneRule>
|
||||
void DenseLpr<TKernel, TPruneRule>::ResetQuery_(int q) {
|
||||
|
||||
// First the numerator quantities.
|
||||
Vector q_numerator_l, q_numerator_e;
|
||||
@@ -35,8 +35,8 @@ void DenseLpr<TKernel, lpr_order, TPruneRule>::ResetQuery_(int q) {
|
||||
denominator_n_pruned_[q] = 0;
|
||||
}
|
||||
|
||||
template<typename TKernel, int lpr_order, typename TPruneRule>
|
||||
void DenseLpr<TKernel, lpr_order, TPruneRule>::
|
||||
template<typename TKernel, typename TPruneRule>
|
||||
void DenseLpr<TKernel, TPruneRule>::
|
||||
ComputeTargetWeightedReferenceVectors_(ReferenceTree *rnode) {
|
||||
|
||||
if(rnode->is_leaf()) {
|
||||
@@ -58,7 +58,7 @@ ComputeTargetWeightedReferenceVectors_(ReferenceTree *rnode) {
|
||||
|
||||
// Compute the multiindex expansion of the given reference point.
|
||||
MultiIndexUtil::ComputePointMultivariatePolynomial
|
||||
(dimension_, lpr_order, r_col, r_target_weighted_by_coordinates);
|
||||
(dimension_, lpr_order_, r_col, r_target_weighted_by_coordinates);
|
||||
|
||||
// Scale the expansion by the reference target.
|
||||
la::Scale(row_length_, rset_targets_[r],
|
||||
@@ -91,8 +91,8 @@ ComputeTargetWeightedReferenceVectors_(ReferenceTree *rnode) {
|
||||
}
|
||||
}
|
||||
|
||||
template<typename TKernel, int lpr_order, typename TPruneRule>
|
||||
void DenseLpr<TKernel, lpr_order, TPruneRule>::
|
||||
template<typename TKernel, typename TPruneRule>
|
||||
void DenseLpr<TKernel, TPruneRule>::
|
||||
InitializeQueryTree_(QueryTree *qnode) {
|
||||
|
||||
// Set the bounds to default values for the statistics.
|
||||
@@ -115,8 +115,8 @@ InitializeQueryTree_(QueryTree *qnode) {
|
||||
}
|
||||
}
|
||||
|
||||
template<typename TKernel, int lpr_order, typename TPruneRule>
|
||||
void DenseLpr<TKernel, lpr_order, TPruneRule>::BestNodePartners_
|
||||
template<typename TKernel, typename TPruneRule>
|
||||
void DenseLpr<TKernel, TPruneRule>::BestNodePartners_
|
||||
(QueryTree *nd, ReferenceTree *nd1, ReferenceTree *nd2,
|
||||
ReferenceTree **partner1, ReferenceTree **partner2) {
|
||||
|
||||
@@ -133,8 +133,8 @@ void DenseLpr<TKernel, lpr_order, TPruneRule>::BestNodePartners_
|
||||
}
|
||||
}
|
||||
|
||||
template<typename TKernel, int lpr_order, typename TPruneRule>
|
||||
void DenseLpr<TKernel, lpr_order, TPruneRule>::BestNodePartners_
|
||||
template<typename TKernel, typename TPruneRule>
|
||||
void DenseLpr<TKernel, TPruneRule>::BestNodePartners_
|
||||
(ReferenceTree *nd, QueryTree *nd1, QueryTree *nd2,
|
||||
QueryTree **partner1, QueryTree **partner2) {
|
||||
|
||||
@@ -151,8 +151,8 @@ void DenseLpr<TKernel, lpr_order, TPruneRule>::BestNodePartners_
|
||||
}
|
||||
}
|
||||
|
||||
template<typename TKernel, int lpr_order, typename TPruneRule>
|
||||
void DenseLpr<TKernel, lpr_order, TPruneRule>::DualtreeLprBase_
|
||||
template<typename TKernel, typename TPruneRule>
|
||||
void DenseLpr<TKernel, TPruneRule>::DualtreeLprBase_
|
||||
(QueryTree *qnode, ReferenceTree *rnode) {
|
||||
|
||||
// Temporary variable for storing multivariate expansion of a
|
||||
@@ -199,7 +199,7 @@ void DenseLpr<TKernel, lpr_order, TPruneRule>::DualtreeLprBase_
|
||||
|
||||
// Compute the reference point expansion.
|
||||
MultiIndexUtil::ComputePointMultivariatePolynomial
|
||||
(dimension_, lpr_order, r_col, reference_point_expansion.ptr());
|
||||
(dimension_, lpr_order_, r_col, reference_point_expansion.ptr());
|
||||
|
||||
// Pairwise distance and kernel value and kernel value weighted
|
||||
// by the reference target training value.
|
||||
@@ -270,8 +270,8 @@ void DenseLpr<TKernel, lpr_order, TPruneRule>::DualtreeLprBase_
|
||||
qnode->stat().postponed_denominator_n_pruned_ = 0;
|
||||
}
|
||||
|
||||
template<typename TKernel, int lpr_order, typename TPruneRule>
|
||||
void DenseLpr<TKernel, lpr_order, TPruneRule>::DualtreeLprCanonical_
|
||||
template<typename TKernel, typename TPruneRule>
|
||||
void DenseLpr<TKernel, TPruneRule>::DualtreeLprCanonical_
|
||||
(QueryTree *qnode, ReferenceTree *rnode) {
|
||||
|
||||
// Total amount of used error
|
||||
@@ -434,8 +434,8 @@ void DenseLpr<TKernel, lpr_order, TPruneRule>::DualtreeLprCanonical_
|
||||
} // end of the case: non-leaf query node.
|
||||
}
|
||||
|
||||
template<typename TKernel, int lpr_order, typename TPruneRule>
|
||||
void DenseLpr<TKernel, lpr_order, TPruneRule>::
|
||||
template<typename TKernel, typename TPruneRule>
|
||||
void DenseLpr<TKernel, TPruneRule>::
|
||||
FinalizeQueryTree_(QueryTree *qnode) {
|
||||
|
||||
LprQStat &q_stat = qnode->stat();
|
||||
@@ -476,7 +476,7 @@ FinalizeQueryTree_(QueryTree *qnode) {
|
||||
la::MulOverwrite(pseudoinverse_denominator, q_numerator_e,
|
||||
&least_squares_solution);
|
||||
MultiIndexUtil::ComputePointMultivariatePolynomial
|
||||
(dimension_, lpr_order, query_point, query_point_expansion.ptr());
|
||||
(dimension_, lpr_order_, query_point, query_point_expansion.ptr());
|
||||
regression_estimates_[q] = la::Dot(query_point_expansion,
|
||||
least_squares_solution);
|
||||
}
|
||||
|
||||
@@ -53,6 +53,9 @@ int main(int argc, char *argv[]) {
|
||||
// users.
|
||||
DatasetScaler::ScaleDataByMinMax(queries, references, false);
|
||||
|
||||
// Do fast algorithm.
|
||||
DenseLpr<EpanKernel, RelativePruneLpr> fast_lpr;
|
||||
|
||||
// Do naive algorithm.
|
||||
Vector naive_query_regression_estimates;
|
||||
ArrayList<DRange> naive_query_confidence_bands;
|
||||
|
||||
Reference in New Issue
Block a user