6 Eigen::VectorXi
const& dataIn) :
ModPiece(numClassesIn*dataIn.size()*Eigen::VectorXi::Ones(1),
7 Eigen::VectorXi::Ones(1)),
8 numClasses(numClassesIn),
17 Eigen::VectorXd
const& scoresVec = inputs.at(0).get();
18 Eigen::Map<const Eigen::MatrixXd> scores(scoresVec.data(),
numClasses,
data.size());
21 Eigen::RowVectorXd logPartition = scores.array().exp().colwise().sum().log();
23 Eigen::VectorXd logP(
data.size());
24 for(
int i=0; i<
data.size(); ++i)
25 logP(i) = scores(
data(i),i) - logPartition(i);
33 unsigned int const inputDimWrt,
35 Eigen::VectorXd
const& sensitivity)
37 Eigen::VectorXd
const& scoresVec = inputs.at(0).get();
38 Eigen::Map<const Eigen::MatrixXd> scores(scoresVec.data(),
numClasses,
data.size());
45 Eigen::RowVectorXd logPartition = scores.array().exp().colwise().sum().log();
48 Eigen::VectorXd logP(
data.size());
49 for(
int i=0; i<
data.size(); ++i)
50 logP(i) = scores(
data(i),i) - logPartition(i);
52 double logLikely = logP.sum();
56 for(
int i=0; i<
data.size(); ++i){
57 gradMat(
data(i),i) += 1.0;
58 gradMat.col(i) -= (1.0/exp(logPartition(i)))*scores.col(i).array().exp().matrix();
61 gradMat *= sensitivity(0);
65 unsigned int const inputDimWrt,
68 jacobian =
Gradient(outputDimWrt, inputDimWrt, input, Eigen::VectorXd::Ones(1).eval()).transpose();
72 unsigned int const inputDimWrt,
74 Eigen::VectorXd
const& vec)
Provides an abstract interface for defining vector-valued model components.
virtual Eigen::VectorXd const & Gradient(unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sensitivity)
Compute the Gradient .
const Eigen::VectorXi inputSizes
virtual Eigen::MatrixXd const & Jacobian(unsigned int const outputDimWrt, unsigned int const inputDimWrt, std::vector< Eigen::VectorXd > const &input)
Compute the Jacobian of this ModPiece.
std::vector< Eigen::VectorXd > outputs
Eigen::VectorXd jacobianAction
virtual void GradientImpl(unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &sensitivity) override
virtual void EvaluateImpl(muq::Modeling::ref_vector< Eigen::VectorXd > const &inputs) override
const unsigned int numClasses
MultiLogisticLikelihood(unsigned int numClasses, Eigen::VectorXi const &data)
virtual void JacobianImpl(unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input) override
virtual void ApplyJacobianImpl(unsigned int const outputDimWrt, unsigned int const inputDimWrt, ref_vector< Eigen::VectorXd > const &input, Eigen::VectorXd const &vec) override
std::vector< std::reference_wrapper< const T > > ref_vector
A vector of references to something ...