Ejemplo n.º 1
0
        /// <summary>
        /// Infers parameters for a given cold item.
        /// </summary>
        /// <param name="itemFeatures">The item features.</param>
        /// <returns>A distribution over the item parameters.</returns>
        public ItemParameterDistribution InferItemParameters(SparseFeatureVector itemFeatures)
        {
            ItemParameterDistribution result;

            if (this.itemFeatureParameterPosteriors.FeatureCount == 0)
            {
                Debug.Assert(
                    itemFeatures.FeatureCount == 0,
                    "The number of item features passed must be equal to the number of item features learned.");

                result = this.itemParameterDistributionAverage;
            }
            else
            {
                GaussianArray traits;
                Gaussian      bias;

                AlgorithmUtils.AddFeatureContribution(
                    this.itemParameterDistributionAverage,
                    this.itemFeatureParameterPosteriors,
                    itemFeatures,
                    out traits,
                    out bias);

                result = new ItemParameterDistribution(traits, bias);
            }

            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Adds the feature contribution for a given user/item to its traits and bias.
        /// </summary>
        /// <param name="parameters">The user/item parameters.</param>
        /// <param name="featureWeights">The feature weights.</param>
        /// <param name="featureValues">The feature values.</param>
        /// <param name="adjustedTraits">The resulting traits.</param>
        /// <param name="adjustedBias">The resulting bias.</param>
        public static void AddFeatureContribution(
            EntityParameterDistribution parameters,
            FeatureParameterDistribution featureWeights,
            SparseFeatureVector featureValues,
            out GaussianArray adjustedTraits,
            out Gaussian adjustedBias)
        {
            adjustedTraits = new GaussianArray(
                parameters.Traits.Count,
                i => DoublePlusOp.SumAverageConditional(
                    parameters.Traits[i],
                    ComputeFeatureContribution(featureWeights.TraitWeights[i], featureValues.NonZeroFeatureValues, featureValues.NonZeroFeatureIndices)));

            adjustedBias = DoublePlusOp.SumAverageConditional(
                parameters.Bias,
                ComputeFeatureContribution(featureWeights.BiasWeights, featureValues.NonZeroFeatureValues, featureValues.NonZeroFeatureIndices));
        }