/// <summary>
        /// Infers parameters for a given cold user.
        /// </summary>
        /// <param name="userFeatures">The user features.</param>
        /// <returns>A distribution over the user parameters.</returns>
        public UserParameterDistribution InferUserParameters(SparseFeatureVector userFeatures)
        {
            UserParameterDistribution result;

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

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

                AlgorithmUtils.AddFeatureContribution(
                    this.userParameterDistributionAverage,
                    this.userFeatureParameterPosteriors,
                    userFeatures,
                    out traits,
                    out bias);

                result = new UserParameterDistribution(traits, bias, this.userParameterDistributionAverage.Thresholds);
            }

            return(result);
        }
示例#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));
        }