float SVDPredictor::Predict(int user, int item, int k) { assert(k <= sv_.rows()); float ret = RatingMeanByUser(user); for (int i = 0; i < k; i++) { ret += u_(user, i) * sv_(i, 0) * v_(item, i); } #if 0 const Eigen::MatrixXf d = (u_ * sv_.asDiagonal()) * v_.transpose(); printf("ret(%d, %d)=%f\n", user, item, d(user, item) + RatingMeanByUser(user)); #endif return ret; }
/** \brief Zero-based indexing: Preconditions: <tt>values()!=NULL && (0 <= i * < subDim()-1)</tt>. */ Scalar& operator()(Teuchos_Index i) const { return sv_(i); }