rumale 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +20 -0
- data/.rspec +3 -0
- data/.rubocop.yml +47 -0
- data/.rubocop_todo.yml +58 -0
- data/.travis.yml +13 -0
- data/CHANGELOG.md +2 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +23 -0
- data/README.md +175 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/rumale.rb +70 -0
- data/lib/rumale/base/base_estimator.rb +13 -0
- data/lib/rumale/base/classifier.rb +36 -0
- data/lib/rumale/base/cluster_analyzer.rb +31 -0
- data/lib/rumale/base/evaluator.rb +17 -0
- data/lib/rumale/base/regressor.rb +36 -0
- data/lib/rumale/base/splitter.rb +21 -0
- data/lib/rumale/base/transformer.rb +22 -0
- data/lib/rumale/clustering/dbscan.rb +125 -0
- data/lib/rumale/clustering/k_means.rb +138 -0
- data/lib/rumale/dataset.rb +110 -0
- data/lib/rumale/decomposition/nmf.rb +141 -0
- data/lib/rumale/decomposition/pca.rb +148 -0
- data/lib/rumale/ensemble/ada_boost_classifier.rb +196 -0
- data/lib/rumale/ensemble/ada_boost_regressor.rb +178 -0
- data/lib/rumale/ensemble/random_forest_classifier.rb +180 -0
- data/lib/rumale/ensemble/random_forest_regressor.rb +141 -0
- data/lib/rumale/evaluation_measure/accuracy.rb +29 -0
- data/lib/rumale/evaluation_measure/f_score.rb +50 -0
- data/lib/rumale/evaluation_measure/log_loss.rb +45 -0
- data/lib/rumale/evaluation_measure/mean_absolute_error.rb +29 -0
- data/lib/rumale/evaluation_measure/mean_squared_error.rb +29 -0
- data/lib/rumale/evaluation_measure/normalized_mutual_information.rb +62 -0
- data/lib/rumale/evaluation_measure/precision.rb +50 -0
- data/lib/rumale/evaluation_measure/precision_recall.rb +91 -0
- data/lib/rumale/evaluation_measure/purity.rb +40 -0
- data/lib/rumale/evaluation_measure/r2_score.rb +43 -0
- data/lib/rumale/evaluation_measure/recall.rb +50 -0
- data/lib/rumale/kernel_approximation/rbf.rb +121 -0
- data/lib/rumale/kernel_machine/kernel_svc.rb +193 -0
- data/lib/rumale/linear_model/base_linear_model.rb +89 -0
- data/lib/rumale/linear_model/lasso.rb +136 -0
- data/lib/rumale/linear_model/linear_regression.rb +110 -0
- data/lib/rumale/linear_model/logistic_regression.rb +159 -0
- data/lib/rumale/linear_model/ridge.rb +110 -0
- data/lib/rumale/linear_model/svc.rb +183 -0
- data/lib/rumale/linear_model/svr.rb +122 -0
- data/lib/rumale/model_selection/cross_validation.rb +123 -0
- data/lib/rumale/model_selection/grid_search_cv.rb +247 -0
- data/lib/rumale/model_selection/k_fold.rb +76 -0
- data/lib/rumale/model_selection/stratified_k_fold.rb +94 -0
- data/lib/rumale/multiclass/one_vs_rest_classifier.rb +100 -0
- data/lib/rumale/naive_bayes/naive_bayes.rb +315 -0
- data/lib/rumale/nearest_neighbors/k_neighbors_classifier.rb +111 -0
- data/lib/rumale/nearest_neighbors/k_neighbors_regressor.rb +93 -0
- data/lib/rumale/optimizer/nadam.rb +90 -0
- data/lib/rumale/optimizer/rmsprop.rb +69 -0
- data/lib/rumale/optimizer/sgd.rb +65 -0
- data/lib/rumale/optimizer/yellow_fin.rb +144 -0
- data/lib/rumale/pairwise_metric.rb +91 -0
- data/lib/rumale/pipeline/pipeline.rb +197 -0
- data/lib/rumale/polynomial_model/base_factorization_machine.rb +99 -0
- data/lib/rumale/polynomial_model/factorization_machine_classifier.rb +197 -0
- data/lib/rumale/polynomial_model/factorization_machine_regressor.rb +131 -0
- data/lib/rumale/preprocessing/l2_normalizer.rb +62 -0
- data/lib/rumale/preprocessing/label_encoder.rb +94 -0
- data/lib/rumale/preprocessing/min_max_scaler.rb +92 -0
- data/lib/rumale/preprocessing/one_hot_encoder.rb +98 -0
- data/lib/rumale/preprocessing/standard_scaler.rb +86 -0
- data/lib/rumale/probabilistic_output.rb +112 -0
- data/lib/rumale/tree/base_decision_tree.rb +153 -0
- data/lib/rumale/tree/decision_tree_classifier.rb +163 -0
- data/lib/rumale/tree/decision_tree_regressor.rb +135 -0
- data/lib/rumale/tree/node.rb +70 -0
- data/lib/rumale/utils.rb +37 -0
- data/lib/rumale/validation.rb +79 -0
- data/lib/rumale/values.rb +13 -0
- data/lib/rumale/version.rb +6 -0
- data/rumale.gemspec +41 -0
- metadata +204 -0
@@ -0,0 +1,135 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rumale/tree/base_decision_tree'
|
4
|
+
require 'rumale/base/regressor'
|
5
|
+
|
6
|
+
module Rumale
|
7
|
+
module Tree
|
8
|
+
# DecisionTreeRegressor is a class that implements decision tree for regression.
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# estimator =
|
12
|
+
# Rumale::Tree::DecisionTreeRegressor.new(
|
13
|
+
# max_depth: 3, max_leaf_nodes: 10, min_samples_leaf: 5, random_seed: 1)
|
14
|
+
# estimator.fit(training_samples, traininig_values)
|
15
|
+
# results = estimator.predict(testing_samples)
|
16
|
+
#
|
17
|
+
class DecisionTreeRegressor < BaseDecisionTree
|
18
|
+
include Base::Regressor
|
19
|
+
|
20
|
+
# Return the importance for each feature.
|
21
|
+
# @return [Numo::DFloat] (size: n_features)
|
22
|
+
attr_reader :feature_importances
|
23
|
+
|
24
|
+
# Return the learned tree.
|
25
|
+
# @return [Node]
|
26
|
+
attr_reader :tree
|
27
|
+
|
28
|
+
# Return the random generator for random selection of feature index.
|
29
|
+
# @return [Random]
|
30
|
+
attr_reader :rng
|
31
|
+
|
32
|
+
# Return the values assigned each leaf.
|
33
|
+
# @return [Numo::DFloat] (shape: [n_leafs, n_outputs])
|
34
|
+
attr_reader :leaf_values
|
35
|
+
|
36
|
+
# Create a new regressor with decision tree algorithm.
|
37
|
+
#
|
38
|
+
# @param criterion [String] The function to evalue spliting point. Supported criteria are 'mae' and 'mse'.
|
39
|
+
# @param max_depth [Integer] The maximum depth of the tree.
|
40
|
+
# If nil is given, decision tree grows without concern for depth.
|
41
|
+
# @param max_leaf_nodes [Integer] The maximum number of leaves on decision tree.
|
42
|
+
# If nil is given, number of leaves is not limited.
|
43
|
+
# @param min_samples_leaf [Integer] The minimum number of samples at a leaf node.
|
44
|
+
# @param max_features [Integer] The number of features to consider when searching optimal split point.
|
45
|
+
# If nil is given, split process considers all features.
|
46
|
+
# @param random_seed [Integer] The seed value using to initialize the random generator.
|
47
|
+
# It is used to randomly determine the order of features when deciding spliting point.
|
48
|
+
def initialize(criterion: 'mse', max_depth: nil, max_leaf_nodes: nil, min_samples_leaf: 1, max_features: nil,
|
49
|
+
random_seed: nil)
|
50
|
+
check_params_type_or_nil(Integer, max_depth: max_depth, max_leaf_nodes: max_leaf_nodes,
|
51
|
+
max_features: max_features, random_seed: random_seed)
|
52
|
+
check_params_integer(min_samples_leaf: min_samples_leaf)
|
53
|
+
check_params_string(criterion: criterion)
|
54
|
+
check_params_positive(max_depth: max_depth, max_leaf_nodes: max_leaf_nodes,
|
55
|
+
min_samples_leaf: min_samples_leaf, max_features: max_features)
|
56
|
+
super
|
57
|
+
@leaf_values = nil
|
58
|
+
end
|
59
|
+
|
60
|
+
# Fit the model with given training data.
|
61
|
+
#
|
62
|
+
# @param x [Numo::DFloat] (shape: [n_samples, n_features]) The training data to be used for fitting the model.
|
63
|
+
# @param y [Numo::DFloat] (shape: [n_samples, n_outputs]) The taget values to be used for fitting the model.
|
64
|
+
# @return [DecisionTreeRegressor] The learned regressor itself.
|
65
|
+
def fit(x, y)
|
66
|
+
check_sample_array(x)
|
67
|
+
check_tvalue_array(y)
|
68
|
+
check_sample_tvalue_size(x, y)
|
69
|
+
n_samples, n_features = x.shape
|
70
|
+
@params[:max_features] = n_features if @params[:max_features].nil?
|
71
|
+
@params[:max_features] = [@params[:max_features], n_features].min
|
72
|
+
@n_leaves = 0
|
73
|
+
@leaf_values = []
|
74
|
+
build_tree(x, y)
|
75
|
+
eval_importance(n_samples, n_features)
|
76
|
+
@leaf_values = Numo::DFloat.cast(@leaf_values)
|
77
|
+
@leaf_values = @leaf_values.flatten.dup if @leaf_values.shape[1] == 1
|
78
|
+
self
|
79
|
+
end
|
80
|
+
|
81
|
+
# Predict values for samples.
|
82
|
+
#
|
83
|
+
# @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to predict the values.
|
84
|
+
# @return [Numo::DFloat] (shape: [n_samples, n_outputs]) Predicted values per sample.
|
85
|
+
def predict(x)
|
86
|
+
check_sample_array(x)
|
87
|
+
@leaf_values.shape[1].nil? ? @leaf_values[apply(x)] : @leaf_values[apply(x), true]
|
88
|
+
end
|
89
|
+
|
90
|
+
# Dump marshal data.
|
91
|
+
# @return [Hash] The marshal data about DecisionTreeRegressor
|
92
|
+
def marshal_dump
|
93
|
+
{ params: @params,
|
94
|
+
tree: @tree,
|
95
|
+
feature_importances: @feature_importances,
|
96
|
+
leaf_values: @leaf_values,
|
97
|
+
rng: @rng }
|
98
|
+
end
|
99
|
+
|
100
|
+
# Load marshal data.
|
101
|
+
# @return [nil]
|
102
|
+
def marshal_load(obj)
|
103
|
+
@params = obj[:params]
|
104
|
+
@tree = obj[:tree]
|
105
|
+
@feature_importances = obj[:feature_importances]
|
106
|
+
@leaf_values = obj[:leaf_values]
|
107
|
+
@rng = obj[:rng]
|
108
|
+
nil
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
|
113
|
+
def stop_growing?(y)
|
114
|
+
(y - y.mean(0)).sum.abs.zero?
|
115
|
+
end
|
116
|
+
|
117
|
+
def put_leaf(node, y)
|
118
|
+
node.probs = nil
|
119
|
+
node.leaf = true
|
120
|
+
node.leaf_id = @n_leaves
|
121
|
+
@n_leaves += 1
|
122
|
+
@leaf_values.push(y.mean(0))
|
123
|
+
node
|
124
|
+
end
|
125
|
+
|
126
|
+
def impurity(values)
|
127
|
+
if @params[:criterion] == 'mae'
|
128
|
+
(values - values.mean(0)).abs.mean
|
129
|
+
else
|
130
|
+
((values - values.mean(0))**2).mean
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rumale
|
4
|
+
module Tree
|
5
|
+
# Node is a class that implements node used for construction of decision tree.
|
6
|
+
# This class is used for internal data structures.
|
7
|
+
class Node
|
8
|
+
# @!visibility private
|
9
|
+
attr_accessor :depth, :impurity, :n_samples, :probs, :leaf, :leaf_id, :left, :right, :feature_id, :threshold
|
10
|
+
|
11
|
+
# Create a new node for decision tree.
|
12
|
+
#
|
13
|
+
# @param depth [Integer] The depth of the node in tree.
|
14
|
+
# @param impurity [Float] The impurity of the node.
|
15
|
+
# @param n_samples [Integer] The number of the samples in the node.
|
16
|
+
# @param probs [Float] The probability of the node.
|
17
|
+
# @param leaf [Boolean] The flag indicating whether the node is a leaf.
|
18
|
+
# @param leaf_id [Integer] The leaf index of the node.
|
19
|
+
# @param left [Node] The left node.
|
20
|
+
# @param right [Node] The right node.
|
21
|
+
# @param feature_id [Integer] The feature index used for evaluation.
|
22
|
+
# @param threshold [Float] The threshold value of the feature for splitting the node.
|
23
|
+
def initialize(depth: 0, impurity: 0.0, n_samples: 0, probs: 0.0,
|
24
|
+
leaf: true, leaf_id: 0,
|
25
|
+
left: nil, right: nil, feature_id: 0, threshold: 0.0)
|
26
|
+
@depth = depth
|
27
|
+
@impurity = impurity
|
28
|
+
@n_samples = n_samples
|
29
|
+
@probs = probs
|
30
|
+
@leaf = leaf
|
31
|
+
@leaf_id = leaf_id
|
32
|
+
@left = left
|
33
|
+
@right = right
|
34
|
+
@feature_id = feature_id
|
35
|
+
@threshold = threshold
|
36
|
+
end
|
37
|
+
|
38
|
+
# Dump marshal data.
|
39
|
+
# @return [Hash] The marshal data about Node
|
40
|
+
def marshal_dump
|
41
|
+
{ depth: @depth,
|
42
|
+
impurity: @impurity,
|
43
|
+
n_samples: @n_samples,
|
44
|
+
probs: @probs,
|
45
|
+
leaf: @leaf,
|
46
|
+
leaf_id: @leaf_id,
|
47
|
+
left: @left,
|
48
|
+
right: @right,
|
49
|
+
feature_id: @feature_id,
|
50
|
+
threshold: @threshold }
|
51
|
+
end
|
52
|
+
|
53
|
+
# Load marshal data.
|
54
|
+
# @return [nil]
|
55
|
+
def marshal_load(obj)
|
56
|
+
@depth = obj[:depth]
|
57
|
+
@impurity = obj[:impurity]
|
58
|
+
@n_samples = obj[:n_samples]
|
59
|
+
@probs = obj[:probs]
|
60
|
+
@leaf = obj[:leaf]
|
61
|
+
@leaf_id = obj[:leaf_id]
|
62
|
+
@left = obj[:left]
|
63
|
+
@right = obj[:right]
|
64
|
+
@feature_id = obj[:feature_id]
|
65
|
+
@threshold = obj[:threshold]
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/rumale/utils.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rumale
|
4
|
+
# @!visibility private
|
5
|
+
module Utils
|
6
|
+
module_function
|
7
|
+
|
8
|
+
# @!visibility private
|
9
|
+
def choice_ids(size, probs, rng = nil)
|
10
|
+
rng ||= Random.new
|
11
|
+
Array.new(size) do
|
12
|
+
target = rng.rand
|
13
|
+
chosen = 0
|
14
|
+
probs.each_with_index do |p, idx|
|
15
|
+
break (chosen = idx) if target <= p
|
16
|
+
target -= p
|
17
|
+
end
|
18
|
+
chosen
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# @!visibility private
|
23
|
+
def rand_uniform(shape, rng = nil)
|
24
|
+
rng ||= Random.new
|
25
|
+
rnd_vals = Array.new(shape.inject(:*)) { rng.rand }
|
26
|
+
Numo::DFloat.asarray(rnd_vals).reshape(shape[0], shape[1])
|
27
|
+
end
|
28
|
+
|
29
|
+
# @!visibility private
|
30
|
+
def rand_normal(shape, rng = nil, mu = 0.0, sigma = 1.0)
|
31
|
+
rng ||= Random.new
|
32
|
+
a = rand_uniform(shape, rng)
|
33
|
+
b = rand_uniform(shape, rng)
|
34
|
+
(Numo::NMath.sqrt(Numo::NMath.log(a) * -2.0) * Numo::NMath.sin(b * 2.0 * Math::PI)) * sigma + mu
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rumale
|
4
|
+
# @!visibility private
|
5
|
+
module Validation
|
6
|
+
module_function
|
7
|
+
|
8
|
+
# @!visibility private
|
9
|
+
def check_sample_array(x)
|
10
|
+
raise TypeError, 'Expect class of sample matrix to be Numo::DFloat' unless x.is_a?(Numo::DFloat)
|
11
|
+
raise ArgumentError, 'Expect sample matrix to be 2-D array' unless x.shape.size == 2
|
12
|
+
nil
|
13
|
+
end
|
14
|
+
|
15
|
+
# @!visibility private
|
16
|
+
def check_label_array(y)
|
17
|
+
raise TypeError, 'Expect class of label vector to be Numo::Int32' unless y.is_a?(Numo::Int32)
|
18
|
+
raise ArgumentError, 'Expect label vector to be 1-D arrray' unless y.shape.size == 1
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
|
22
|
+
# @!visibility private
|
23
|
+
def check_tvalue_array(y)
|
24
|
+
raise TypeError, 'Expect class of target value vector to be Numo::DFloat' unless y.is_a?(Numo::DFloat)
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
# @!visibility private
|
29
|
+
def check_sample_label_size(x, y)
|
30
|
+
raise ArgumentError, 'Expect to have the same number of samples for sample matrix and label vector' unless x.shape[0] == y.shape[0]
|
31
|
+
nil
|
32
|
+
end
|
33
|
+
|
34
|
+
# @!visibility private
|
35
|
+
def check_sample_tvalue_size(x, y)
|
36
|
+
raise ArgumentError, 'Expect to have the same number of samples for sample matrix and target value vector' unless x.shape[0] == y.shape[0]
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
|
40
|
+
# @!visibility private
|
41
|
+
def check_params_type(type, params = {})
|
42
|
+
params.each { |k, v| raise TypeError, "Expect class of #{k} to be #{type}" unless v.is_a?(type) }
|
43
|
+
nil
|
44
|
+
end
|
45
|
+
|
46
|
+
# @!visibility private
|
47
|
+
def check_params_type_or_nil(type, params = {})
|
48
|
+
params.each { |k, v| raise TypeError, "Expect class of #{k} to be #{type} or nil" unless v.is_a?(type) || v.is_a?(NilClass) }
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
# @!visibility private
|
53
|
+
def check_params_float(params = {})
|
54
|
+
check_params_type(Float, params)
|
55
|
+
end
|
56
|
+
|
57
|
+
# @!visibility private
|
58
|
+
def check_params_integer(params = {})
|
59
|
+
check_params_type(Integer, params)
|
60
|
+
end
|
61
|
+
|
62
|
+
# @!visibility private
|
63
|
+
def check_params_string(params = {})
|
64
|
+
check_params_type(String, params)
|
65
|
+
end
|
66
|
+
|
67
|
+
# @!visibility private
|
68
|
+
def check_params_boolean(params = {})
|
69
|
+
params.each { |k, v| raise TypeError, "Expect class of #{k} to be Boolean" unless v.is_a?(FalseClass) || v.is_a?(TrueClass) }
|
70
|
+
nil
|
71
|
+
end
|
72
|
+
|
73
|
+
# @!visibility private
|
74
|
+
def check_params_positive(params = {})
|
75
|
+
params.reject { |_, v| v.nil? }.each { |k, v| raise ArgumentError, "Expect #{k} to be positive value" if v.negative? }
|
76
|
+
nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
data/rumale.gemspec
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'rumale/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'rumale'
|
7
|
+
spec.version = Rumale::VERSION
|
8
|
+
spec.authors = ['yoshoku']
|
9
|
+
spec.email = ['yoshoku@outlook.com']
|
10
|
+
|
11
|
+
spec.summary = <<MSG
|
12
|
+
Rumale is a machine learninig library in Ruby.
|
13
|
+
Rumale provides machine learning algorithms with interfaces similar to Scikit-Learn in Python.
|
14
|
+
MSG
|
15
|
+
spec.description = <<MSG
|
16
|
+
Rumale is a machine learninig library in Ruby.
|
17
|
+
Rumale provides machine learning algorithms with interfaces similar to Scikit-Learn in Python.
|
18
|
+
Rumale currently supports Linear / Kernel Support Vector Machine,
|
19
|
+
Logistic Regression, Linear Regression, Ridge, Lasso, Factorization Machine,
|
20
|
+
Naive Bayes, Decision Tree, AdaBoost, Random Forest, K-nearest neighbor algorithm,
|
21
|
+
K-Means, DBSCAN, Principal Component Analysis, and Non-negative Matrix Factorization.
|
22
|
+
MSG
|
23
|
+
spec.homepage = 'https://github.com/yoshoku/Rumale'
|
24
|
+
spec.license = 'BSD-2-Clause'
|
25
|
+
|
26
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
27
|
+
f.match(%r{^(test|spec|features)/})
|
28
|
+
end
|
29
|
+
spec.bindir = 'exe'
|
30
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ['lib']
|
32
|
+
|
33
|
+
spec.required_ruby_version = '>= 2.3'
|
34
|
+
|
35
|
+
spec.add_runtime_dependency 'numo-narray', '>= 0.9.1'
|
36
|
+
|
37
|
+
spec.add_development_dependency 'bundler', '>= 1.16'
|
38
|
+
spec.add_development_dependency 'coveralls', '~> 0.8'
|
39
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
40
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
41
|
+
end
|
metadata
ADDED
@@ -0,0 +1,204 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rumale
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.8.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- yoshoku
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-03-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: numo-narray
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.9.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.9.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.16'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.16'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: coveralls
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.8'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.8'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '12.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '12.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.0'
|
83
|
+
description: |
|
84
|
+
Rumale is a machine learninig library in Ruby.
|
85
|
+
Rumale provides machine learning algorithms with interfaces similar to Scikit-Learn in Python.
|
86
|
+
Rumale currently supports Linear / Kernel Support Vector Machine,
|
87
|
+
Logistic Regression, Linear Regression, Ridge, Lasso, Factorization Machine,
|
88
|
+
Naive Bayes, Decision Tree, AdaBoost, Random Forest, K-nearest neighbor algorithm,
|
89
|
+
K-Means, DBSCAN, Principal Component Analysis, and Non-negative Matrix Factorization.
|
90
|
+
email:
|
91
|
+
- yoshoku@outlook.com
|
92
|
+
executables: []
|
93
|
+
extensions: []
|
94
|
+
extra_rdoc_files: []
|
95
|
+
files:
|
96
|
+
- ".coveralls.yml"
|
97
|
+
- ".gitignore"
|
98
|
+
- ".rspec"
|
99
|
+
- ".rubocop.yml"
|
100
|
+
- ".rubocop_todo.yml"
|
101
|
+
- ".travis.yml"
|
102
|
+
- CHANGELOG.md
|
103
|
+
- CODE_OF_CONDUCT.md
|
104
|
+
- Gemfile
|
105
|
+
- LICENSE.txt
|
106
|
+
- README.md
|
107
|
+
- Rakefile
|
108
|
+
- bin/console
|
109
|
+
- bin/setup
|
110
|
+
- lib/rumale.rb
|
111
|
+
- lib/rumale/base/base_estimator.rb
|
112
|
+
- lib/rumale/base/classifier.rb
|
113
|
+
- lib/rumale/base/cluster_analyzer.rb
|
114
|
+
- lib/rumale/base/evaluator.rb
|
115
|
+
- lib/rumale/base/regressor.rb
|
116
|
+
- lib/rumale/base/splitter.rb
|
117
|
+
- lib/rumale/base/transformer.rb
|
118
|
+
- lib/rumale/clustering/dbscan.rb
|
119
|
+
- lib/rumale/clustering/k_means.rb
|
120
|
+
- lib/rumale/dataset.rb
|
121
|
+
- lib/rumale/decomposition/nmf.rb
|
122
|
+
- lib/rumale/decomposition/pca.rb
|
123
|
+
- lib/rumale/ensemble/ada_boost_classifier.rb
|
124
|
+
- lib/rumale/ensemble/ada_boost_regressor.rb
|
125
|
+
- lib/rumale/ensemble/random_forest_classifier.rb
|
126
|
+
- lib/rumale/ensemble/random_forest_regressor.rb
|
127
|
+
- lib/rumale/evaluation_measure/accuracy.rb
|
128
|
+
- lib/rumale/evaluation_measure/f_score.rb
|
129
|
+
- lib/rumale/evaluation_measure/log_loss.rb
|
130
|
+
- lib/rumale/evaluation_measure/mean_absolute_error.rb
|
131
|
+
- lib/rumale/evaluation_measure/mean_squared_error.rb
|
132
|
+
- lib/rumale/evaluation_measure/normalized_mutual_information.rb
|
133
|
+
- lib/rumale/evaluation_measure/precision.rb
|
134
|
+
- lib/rumale/evaluation_measure/precision_recall.rb
|
135
|
+
- lib/rumale/evaluation_measure/purity.rb
|
136
|
+
- lib/rumale/evaluation_measure/r2_score.rb
|
137
|
+
- lib/rumale/evaluation_measure/recall.rb
|
138
|
+
- lib/rumale/kernel_approximation/rbf.rb
|
139
|
+
- lib/rumale/kernel_machine/kernel_svc.rb
|
140
|
+
- lib/rumale/linear_model/base_linear_model.rb
|
141
|
+
- lib/rumale/linear_model/lasso.rb
|
142
|
+
- lib/rumale/linear_model/linear_regression.rb
|
143
|
+
- lib/rumale/linear_model/logistic_regression.rb
|
144
|
+
- lib/rumale/linear_model/ridge.rb
|
145
|
+
- lib/rumale/linear_model/svc.rb
|
146
|
+
- lib/rumale/linear_model/svr.rb
|
147
|
+
- lib/rumale/model_selection/cross_validation.rb
|
148
|
+
- lib/rumale/model_selection/grid_search_cv.rb
|
149
|
+
- lib/rumale/model_selection/k_fold.rb
|
150
|
+
- lib/rumale/model_selection/stratified_k_fold.rb
|
151
|
+
- lib/rumale/multiclass/one_vs_rest_classifier.rb
|
152
|
+
- lib/rumale/naive_bayes/naive_bayes.rb
|
153
|
+
- lib/rumale/nearest_neighbors/k_neighbors_classifier.rb
|
154
|
+
- lib/rumale/nearest_neighbors/k_neighbors_regressor.rb
|
155
|
+
- lib/rumale/optimizer/nadam.rb
|
156
|
+
- lib/rumale/optimizer/rmsprop.rb
|
157
|
+
- lib/rumale/optimizer/sgd.rb
|
158
|
+
- lib/rumale/optimizer/yellow_fin.rb
|
159
|
+
- lib/rumale/pairwise_metric.rb
|
160
|
+
- lib/rumale/pipeline/pipeline.rb
|
161
|
+
- lib/rumale/polynomial_model/base_factorization_machine.rb
|
162
|
+
- lib/rumale/polynomial_model/factorization_machine_classifier.rb
|
163
|
+
- lib/rumale/polynomial_model/factorization_machine_regressor.rb
|
164
|
+
- lib/rumale/preprocessing/l2_normalizer.rb
|
165
|
+
- lib/rumale/preprocessing/label_encoder.rb
|
166
|
+
- lib/rumale/preprocessing/min_max_scaler.rb
|
167
|
+
- lib/rumale/preprocessing/one_hot_encoder.rb
|
168
|
+
- lib/rumale/preprocessing/standard_scaler.rb
|
169
|
+
- lib/rumale/probabilistic_output.rb
|
170
|
+
- lib/rumale/tree/base_decision_tree.rb
|
171
|
+
- lib/rumale/tree/decision_tree_classifier.rb
|
172
|
+
- lib/rumale/tree/decision_tree_regressor.rb
|
173
|
+
- lib/rumale/tree/node.rb
|
174
|
+
- lib/rumale/utils.rb
|
175
|
+
- lib/rumale/validation.rb
|
176
|
+
- lib/rumale/values.rb
|
177
|
+
- lib/rumale/version.rb
|
178
|
+
- rumale.gemspec
|
179
|
+
homepage: https://github.com/yoshoku/Rumale
|
180
|
+
licenses:
|
181
|
+
- BSD-2-Clause
|
182
|
+
metadata: {}
|
183
|
+
post_install_message:
|
184
|
+
rdoc_options: []
|
185
|
+
require_paths:
|
186
|
+
- lib
|
187
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '2.3'
|
192
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - ">="
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: '0'
|
197
|
+
requirements: []
|
198
|
+
rubyforge_project:
|
199
|
+
rubygems_version: 2.5.2.3
|
200
|
+
signing_key:
|
201
|
+
specification_version: 4
|
202
|
+
summary: Rumale is a machine learninig library in Ruby. Rumale provides machine learning
|
203
|
+
algorithms with interfaces similar to Scikit-Learn in Python.
|
204
|
+
test_files: []
|