49 template <
bool cache_sub_predictions>
53 if (cache_sub_predictions)
60 if (cache_sub_predictions)
72 for (std::string& i : data.
pairs)
74 int left_ns = (int)i[0];
75 int right_ns = (int)i[1];
79 for (
size_t k = 1; k <= data.
rank; k++)
86 if (cache_sub_predictions)
95 if (cache_sub_predictions)
99 prediction += (x_dot_l * x_dot_r);
114 predict<true>(data, base, ec);
130 for (std::string& i : data.pairs)
132 int left_ns = (int)i[0];
133 int right_ns = (int)i[1];
141 data.temp_features.deep_copy_from(ec.
feature_space[left_ns]);
143 for (
size_t k = 1; k <= data.rank; k++)
147 for (
size_t i = 0; i < fs.
size(); ++i) fs.
values[i] *= data.sub_predictions[2 * k];
165 data.temp_features.deep_copy_from(ec.
feature_space[right_ns]);
167 for (
size_t k = 1; k <= data.rank; k++)
171 for (
size_t i = 0; i < fs.
size(); ++i) fs.
values[i] *= data.sub_predictions[2 * k - 1];
174 base.update(ec, k + data.rank);
197 auto data = scoped_calloc_or_throw<mf>();
199 new_options.add(
make_option(
"new_mf", data->rank).keep().help(
"rank for reduction-based matrix factorization"));
void resize(size_t length)
float finalize_prediction(shared_data *sd, float ret)
v_array< namespace_index > indices
void learn(mf &data, single_learner &base, example &ec)
void predict(E &ec, size_t i=0)
void deep_copy_from(const features &src)
std::vector< std::string > pairs
bool random_positive_weights
void copy_array(v_array< T > &dst, const v_array< T > &src)
the core definition of a set of features.
base_learner * make_base(learner< T, E > &base)
v_array< feature_value > values
v_array< float > sub_predictions
virtual void add_and_parse(const option_group_definition &group)=0
v_array< unsigned char > predict_indices
std::vector< std::string > pairs
std::array< features, NUM_NAMESPACES > feature_space
single_learner * as_singleline(learner< T, E > *l)
learner< T, E > & init_learner(free_ptr< T > &dat, L *base, void(*learn)(T &, L &, E &), void(*predict)(T &, L &, E &), size_t ws, prediction_type::prediction_type_t pred_type)
void push_back(const T &new_ele)
virtual bool was_supplied(const std::string &key)=0
base_learner * mf_setup(options_i &options, vw &all)
void predict(mf &data, single_learner &base, example &ec)
typed_option< T > make_option(std::string name, T &location)
void set_finish(void(*f)(T &))
LEARNER::base_learner * setup_base(options_i &options, vw &all)
v_array< unsigned char > indices