diff --git a/include/hpp/fcl/collision_data.h b/include/hpp/fcl/collision_data.h index 6f850d6911a1eed0112e2518aaedec37cc510bfc..5df9d173dc6707a9279d3983bf04ec0f41145005 100644 --- a/include/hpp/fcl/collision_data.h +++ b/include/hpp/fcl/collision_data.h @@ -40,7 +40,6 @@ #define FCL_COLLISION_DATA_H #include <hpp/fcl/collision_object.h> -#include <hpp/fcl/learning/classifier.h> #include <hpp/fcl/knn/nearest_neighbors.h> diff --git a/include/hpp/fcl/learning/classifier.h b/include/hpp/fcl/learning/classifier.h deleted file mode 100644 index d6660e918ba13d9757e295ba48a535f71d3ea1a2..0000000000000000000000000000000000000000 --- a/include/hpp/fcl/learning/classifier.h +++ /dev/null @@ -1,148 +0,0 @@ -#ifndef FCL_LEARNING_CLASSIFIER_H -#define FCL_LEARNING_CLASSIFIER_H - -#include <hpp/fcl/math/vec_nf.h> - -namespace fcl -{ -template<std::size_t N> -struct Item -{ - Vecnf<N> q; - bool label; - FCL_REAL w; - - Item(const Vecnf<N>& q_, bool label_, FCL_REAL w_ = 1) : q(q_), - label(label_), - w(w_) - {} - - Item() {} -}; - -template<std::size_t N> -struct Scaler -{ - Vecnf<N> v_min, v_max; - Scaler() - { - // default no scale - for(std::size_t i = 0; i < N; ++i) - { - v_min[i] = 0; - v_max[i] = 1; - } - } - - Scaler(const Vecnf<N>& v_min_, const Vecnf<N>& v_max_) : v_min(v_min_), - v_max(v_max_) - {} - - Vecnf<N> scale(const Vecnf<N>& v) const - { - Vecnf<N> res; - for(std::size_t i = 0; i < N; ++i) - res[i] = (v[i] - v_min[i]) / (v_max[i] - v_min[i]); - return res; - } - - Vecnf<N> unscale(const Vecnf<N>& v) const - { - Vecnf<N> res; - for(std::size_t i = 0; i < N; ++i) - res[i] = v[i] * (v_max[i] - v_min[i]) + v_min[i]; - return res; - } -}; - - -struct PredictResult -{ - bool label; - FCL_REAL prob; - - PredictResult() {} - PredictResult(bool label_, FCL_REAL prob_ = 1) : label(label_), - prob(prob_) - {} -}; - -template<std::size_t N> -class SVMClassifier -{ -public: - - ~SVMClassifier() {} - - virtual PredictResult predict(const Vecnf<N>& q) const = 0; - virtual std::vector<PredictResult> predict(const std::vector<Vecnf<N> >& qs) const = 0; - - virtual std::vector<Item<N> > getSupportVectors() const = 0; - virtual void setScaler(const Scaler<N>& scaler) = 0; - - virtual void learn(const std::vector<Item<N> >& data) = 0; - - FCL_REAL error_rate(const std::vector<Item<N> >& data) const - { - std::size_t num = data.size(); - - std::size_t error_num = 0; - for(std::size_t i = 0; i < data.size(); ++i) - { - PredictResult res = predict(data[i].q); - if(res.label != data[i].label) - error_num++; - } - - return error_num / (FCL_REAL)num; - } -}; - -template<std::size_t N> -Scaler<N> computeScaler(const std::vector<Item<N> >& data) -{ - Vecnf<N> lower_bound, upper_bound; - for(std::size_t j = 0; j < N; ++j) - { - lower_bound[j] = std::numeric_limits<FCL_REAL>::max(); - upper_bound[j] = -std::numeric_limits<FCL_REAL>::max(); - } - - for(std::size_t i = 0; i < data.size(); ++i) - { - for(std::size_t j = 0; j < N; ++j) - { - if(data[i].q[j] < lower_bound[j]) lower_bound[j] = data[i].q[j]; - if(data[i].q[j] > upper_bound[j]) upper_bound[j] = data[i].q[j]; - } - } - - return Scaler<N>(lower_bound, upper_bound); -} - -template<std::size_t N> -Scaler<N> computeScaler(const std::vector<Vecnf<N> >& data) -{ - Vecnf<N> lower_bound, upper_bound; - for(std::size_t j = 0; j < N; ++j) - { - lower_bound[j] = std::numeric_limits<FCL_REAL>::max(); - upper_bound[j] = -std::numeric_limits<FCL_REAL>::max(); - } - - for(std::size_t i = 0; i < data.size(); ++i) - { - for(std::size_t j = 0; j < N; ++j) - { - if(data[i][j] < lower_bound[j]) lower_bound[j] = data[i][j]; - if(data[i][j] > upper_bound[j]) upper_bound[j] = data[i][j]; - } - } - - return Scaler<N>(lower_bound, upper_bound); -} - -} - -#endif -