Accord.Neuro.ActivationFunctions.BernoulliFunction.Generate2 C# (CSharp) Method

Generate2() public method

Samples a value from the function given a function output value.

The method calculates the same output value as the Generate method, but it takes not the input x value itself, but the function value, which was calculated previously with help of the IActivationFunction.Function(double) method.

public Generate2 ( double y ) : double
y double The function output value. This is the value which was obtained /// with the help of the method.
return double
        public double Generate2(double y)
        {
            return y > Generator.Random.NextDouble() ? 1 : 0;
        }

Usage Example

        public void ConstructorTest()
        {
            // Create a Bernoulli function with sigmoid's alpha = 1
            BernoulliFunction function = new BernoulliFunction();

            // Computes the function output (sigmoid function)
            double y = function.Function(x: 0.4); // 0.5986876

            // Draws a sample from a Bernoulli distribution with
            // mean given by the function output y (given as before)
            double z = function.Generate(x: 0.4); // (random, 0 or 1)

            // Here, z can be either 0 or 1. Since it follows a Bernoulli
            // distribution with mean 0.59, it is expected to be 1 about 
            // 0.59 of the time.

            // Now, please note that the above is completely equivalent 
            // to computing the line below (remember, 0.5986876 == y)
            double w = function.Generate2(y: 0.5986876); // (random, 0 or 1)


            // We can also compute the derivative of the sigmoid function
            double d = function.Derivative(x: 0.4); // 0.240260

            // Or compute the derivative given the functions' output y
            double e = function.Derivative2(y: 0.5986876); // 0.240260

            Assert.AreEqual(0.5986876, y, 1e-7);
            Assert.AreEqual(0.2402607, d, 1e-7);
            Assert.AreEqual(0.2402607, e, 1e-7);
        }