@@ -1434,118 +1434,124 @@ def test_tol_parameter():
1434
1434
assert model_3 .n_iter_ == 3
1435
1435
1436
1436
1437
- def _test_gradient_common (loss_function , cases ):
1438
- # Test gradient of different loss functions
1437
+ def _test_loss_common (loss_function , cases ):
1438
+ # Test the different loss functions
1439
1439
# cases is a list of (p, y, expected)
1440
- for p , y , expected in cases :
1441
- assert_almost_equal (loss_function .py_dloss (p , y ), expected )
1440
+ for p , y , expected_loss , expected_dloss in cases :
1441
+ assert_almost_equal (loss_function .py_loss (p , y ), expected_loss )
1442
+ assert_almost_equal (loss_function .py_dloss (p , y ), expected_dloss )
1442
1443
1443
1444
1444
- def test_gradient_hinge ():
1445
+ def test_loss_hinge ():
1445
1446
# Test Hinge (hinge / perceptron)
1446
1447
# hinge
1447
1448
loss = sgd_fast .Hinge (1.0 )
1448
1449
cases = [
1449
- # (p, y, expected )
1450
- (1.1 , 1.0 , 0.0 ), (- 2.0 , - 1.0 , 0.0 ),
1451
- (1.0 , 1.0 , - 1.0 ), (- 1.0 , - 1.0 , 1.0 ), (0.5 , 1.0 , - 1.0 ),
1452
- (2.0 , - 1.0 , 1.0 ), (- 0.5 , - 1.0 , 1.0 ), (0.0 , 1.0 , - 1.0 )
1450
+ # (p, y, expected_loss, expected_dloss )
1451
+ (1.1 , 1.0 , 0.0 , 0.0 ), (- 2.0 , - 1.0 , 0 .0 , 0.0 ),
1452
+ (1.0 , 1.0 , 0.0 , - 1.0 ), (- 1.0 , - 1.0 , 0.0 , 1.0 ), (0.5 , 1.0 , 0.5 , - 1.0 ),
1453
+ (2.0 , - 1.0 , 3.0 , 1.0 ), (- 0.5 , - 1.0 , 0.5 , 1.0 ), (0.0 , 1.0 , 1 , - 1.0 )
1453
1454
]
1454
- _test_gradient_common (loss , cases )
1455
+ _test_loss_common (loss , cases )
1455
1456
1456
1457
# perceptron
1457
1458
loss = sgd_fast .Hinge (0.0 )
1458
1459
cases = [
1459
- # (p, y, expected )
1460
- (1.0 , 1.0 , 0.0 ), (- 0.1 , - 1.0 , 0.0 ),
1461
- (0.0 , 1.0 , - 1.0 ), (0.0 , - 1.0 , 1.0 ), (0.5 , - 1.0 , 1.0 ),
1462
- (2.0 , - 1.0 , 1.0 ), (- 0.5 , 1.0 , - 1.0 ), (- 1.0 , 1.0 , - 1.0 ),
1460
+ # (p, y, expected_loss, expected_dloss )
1461
+ (1.0 , 1.0 , 0.0 , 0.0 ), (- 0.1 , - 1.0 , 0 .0 , 0.0 ),
1462
+ (0.0 , 1.0 , 0.0 , - 1.0 ), (0.0 , - 1.0 , 0.0 , 1.0 ), (0.5 , - 1.0 , 0.5 , 1.0 ),
1463
+ (2.0 , - 1.0 , 2.0 , 1.0 ), (- 0.5 , 1.0 , 0.5 , - 1.0 ), (- 1.0 , 1.0 , 1.0 , - 1.0 ),
1463
1464
]
1464
- _test_gradient_common (loss , cases )
1465
+ _test_loss_common (loss , cases )
1465
1466
1466
1467
1467
1468
def test_gradient_squared_hinge ():
1468
1469
# Test SquaredHinge
1469
1470
loss = sgd_fast .SquaredHinge (1.0 )
1470
1471
cases = [
1471
- # (p, y, expected )
1472
- (1.0 , 1.0 , 0.0 ), (- 2.0 , - 1.0 , 0.0 ), (1.0 , - 1.0 , 4.0 ),
1473
- (- 1.0 , 1.0 , - 4.0 ), (0.5 , 1.0 , - 1.0 ), (0.5 , - 1.0 , 3.0 )
1472
+ # (p, y, expected_loss, expected_dloss )
1473
+ (1.0 , 1.0 , 0.0 , 0.0 ), (- 2.0 , - 1.0 , 0.0 , 0.0 ), (1.0 , - 1.0 , 4 .0 , 4.0 ),
1474
+ (- 1.0 , 1.0 , 4.0 , - 4.0 ), (0.5 , 1.0 , 0.25 , - 1.0 ), (0.5 , - 1.0 , 2.25 , 3.0 )
1474
1475
]
1475
- _test_gradient_common (loss , cases )
1476
+ _test_loss_common (loss , cases )
1476
1477
1477
1478
1478
- def test_gradient_log ():
1479
+ def test_loss_log ():
1479
1480
# Test Log (logistic loss)
1480
1481
loss = sgd_fast .Log ()
1481
1482
cases = [
1482
- # (p, y, expected )
1483
- (1.0 , 1.0 , - 1.0 / (np .exp (1.0 ) + 1.0 )),
1484
- (1.0 , - 1.0 , 1.0 / (np .exp (- 1.0 ) + 1.0 )),
1485
- (- 1.0 , - 1.0 , 1.0 / (np .exp (1.0 ) + 1.0 )),
1486
- (- 1.0 , 1.0 , - 1.0 / (np .exp (- 1.0 ) + 1.0 )),
1487
- (0.0 , 1.0 , - 0.5 ), (0.0 , - 1.0 , 0.5 ),
1488
- (17.9 , - 1.0 , 1.0 ), (- 17.9 , 1.0 , - 1.0 ),
1483
+ # (p, y, expected_loss, expected_dloss )
1484
+ (1.0 , 1.0 , np . log ( 1.0 + np . exp ( - 1.0 )), - 1.0 / (np .exp (1.0 ) + 1.0 )),
1485
+ (1.0 , - 1.0 , np . log ( 1.0 + np . exp ( 1.0 )), 1.0 / (np .exp (- 1.0 ) + 1.0 )),
1486
+ (- 1.0 , - 1.0 , np . log ( 1.0 + np . exp ( - 1.0 )), 1.0 / (np .exp (1.0 ) + 1.0 )),
1487
+ (- 1.0 , 1.0 , np . log ( 1.0 + np . exp ( 1.0 )), - 1.0 / (np .exp (- 1.0 ) + 1.0 )),
1488
+ (0.0 , 1.0 , np . log ( 2 ), - 0.5 ), (0.0 , - 1.0 , np . log ( 2 ) , 0.5 ),
1489
+ (17.9 , - 1.0 , 17.9 , 1.0 ), (- 17.9 , 1.0 , 17.9 , - 1.0 ),
1489
1490
]
1490
- _test_gradient_common (loss , cases )
1491
+ _test_loss_common (loss , cases )
1491
1492
assert_almost_equal (loss .py_dloss (18.1 , 1.0 ), np .exp (- 18.1 ) * - 1.0 , 16 )
1493
+ assert_almost_equal (loss .py_loss (18.1 , 1.0 ), np .exp (- 18.1 ), 16 )
1492
1494
assert_almost_equal (loss .py_dloss (- 18.1 , - 1.0 ), np .exp (- 18.1 ) * 1.0 , 16 )
1495
+ assert_almost_equal (loss .py_loss (- 18.1 , 1.0 ), 18.1 , 16 )
1493
1496
1494
1497
1495
- def test_gradient_squared_loss ():
1498
+ def test_loss_squared_loss ():
1496
1499
# Test SquaredLoss
1497
1500
loss = sgd_fast .SquaredLoss ()
1498
1501
cases = [
1499
- # (p, y, expected )
1500
- (0.0 , 0.0 , 0.0 ), (1.0 , 1.0 , 0.0 ), (1.0 , 0.0 , 1.0 ),
1501
- (0.5 , - 1.0 , 1.5 ), (- 2.5 , 2.0 , - 4.5 )
1502
+ # (p, y, expected_loss, expected_dloss )
1503
+ (0.0 , 0.0 , 0.0 , 0.0 ), (1.0 , 1.0 , 0.0 , 0.0 ), (1.0 , 0.0 , 0.5 , 1.0 ),
1504
+ (0.5 , - 1.0 , 1.125 , 1. 5 ), (- 2.5 , 2.0 , 10.125 , - 4.5 )
1502
1505
]
1503
- _test_gradient_common (loss , cases )
1506
+ _test_loss_common (loss , cases )
1504
1507
1505
1508
1506
- def test_gradient_huber ():
1509
+ def test_loss_huber ():
1507
1510
# Test Huber
1508
1511
loss = sgd_fast .Huber (0.1 )
1509
1512
cases = [
1510
- # (p, y, expected)
1511
- (0.0 , 0.0 , 0.0 ), (0.1 , 0.0 , 0.1 ), (0.0 , 0.1 , - 0.1 ),
1512
- (3.95 , 4.0 , - 0.05 ), (5.0 , 2.0 , 0.1 ), (- 1.0 , 5.0 , - 0.1 )
1513
+ # (p, y, expected_loss, expected_dloss)
1514
+ (0.0 , 0.0 , 0.0 , 0.0 ), (0.1 , 0.0 , 0.005 , 0.1 ), (0.0 , 0.1 , 0.005 , - 0.1 ),
1515
+ (3.95 , 4.0 , 0.00125 , - 0.05 ), (5.0 , 2.0 , 0.295 , 0.1 ),
1516
+ (- 1.0 , 5.0 , 0.595 , - 0.1 )
1513
1517
]
1514
- _test_gradient_common (loss , cases )
1518
+ _test_loss_common (loss , cases )
1515
1519
1516
1520
1517
- def test_gradient_modified_huber ():
1518
- # Test ModifiedHuber
1521
+ def test_loss_modified_huber ():
1522
+ # (p, y, expected_loss, expected_dloss)
1519
1523
loss = sgd_fast .ModifiedHuber ()
1520
1524
cases = [
1521
- # (p, y, expected )
1522
- (1.0 , 1.0 , 0.0 ), (- 1.0 , - 1.0 , 0.0 ), (2.0 , 1.0 , 0.0 ),
1523
- (0.0 , 1.0 , - 2.0 ), (- 1.0 , 1.0 , - 4.0 ), (0.5 , - 1.0 , 3.0 ),
1524
- (0.5 , - 1.0 , 3.0 ), ( - 2.0 , 1.0 , - 4.0 ), (- 3.0 , 1.0 , - 4.0 )
1525
+ # (p, y, expected_loss, expected_dloss )
1526
+ (1.0 , 1.0 , 0.0 , 0.0 ), (- 1.0 , - 1.0 , 0.0 , 0.0 ), (2.0 , 1.0 , 0 .0 , 0.0 ),
1527
+ (0.0 , 1.0 , 1.0 , - 2.0 ), (- 1.0 , 1.0 , 4.0 , - 4.0 ), (0.5 , - 1.0 , 2.25 , 3.0 ),
1528
+ (- 2.0 , 1.0 , 8 , - 4.0 ), (- 3.0 , 1.0 , 12 , - 4.0 )
1525
1529
]
1526
- _test_gradient_common (loss , cases )
1530
+ _test_loss_common (loss , cases )
1527
1531
1528
1532
1529
- def test_gradient_epsilon_insensitive ():
1533
+ def test_loss_epsilon_insensitive ():
1530
1534
# Test EpsilonInsensitive
1531
1535
loss = sgd_fast .EpsilonInsensitive (0.1 )
1532
1536
cases = [
1533
- (0.0 , 0.0 , 0.0 ), (0.1 , 0.0 , 0.0 ), (- 2.05 , - 2.0 , 0.0 ),
1534
- (3.05 , 3.0 , 0.0 ), (2.2 , 2.0 , 1.0 ), (2.0 , - 1.0 , 1.0 ),
1535
- (2.0 , 2.2 , - 1.0 ), (- 2.0 , 1.0 , - 1.0 )
1537
+ # (p, y, expected_loss, expected_dloss)
1538
+ (0.0 , 0.0 , 0.0 , 0.0 ), (0.1 , 0.0 , 0.0 , 0.0 ), (- 2.05 , - 2.0 , 0.0 , 0.0 ),
1539
+ (3.05 , 3.0 , 0.0 , 0.0 ), (2.2 , 2.0 , 0.1 , 1.0 ), (2.0 , - 1.0 , 2.9 , 1.0 ),
1540
+ (2.0 , 2.2 , 0.1 , - 1.0 ), (- 2.0 , 1.0 , 2.9 , - 1.0 )
1536
1541
]
1537
- _test_gradient_common (loss , cases )
1542
+ _test_loss_common (loss , cases )
1538
1543
1539
1544
1540
- def test_gradient_squared_epsilon_insensitive ():
1545
+ def test_loss_squared_epsilon_insensitive ():
1541
1546
# Test SquaredEpsilonInsensitive
1542
1547
loss = sgd_fast .SquaredEpsilonInsensitive (0.1 )
1543
1548
cases = [
1544
- (0.0 , 0.0 , 0.0 ), (0.1 , 0.0 , 0.0 ), (- 2.05 , - 2.0 , 0.0 ),
1545
- (3.05 , 3.0 , 0.0 ), (2.2 , 2.0 , 0.2 ), (2.0 , - 1.0 , 5.8 ),
1546
- (2.0 , 2.2 , - 0.2 ), (- 2.0 , 1.0 , - 5.8 )
1549
+ # (p, y, expected_loss, expected_dloss)
1550
+ (0.0 , 0.0 , 0.0 , 0.0 ), (0.1 , 0.0 , 0.0 , 0.0 ), (- 2.05 , - 2.0 , 0.0 , 0.0 ),
1551
+ (3.05 , 3.0 , 0.0 , 0.0 ), (2.2 , 2.0 , 0.01 , 0.2 ), (2.0 , - 1.0 , 8.41 , 5.8 ),
1552
+ (2.0 , 2.2 , 0.01 , - 0.2 ), (- 2.0 , 1.0 , 8.41 , - 5.8 )
1547
1553
]
1548
- _test_gradient_common (loss , cases )
1554
+ _test_loss_common (loss , cases )
1549
1555
1550
1556
1551
1557
def test_multi_thread_multi_class_and_early_stopping ():
0 commit comments