From 5749932e5d8dc0b6c02904c8d912a65bda2f7f3f Mon Sep 17 00:00:00 2001 From: yoshoku Date: Tue, 4 May 2021 00:28:53 +0900 Subject: [PATCH] :art: Refactor Tree estimator specs --- .../tree/decision_tree_classifier_spec.rb | 19 ++++++++++------ .../tree/decision_tree_regressor_spec.rb | 22 ++++++++++++------- .../rumale/tree/extra_tree_classifier_spec.rb | 19 ++++++++++------ spec/rumale/tree/extra_tree_regressor_spec.rb | 19 ++++++++++------ .../tree/gradient_tree_regressor_spec.rb | 8 ++++--- 5 files changed, 55 insertions(+), 32 deletions(-) diff --git a/spec/rumale/tree/decision_tree_classifier_spec.rb b/spec/rumale/tree/decision_tree_classifier_spec.rb index 01fabf4..26743c5 100644 --- a/spec/rumale/tree/decision_tree_classifier_spec.rb +++ b/spec/rumale/tree/decision_tree_classifier_spec.rb @@ -27,11 +27,13 @@ RSpec.describe Rumale::Tree::DecisionTreeClassifier do let(:dataset) { two_clusters_dataset } it 'classifies two clusters data.', :aggregate_failures do - expect(estimator.tree.class).to eq(Rumale::Tree::Node) - expect(estimator.classes.class).to eq(Numo::Int32) + expect(estimator.tree).to be_a(Rumale::Tree::Node) + expect(estimator.classes).to be_a(Numo::Int32) + expect(estimator.classes).to be_contiguous expect(estimator.classes.ndim).to eq(1) expect(estimator.classes.shape[0]).to eq(n_classes) - expect(estimator.feature_importances.class).to eq(Numo::DFloat) + expect(estimator.feature_importances).to be_a(Numo::DFloat) + expect(estimator.feature_importances).to be_contiguous expect(estimator.feature_importances.ndim).to eq(1) expect(estimator.feature_importances.shape[0]).to eq(n_features) expect(score).to eq(1.0) @@ -42,18 +44,21 @@ RSpec.describe Rumale::Tree::DecisionTreeClassifier do let(:dataset) { three_clusters_dataset } it 'classifies three clusters data.', :aggregate_failures do - expect(estimator.tree.class).to eq(Rumale::Tree::Node) - expect(estimator.classes.class).to eq(Numo::Int32) + expect(estimator.tree).to be_a(Rumale::Tree::Node) + expect(estimator.classes).to be_a(Numo::Int32) + expect(estimator.classes).to be_contiguous expect(estimator.classes.ndim).to eq(1) expect(estimator.classes.shape[0]).to eq(n_classes) - expect(estimator.feature_importances.class).to eq(Numo::DFloat) + expect(estimator.feature_importances).to be_a(Numo::DFloat) + expect(estimator.feature_importances).to be_contiguous expect(estimator.feature_importances.ndim).to eq(1) expect(estimator.feature_importances.shape[0]).to eq(n_features) expect(score).to eq(1.0) end it 'estimates class probabilities with three clusters dataset.', :aggregate_failures do - expect(probs.class).to eq(Numo::DFloat) + expect(probs).to be_a(Numo::DFloat) + expect(probs).to be_contiguous expect(probs.ndim).to eq(2) expect(probs.shape[0]).to eq(n_samples) expect(probs.shape[1]).to eq(n_classes) diff --git a/spec/rumale/tree/decision_tree_regressor_spec.rb b/spec/rumale/tree/decision_tree_regressor_spec.rb index 8a693c5..81e014c 100644 --- a/spec/rumale/tree/decision_tree_regressor_spec.rb +++ b/spec/rumale/tree/decision_tree_regressor_spec.rb @@ -26,14 +26,17 @@ RSpec.describe Rumale::Tree::DecisionTreeRegressor do let(:y) { single_target } it 'learns the model for single regression problem.', :aggregate_failures do - expect(estimator.tree.class).to eq(Rumale::Tree::Node) - expect(estimator.feature_importances.class).to eq(Numo::DFloat) + expect(estimator.tree).to be_a(Rumale::Tree::Node) + expect(estimator.feature_importances).to be_a(Numo::DFloat) + expect(estimator.feature_importances).to be_contiguous expect(estimator.feature_importances.ndim).to eq(1) expect(estimator.feature_importances.shape[0]).to eq(n_features) - expect(estimator.leaf_values.class).to eq(Numo::DFloat) + expect(estimator.leaf_values).to be_a(Numo::DFloat) + expect(estimator.leaf_values).to be_contiguous expect(estimator.leaf_values.ndim).to eq(1) expect(estimator.leaf_values.shape[0]).not_to be_zero - expect(predicted.class).to eq(Numo::DFloat) + expect(predicted).to be_a(Numo::DFloat) + expect(predicted).to be_contiguous expect(predicted.ndim).to eq(1) expect(predicted.shape[0]).to eq(n_samples) expect(score).to be_within(0.01).of(1.0) @@ -112,15 +115,18 @@ RSpec.describe Rumale::Tree::DecisionTreeRegressor do let(:y) { multi_target } it 'learns the model for multiple regression problem.', :aggregate_failures do - expect(estimator.tree.class).to eq(Rumale::Tree::Node) - expect(estimator.feature_importances.class).to eq(Numo::DFloat) + expect(estimator.tree).to be_a(Rumale::Tree::Node) + expect(estimator.feature_importances).to be_a(Numo::DFloat) + expect(estimator.feature_importances).to be_contiguous expect(estimator.feature_importances.ndim).to eq(1) expect(estimator.feature_importances.shape[0]).to eq(n_features) - expect(estimator.leaf_values.class).to eq(Numo::DFloat) + expect(estimator.leaf_values).to be_a(Numo::DFloat) + expect(estimator.leaf_values).to be_contiguous expect(estimator.leaf_values.ndim).to eq(2) expect(estimator.leaf_values.shape[0]).not_to be_zero expect(estimator.leaf_values.shape[1]).to eq(n_outputs) - expect(predicted.class).to eq(Numo::DFloat) + expect(predicted).to be_a(Numo::DFloat) + expect(predicted).to be_contiguous expect(predicted.ndim).to eq(2) expect(predicted.shape[0]).to eq(n_samples) expect(predicted.shape[1]).to eq(n_outputs) diff --git a/spec/rumale/tree/extra_tree_classifier_spec.rb b/spec/rumale/tree/extra_tree_classifier_spec.rb index 176e10c..0f3f041 100644 --- a/spec/rumale/tree/extra_tree_classifier_spec.rb +++ b/spec/rumale/tree/extra_tree_classifier_spec.rb @@ -27,11 +27,13 @@ RSpec.describe Rumale::Tree::ExtraTreeClassifier do let(:dataset) { two_clusters_dataset } it 'classifies two clusters data.', :aggregate_failures do - expect(estimator.tree.class).to eq(Rumale::Tree::Node) - expect(estimator.classes.class).to eq(Numo::Int32) + expect(estimator.tree).to be_a(Rumale::Tree::Node) + expect(estimator.classes).to be_a(Numo::Int32) + expect(estimator.classes).to be_contiguous expect(estimator.classes.ndim).to eq(1) expect(estimator.classes.shape[0]).to eq(n_classes) - expect(estimator.feature_importances.class).to eq(Numo::DFloat) + expect(estimator.feature_importances).to be_a(Numo::DFloat) + expect(estimator.feature_importances).to be_contiguous expect(estimator.feature_importances.ndim).to eq(1) expect(estimator.feature_importances.shape[0]).to eq(n_features) expect(score).to eq(1.0) @@ -42,18 +44,21 @@ RSpec.describe Rumale::Tree::ExtraTreeClassifier do let(:dataset) { three_clusters_dataset } it 'classifies three clusters data.', :aggregate_failures do - expect(estimator.tree.class).to eq(Rumale::Tree::Node) - expect(estimator.classes.class).to eq(Numo::Int32) + expect(estimator.tree).to be_a(Rumale::Tree::Node) + expect(estimator.classes).to be_a(Numo::Int32) + expect(estimator.classes).to be_contiguous expect(estimator.classes.ndim).to eq(1) expect(estimator.classes.shape[0]).to eq(n_classes) - expect(estimator.feature_importances.class).to eq(Numo::DFloat) + expect(estimator.feature_importances).to be_a(Numo::DFloat) + expect(estimator.feature_importances).to be_contiguous expect(estimator.feature_importances.ndim).to eq(1) expect(estimator.feature_importances.shape[0]).to eq(n_features) expect(score).to eq(1.0) end it 'estimates class probabilities with three clusters dataset.', :aggregate_failures do - expect(probs.class).to eq(Numo::DFloat) + expect(probs).to be_a(Numo::DFloat) + expect(probs).to be_contiguous expect(probs.ndim).to eq(2) expect(probs.shape[0]).to eq(n_samples) expect(probs.shape[1]).to eq(n_classes) diff --git a/spec/rumale/tree/extra_tree_regressor_spec.rb b/spec/rumale/tree/extra_tree_regressor_spec.rb index c067117..357cfb8 100644 --- a/spec/rumale/tree/extra_tree_regressor_spec.rb +++ b/spec/rumale/tree/extra_tree_regressor_spec.rb @@ -26,14 +26,17 @@ RSpec.describe Rumale::Tree::ExtraTreeRegressor do let(:y) { single_target } it 'learns the model for single regression problem.', :aggregate_failures do - expect(estimator.tree.class).to eq(Rumale::Tree::Node) - expect(estimator.feature_importances.class).to eq(Numo::DFloat) + expect(estimator.tree).to be_a(Rumale::Tree::Node) + expect(estimator.feature_importances).to be_a(Numo::DFloat) + expect(estimator.feature_importances).to be_contiguous expect(estimator.feature_importances.ndim).to eq(1) expect(estimator.feature_importances.shape[0]).to eq(n_features) - expect(estimator.leaf_values.class).to eq(Numo::DFloat) + expect(estimator.leaf_values).to be_a(Numo::DFloat) + expect(estimator.leaf_values).to be_contiguous expect(estimator.leaf_values.ndim).to eq(1) expect(estimator.leaf_values.shape[0]).not_to be_zero - expect(predicted.class).to eq(Numo::DFloat) + expect(predicted).to be_a(Numo::DFloat) + expect(predicted).to be_contiguous expect(predicted.ndim).to eq(1) expect(predicted.shape[0]).to eq(n_samples) expect(score).to be_within(0.01).of(1.0) @@ -111,11 +114,13 @@ RSpec.describe Rumale::Tree::ExtraTreeRegressor do let(:y) { multi_target } it 'learns the model for multiple regression problem.', :aggregate_failures do - expect(estimator.tree.class).to eq(Rumale::Tree::Node) - expect(estimator.feature_importances.class).to eq(Numo::DFloat) + expect(estimator.tree).to be_a(Rumale::Tree::Node) + expect(estimator.feature_importances).to be_a(Numo::DFloat) + expect(estimator.feature_importances).to be_contiguous expect(estimator.feature_importances.ndim).to eq(1) expect(estimator.feature_importances.shape[0]).to eq(n_features) - expect(estimator.leaf_values.class).to eq(Numo::DFloat) + expect(estimator.leaf_values).to be_a(Numo::DFloat) + expect(estimator.leaf_values).to be_contiguous expect(estimator.leaf_values.ndim).to eq(2) expect(estimator.leaf_values.shape[0]).not_to be_zero expect(estimator.leaf_values.shape[1]).to eq(n_outputs) diff --git a/spec/rumale/tree/gradient_tree_regressor_spec.rb b/spec/rumale/tree/gradient_tree_regressor_spec.rb index bb34783..fa81752 100644 --- a/spec/rumale/tree/gradient_tree_regressor_spec.rb +++ b/spec/rumale/tree/gradient_tree_regressor_spec.rb @@ -23,11 +23,13 @@ RSpec.describe Rumale::Tree::GradientTreeRegressor do it 'classifies two clusters data.' do estimator.fit(x_bin, y_bin, grad, hess) - expect(estimator.tree.class).to eq(Rumale::Tree::Node) - expect(estimator.leaf_weights.class).to eq(Numo::DFloat) + expect(estimator.tree).to be_a(Rumale::Tree::Node) + expect(estimator.leaf_weights).to be_a(Numo::DFloat) + expect(estimator.leaf_weights).to be_contiguous expect(estimator.leaf_weights.shape[0]).to eq(2) expect(estimator.leaf_weights.shape[1]).to be_nil - expect(estimator.feature_importances.class).to eq(Numo::DFloat) + expect(estimator.feature_importances).to be_a(Numo::DFloat) + expect(estimator.feature_importances).to be_contiguous expect(estimator.feature_importances.shape[0]).to eq(n_features) expect(estimator.feature_importances.shape[1]).to be_nil expect(estimator.score(x_bin, Numo::DFloat.cast(y_bin))).to be > 0.95