Class: Rumale::Ensemble::VRTreesRegressor
- Inherits:
-
RandomForestRegressor
- Object
- Base::Estimator
- RandomForestRegressor
- Rumale::Ensemble::VRTreesRegressor
- Defined in:
- rumale-ensemble/lib/rumale/ensemble/vr_trees_regressor.rb
Overview
VRTreesRegressor is a class that implements variable-random (VR) trees for regression
Reference
-
Liu, F. T., Ting, K. M., Yu, Y., and Zhou, Z. H., “Spectrum of Variable-Random Trees,” Journal of Artificial Intelligence Research, vol. 32, pp. 355–384, 2008.
Instance Attribute Summary collapse
-
#estimators ⇒ Array<VRTreeRegressor>
readonly
Return the set of estimators.
-
#feature_importances ⇒ Numo::DFloat
readonly
Return the importance for each feature.
-
#rng ⇒ Random
readonly
Return the random generator for random selection of feature index.
Attributes inherited from Base::Estimator
Instance Method Summary collapse
-
#apply(x) ⇒ Numo::Int32
Return the index of the leaf that each sample reached.
-
#fit(x, y) ⇒ VRTreesRegressor
Fit the model with given training data.
-
#initialize(n_estimators: 10, criterion: 'mse', max_depth: nil, max_leaf_nodes: nil, min_samples_leaf: 1, max_features: nil, n_jobs: nil, random_seed: nil) ⇒ VRTreesRegressor
constructor
Create a new regressor with variable-random trees.
-
#predict(x) ⇒ Numo::DFloat
Predict values for samples.
Methods included from Base::Regressor
Constructor Details
#initialize(n_estimators: 10, criterion: 'mse', max_depth: nil, max_leaf_nodes: nil, min_samples_leaf: 1, max_features: nil, n_jobs: nil, random_seed: nil) ⇒ VRTreesRegressor
Create a new regressor with variable-random trees.
53 54 55 56 57 |
# File 'rumale-ensemble/lib/rumale/ensemble/vr_trees_regressor.rb', line 53 def initialize(n_estimators: 10, criterion: 'mse', max_depth: nil, max_leaf_nodes: nil, min_samples_leaf: 1, max_features: nil, n_jobs: nil, random_seed: nil) super end |
Instance Attribute Details
#estimators ⇒ Array<VRTreeRegressor> (readonly)
Return the set of estimators.
26 27 28 |
# File 'rumale-ensemble/lib/rumale/ensemble/vr_trees_regressor.rb', line 26 def estimators @estimators end |
#feature_importances ⇒ Numo::DFloat (readonly)
Return the importance for each feature.
30 31 32 |
# File 'rumale-ensemble/lib/rumale/ensemble/vr_trees_regressor.rb', line 30 def feature_importances @feature_importances end |
#rng ⇒ Random (readonly)
Return the random generator for random selection of feature index.
34 35 36 |
# File 'rumale-ensemble/lib/rumale/ensemble/vr_trees_regressor.rb', line 34 def rng @rng end |
Instance Method Details
#apply(x) ⇒ Numo::Int32
Return the index of the leaf that each sample reached.
107 108 109 110 111 |
# File 'rumale-ensemble/lib/rumale/ensemble/vr_trees_regressor.rb', line 107 def apply(x) x = ::Rumale::Validation.check_convert_sample_array(x) super end |
#fit(x, y) ⇒ VRTreesRegressor
Fit the model with given training data.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'rumale-ensemble/lib/rumale/ensemble/vr_trees_regressor.rb', line 64 def fit(x, y) x = ::Rumale::Validation.check_convert_sample_array(x) y = ::Rumale::Validation.check_convert_target_value_array(y) ::Rumale::Validation.check_sample_size(x, y) # Initialize some variables. n_features = x.shape[1] @params[:max_features] = n_features if @params[:max_features].nil? @params[:max_features] = @params[:max_features].clamp(1, n_features) sub_rng = @rng.dup # Construct forest. rng_seeds = Array.new(@params[:n_estimators]) { sub_rng.rand(::Rumale::Ensemble::Value::SEED_BASE) } alpha_ratio = 0.5 / @params[:n_estimators] alphas = Array.new(@params[:n_estimators]) { |v| v * alpha_ratio } @estimators = if enable_parallel? parallel_map(@params[:n_estimators]) { |n| plant_tree(alphas[n], rng_seeds[n]).fit(x, y) } else Array.new(@params[:n_estimators]) { |n| plant_tree(alphas[n], rng_seeds[n]).fit(x, y) } end @feature_importances = if enable_parallel? parallel_map(@params[:n_estimators]) { |n| @estimators[n].feature_importances }.sum else @estimators.sum(&:feature_importances) end @feature_importances /= @feature_importances.sum self end |
#predict(x) ⇒ Numo::DFloat
Predict values for samples.
97 98 99 100 101 |
# File 'rumale-ensemble/lib/rumale/ensemble/vr_trees_regressor.rb', line 97 def predict(x) x = ::Rumale::Validation.check_convert_sample_array(x) super end |