Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ limitations under the License.

<section class="intro">

The [modified huber loss gradient][modified-huber-loss-gradient] is defined as
The [modified Huber loss gradient][modified-huber-loss-gradient] is defined as

<!-- <equation class="equation" label="eq:modified_huber_loss_gradient" align="center" raw="
\frac{\partial \ell}{\partial w_i} = \begin{cases} -4yx_i & \text{if } yp < -1 \\ -2y(1 - yp)x_i & \text{if } -1 \le yp \le 1 \\ 0 & \text{if } yp > 1 \end{cases}" alt="Equation for the modified Huber loss gradient."> -->
Expand Down Expand Up @@ -73,12 +73,15 @@ The function accepts the following arguments:
If any argument is `NaN`, the function returns `NaN`.

```javascript
var v = modifiedHuberGradient( 2.0, NaN, 0.782 );
var v = modifiedHuberGradient( NaN, 1.0, 0.782 );
// returns NaN

v = modifiedHuberGradient( 1.0, NaN, 0.782 );
// returns NaN

v = modifiedHuberGradient( 1.0, 1.0, NaN );
// returns NaN

v = modifiedHuberGradient( NaN, NaN, NaN );
// returns NaN
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,12 +130,12 @@ tape( 'the created function evaluates the pdf for `x` given `mu` and `sigma`', f
sigma = data.sigma;

for ( i = 0; i < x.length; i++ ) {
pdf = factory( mu[i], sigma[i] );
y = pdf( x[i] );
if ( y === expected[i] ) {
t.strictEqual(y, expected[i], 'x: '+x[i]+', mu: '+mu[i]+', sigma: '+sigma[i]+', y: '+y+', expected: '+expected[i]);
pdf = factory( mu[ i ], sigma[ i ] );
y = pdf( x[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[ i ]+', mu: '+mu[ i ]+', sigma: '+sigma[ i ]+', y: '+y+', expected: '+expected[ i ] );
} else {
t.ok( isAlmostSameValue( y, expected[i], 1 ), 'within tolerance. x: '+x[i]+'. mu: '+mu[i]+'. sigma: '+sigma[i]+'. y: '+y+'. expected: '+expected[i]+'.' );
t.ok( isAlmostSameValue( y, expected[ i ], 1 ), 'within tolerance. x: '+x[ i ]+'. mu: '+mu[ i ]+'. sigma: '+sigma[ i ]+'. y: '+y+'. expected: '+expected[ i ]+'.' );
}
}
t.end();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,11 @@ tape( 'the function evaluates the pdf for `x` given `mu` and `sigma`', function
sigma = data.sigma;

for ( i = 0; i < x.length; i++ ) {
y = pdf( x[i], mu[i], sigma[i] );
if ( y === expected[i] ) {
t.strictEqual( y, expected[i], 'x: '+x[i]+', mu: '+mu[i]+', sigma: '+sigma[i]+', y: '+y+', expected: '+expected[i] );
y = pdf( x[ i ], mu[ i ], sigma[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[ i ]+', mu: '+mu[ i ]+', sigma: '+sigma[ i ]+', y: '+y+', expected: '+expected[ i ] );
} else {
t.ok( isAlmostSameValue( y, expected[i], 1 ), 'within tolerance. x: '+x[i]+'. mu: '+mu[i]+'. sigma: '+sigma[i]+'. y: '+y+'. expected: '+expected[i]+'.' );
t.ok( isAlmostSameValue( y, expected[ i ], 1 ), 'within tolerance. x: '+x[ i ]+'. mu: '+mu[ i ]+'. sigma: '+sigma[ i ]+'. y: '+y+'. expected: '+expected[ i ]+'.' );
}
}
t.end();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,11 +104,11 @@ tape( 'the function evaluates the pdf for `x` given `mu` and `sigma`', opts, fun
sigma = data.sigma;

for ( i = 0; i < x.length; i++ ) {
y = pdf( x[i], mu[i], sigma[i] );
if ( y === expected[i] ) {
t.strictEqual( y, expected[i], 'x: '+x[i]+', mu: '+mu[i]+', sigma: '+sigma[i]+', y: '+y+', expected: '+expected[i] );
y = pdf( x[ i ], mu[ i ], sigma[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'x: '+x[ i ]+', mu: '+mu[ i ]+', sigma: '+sigma[ i ]+', y: '+y+', expected: '+expected[ i ] );
} else {
t.ok( isAlmostSameValue( y, expected[i], 1 ), 'within tolerance. x: '+x[i]+'. mu: '+mu[i]+'. sigma: '+sigma[i]+'. y: '+y+'. expected: '+expected[i]+'.' );
t.ok( isAlmostSameValue( y, expected[ i ], 1 ), 'within tolerance. x: '+x[ i ]+'. mu: '+mu[ i ]+'. sigma: '+sigma[ i ]+'. y: '+y+'. expected: '+expected[ i ]+'.' );
}
}
t.end();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ extern "C" {
#endif

/**
* Evaluates the quantile function for an inverse gamma distribution.
* Evaluates the quantile function for an inverse gamma distribution with shape parameter `alpha` and scale parameter `beta` at a probability `p`.
*/
double stdlib_base_dists_invgamma_quantile( const double p, const double alpha, const double beta );

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
#include "stdlib/math/base/assert/is_nan.h"

/**
* Evaluates the quantile function for an inverse gamma distribution.
* Evaluates the quantile function for an inverse gamma distribution with shape parameter `alpha` and scale parameter `beta` at a probability `p`.
*
* @param p input value
* @param alpha shape parameter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,13 +140,13 @@ tape( 'the function evaluates the quantile for `x` given large parameters `alpha
beta = bothLarge.beta;
p = bothLarge.p;
for ( i = 0; i < p.length; i++ ) {
y = quantile( p[i], alpha[i], beta[i] );
if ( y === expected[i] ) {
t.strictEqual( y, expected[i], 'p: '+p[i]+', alpha: '+alpha[i]+', beta: '+beta[i]+', y: '+y+', expected: '+expected[i] );
y = quantile( p[ i ], alpha[ i ], beta[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'p: '+p[ i ]+', alpha: '+alpha[ i ]+', beta: '+beta[ i ]+', y: '+y+', expected: '+expected[ i ] );
} else {
delta = abs( y - expected[ i ] );
tol = 200.0 * EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. alpha: '+alpha[i]+'. beta: '+beta[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' );
t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. alpha: '+alpha[ i ]+'. beta: '+beta[ i ]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' );
}
}
t.end();
Expand All @@ -167,19 +167,19 @@ tape( 'the function evaluates the quantile for `x` given large shape parameter `
beta = largeShape.beta;
p = largeShape.p;
for ( i = 0; i < p.length; i++ ) {
y = quantile( p[i], alpha[i], beta[i] );
if ( y === expected[i] ) {
t.strictEqual( y, expected[i], 'p: '+p[i]+', alpha: '+alpha[i]+', beta: '+beta[i]+', y: '+y+', expected: '+expected[i] );
y = quantile( p[ i ], alpha[ i ], beta[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'p: '+p[ i ]+', alpha: '+alpha[ i ]+', beta: '+beta[ i ]+', y: '+y+', expected: '+expected[ i ] );
} else {
delta = abs( y - expected[ i ] );
tol = 100.0 * EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. alpha: '+alpha[i]+'. beta: '+beta[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' );
t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. alpha: '+alpha[ i ]+'. beta: '+beta[ i ]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' );
}
}
t.end();
});

tape( 'the function evaluates the quantile for `x` given large rate parameter `beta`', opts, function test( t ) {
tape( 'the function evaluates the quantile for `x` given large scale parameter `beta`', opts, function test( t ) {
var expected;
var delta;
var alpha;
Expand All @@ -194,13 +194,13 @@ tape( 'the function evaluates the quantile for `x` given large rate parameter `b
beta = largeRate.beta;
p = largeRate.p;
for ( i = 0; i < p.length; i++ ) {
y = quantile( p[i], alpha[i], beta[i] );
if ( y === expected[i] ) {
t.strictEqual( y, expected[i], 'p: '+p[i]+', alpha: '+alpha[i]+', beta: '+beta[i]+', y: '+y+', expected: '+expected[i] );
y = quantile( p[ i ], alpha[ i ], beta[ i ] );
if ( y === expected[ i ] ) {
t.strictEqual( y, expected[ i ], 'p: '+p[ i ]+', alpha: '+alpha[ i ]+', beta: '+beta[ i ]+', y: '+y+', expected: '+expected[ i ] );
} else {
delta = abs( y - expected[ i ] );
tol = 50.0 * EPS * abs( expected[ i ] );
t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. alpha: '+alpha[i]+'. beta: '+beta[i]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' );
t.ok( delta <= tol, 'within tolerance. p: '+p[ i ]+'. alpha: '+alpha[ i ]+'. beta: '+beta[ i ]+'. y: '+y+'. E: '+expected[ i ]+'. Δ: '+delta+'. tol: '+tol+'.' );
}
}
t.end();
Expand Down