(self)
| 14 | class TestBasic(unittest.TestCase): |
| 15 | |
| 16 | def test(self): |
| 17 | X_train, X_test, y_train, y_test = train_test_split(*load_breast_cancer(True), |
| 18 | test_size=0.1, random_state=2) |
| 19 | train_data = lgb.Dataset(X_train, label=y_train) |
| 20 | valid_data = train_data.create_valid(X_test, label=y_test) |
| 21 | |
| 22 | params = { |
| 23 | "objective": "binary", |
| 24 | "metric": "auc", |
| 25 | "min_data": 10, |
| 26 | "num_leaves": 15, |
| 27 | "verbose": -1, |
| 28 | "num_threads": 1, |
| 29 | "max_bin": 255 |
| 30 | } |
| 31 | bst = lgb.Booster(params, train_data) |
| 32 | bst.add_valid(valid_data, "valid_1") |
| 33 | |
| 34 | for i in range(20): |
| 35 | bst.update() |
| 36 | if i % 10 == 0: |
| 37 | print(bst.eval_train(), bst.eval_valid()) |
| 38 | |
| 39 | self.assertEqual(bst.current_iteration(), 20) |
| 40 | self.assertEqual(bst.num_trees(), 20) |
| 41 | self.assertEqual(bst.num_model_per_iteration(), 1) |
| 42 | |
| 43 | bst.save_model("model.txt") |
| 44 | pred_from_matr = bst.predict(X_test) |
| 45 | with tempfile.NamedTemporaryFile() as f: |
| 46 | tname = f.name |
| 47 | with open(tname, "w+b") as f: |
| 48 | dump_svmlight_file(X_test, y_test, f) |
| 49 | pred_from_file = bst.predict(tname) |
| 50 | os.remove(tname) |
| 51 | np.testing.assert_allclose(pred_from_matr, pred_from_file) |
| 52 | |
| 53 | # check saved model persistence |
| 54 | bst = lgb.Booster(params, model_file="model.txt") |
| 55 | os.remove("model.txt") |
| 56 | pred_from_model_file = bst.predict(X_test) |
| 57 | # we need to check the consistency of model file here, so test for exact equal |
| 58 | np.testing.assert_array_equal(pred_from_matr, pred_from_model_file) |
| 59 | |
| 60 | # check early stopping is working. Make it stop very early, so the scores should be very close to zero |
| 61 | pred_parameter = {"pred_early_stop": True, "pred_early_stop_freq": 5, "pred_early_stop_margin": 1.5} |
| 62 | pred_early_stopping = bst.predict(X_test, **pred_parameter) |
| 63 | # scores likely to be different, but prediction should still be the same |
| 64 | np.testing.assert_array_equal(np.sign(pred_from_matr), np.sign(pred_early_stopping)) |
| 65 | |
| 66 | # test that shape is checked during prediction |
| 67 | bad_X_test = X_test[:, 1:] |
| 68 | bad_shape_error_msg = "The number of features in data*" |
| 69 | np.testing.assert_raises_regex(lgb.basic.LightGBMError, bad_shape_error_msg, |
| 70 | bst.predict, bad_X_test) |
| 71 | np.testing.assert_raises_regex(lgb.basic.LightGBMError, bad_shape_error_msg, |
| 72 | bst.predict, sparse.csr_matrix(bad_X_test)) |
| 73 | np.testing.assert_raises_regex(lgb.basic.LightGBMError, bad_shape_error_msg, |
nothing calls this directly
no test coverage detected