rumale 0.18.1 → 0.18.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/CHANGELOG.md +16 -4
- data/lib/rumale.rb +6 -1
- data/lib/rumale/clustering/dbscan.rb +0 -17
- data/lib/rumale/clustering/gaussian_mixture.rb +0 -21
- data/lib/rumale/clustering/hdbscan.rb +0 -15
- data/lib/rumale/clustering/k_means.rb +0 -17
- data/lib/rumale/clustering/k_medoids.rb +0 -19
- data/lib/rumale/clustering/power_iteration.rb +0 -19
- data/lib/rumale/clustering/single_linkage.rb +0 -17
- data/lib/rumale/clustering/spectral_clustering.rb +0 -17
- data/lib/rumale/evaluation_measure/function.rb +34 -0
- data/lib/rumale/kernel_approximation/rbf.rb +0 -19
- data/lib/rumale/kernel_machine/kernel_pca.rb +0 -21
- data/lib/rumale/kernel_machine/kernel_ridge.rb +0 -15
- data/lib/rumale/kernel_machine/kernel_svc.rb +0 -21
- data/lib/rumale/naive_bayes/base_naive_bayes.rb +47 -0
- data/lib/rumale/naive_bayes/bernoulli_nb.rb +82 -0
- data/lib/rumale/naive_bayes/complement_nb.rb +85 -0
- data/lib/rumale/naive_bayes/gaussian_nb.rb +69 -0
- data/lib/rumale/naive_bayes/multinomial_nb.rb +74 -0
- data/lib/rumale/naive_bayes/negation_nb.rb +71 -0
- data/lib/rumale/nearest_neighbors/k_neighbors_classifier.rb +0 -19
- data/lib/rumale/nearest_neighbors/k_neighbors_regressor.rb +0 -17
- data/lib/rumale/neural_network/adam.rb +0 -19
- data/lib/rumale/preprocessing/bin_discretizer.rb +0 -15
- data/lib/rumale/preprocessing/label_binarizer.rb +0 -15
- data/lib/rumale/preprocessing/label_encoder.rb +0 -15
- data/lib/rumale/preprocessing/max_abs_scaler.rb +0 -15
- data/lib/rumale/preprocessing/min_max_scaler.rb +0 -17
- data/lib/rumale/preprocessing/one_hot_encoder.rb +0 -19
- data/lib/rumale/preprocessing/ordinal_encoder.rb +0 -13
- data/lib/rumale/preprocessing/standard_scaler.rb +0 -15
- data/lib/rumale/version.rb +1 -1
- metadata +8 -3
- data/lib/rumale/naive_bayes/naive_bayes.rb +0 -250
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4028734b509ce8a05301fe152bdcc2a26a0e318e692a866d3bc1669ca7e5f859
|
4
|
+
data.tar.gz: c2dfc3614f786b59ce72a96adc2ca16b140a72e42f4851cb2cba8cebb3cab8dc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53b09b0eb4f783e5c9980023ad90749cee0ad7b77de590b0622a97bbc4899d96fdd6b3181a287026c547925d0938af925754c81a6eca5e9aca5746fb65699632
|
7
|
+
data.tar.gz: 5f45554a4d2fb0486a2c84a317c8faf1ca98a001c175380e12efcaba9ea1a909c337b9674f6d094ca25df2f9fdb372b7e460631a4fa99d19bce68e10200dc213
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,12 +1,24 @@
|
|
1
|
+
# 0.18.2
|
2
|
+
- Change file composition of naive bayes classifiers.
|
3
|
+
- Add classifier class for [ComplementNaiveBayes](https://yoshoku.github.io/rumale/doc/Rumale/NaiveBayes/ComplementNB.html).
|
4
|
+
- Add classifier class for [NegationNaiveBayes](https://yoshoku.github.io/rumale/doc/Rumale/NaiveBayes/NegationNB.html).
|
5
|
+
- Add [module function](https://yoshoku.github.io/rumale/doc/Rumale/EvaluationMeasure.html#confusion_matrix-class_method) for calculating confusion matrix.
|
6
|
+
- Delete unneeded marshal dump and load methods.
|
7
|
+
- [Clustering](https://yoshoku.github.io/rumale/doc/Rumale/Clustering.html),
|
8
|
+
[KernelApproximation](https://yoshoku.github.io/rumale/doc/Rumale/KernelApproximation.html),
|
9
|
+
[KernelMachine](https://yoshoku.github.io/rumale/doc/Rumale/KernelMachine.html),
|
10
|
+
[NearestNeighbors](https://yoshoku.github.io/rumale/doc/Rumale/NearestNeighbors.html),
|
11
|
+
[Preprocessing](https://yoshoku.github.io/rumale/doc/Rumale/Preprocessing.html).
|
12
|
+
|
1
13
|
# 0.18.1
|
2
14
|
- Add [module function](https://yoshoku.github.io/rumale/doc/Rumale/EvaluationMeasure.html#classification_report-class_method) for generating summary of classification performance.
|
3
15
|
- Delete marshal dump and load methods for documentation.
|
4
16
|
The marshal methods are written in estimator classes for indicating on API documentation that the learned model can be saved with Marshal.
|
5
17
|
Even without these methods, Marshal can save the learned model, so they are deleted sequentially.
|
6
|
-
- [Manifold](https://yoshoku.github.io/rumale/doc/Rumale/Manifold.html)
|
7
|
-
|
8
|
-
|
9
|
-
|
18
|
+
- [Manifold](https://yoshoku.github.io/rumale/doc/Rumale/Manifold.html),
|
19
|
+
[NaiveBayes](https://yoshoku.github.io/rumale/doc/Rumale/NaiveBayes.html),
|
20
|
+
[PolynomialModel](https://yoshoku.github.io/rumale/doc/Rumale/PolynomialModel.html),
|
21
|
+
[Decomposition](https://yoshoku.github.io/doc/Rumale/Decomposition.html).
|
10
22
|
|
11
23
|
# 0.18.0
|
12
24
|
- Add transformer class for [FisherDiscriminantAnalysis](https://yoshoku.github.io/rumale/doc/Rumale/MetricLearning/FisherDiscriminantAnalysis.html).
|
data/lib/rumale.rb
CHANGED
@@ -47,7 +47,12 @@ require 'rumale/multiclass/one_vs_rest_classifier'
|
|
47
47
|
require 'rumale/nearest_neighbors/vp_tree'
|
48
48
|
require 'rumale/nearest_neighbors/k_neighbors_classifier'
|
49
49
|
require 'rumale/nearest_neighbors/k_neighbors_regressor'
|
50
|
-
require 'rumale/naive_bayes/
|
50
|
+
require 'rumale/naive_bayes/base_naive_bayes'
|
51
|
+
require 'rumale/naive_bayes/bernoulli_nb'
|
52
|
+
require 'rumale/naive_bayes/complement_nb'
|
53
|
+
require 'rumale/naive_bayes/gaussian_nb'
|
54
|
+
require 'rumale/naive_bayes/multinomial_nb'
|
55
|
+
require 'rumale/naive_bayes/negation_nb'
|
51
56
|
require 'rumale/tree/node'
|
52
57
|
require 'rumale/tree/base_decision_tree'
|
53
58
|
require 'rumale/tree/decision_tree_classifier'
|
@@ -70,23 +70,6 @@ module Rumale
|
|
70
70
|
labels
|
71
71
|
end
|
72
72
|
|
73
|
-
# Dump marshal data.
|
74
|
-
# @return [Hash] The marshal data.
|
75
|
-
def marshal_dump
|
76
|
-
{ params: @params,
|
77
|
-
core_sample_ids: @core_sample_ids,
|
78
|
-
labels: @labels }
|
79
|
-
end
|
80
|
-
|
81
|
-
# Load marshal data.
|
82
|
-
# @return [nil]
|
83
|
-
def marshal_load(obj)
|
84
|
-
@params = obj[:params]
|
85
|
-
@core_sample_ids = obj[:core_sample_ids]
|
86
|
-
@labels = obj[:labels]
|
87
|
-
nil
|
88
|
-
end
|
89
|
-
|
90
73
|
private
|
91
74
|
|
92
75
|
def partial_fit(x)
|
@@ -114,27 +114,6 @@ module Rumale
|
|
114
114
|
fit(x).predict(x)
|
115
115
|
end
|
116
116
|
|
117
|
-
# Dump marshal data.
|
118
|
-
# @return [Hash] The marshal data.
|
119
|
-
def marshal_dump
|
120
|
-
{ params: @params,
|
121
|
-
n_iter: @n_iter,
|
122
|
-
weights: @weights,
|
123
|
-
means: @means,
|
124
|
-
covariances: @covariances }
|
125
|
-
end
|
126
|
-
|
127
|
-
# Load marshal data.
|
128
|
-
# @return [nil]
|
129
|
-
def marshal_load(obj)
|
130
|
-
@params = obj[:params]
|
131
|
-
@n_iter = obj[:n_iter]
|
132
|
-
@weights = obj[:weights]
|
133
|
-
@means = obj[:means]
|
134
|
-
@covariances = obj[:covariances]
|
135
|
-
nil
|
136
|
-
end
|
137
|
-
|
138
117
|
private
|
139
118
|
|
140
119
|
def assign_cluster(memberships)
|
@@ -71,21 +71,6 @@ module Rumale
|
|
71
71
|
@labels = partial_fit(distance_mat)
|
72
72
|
end
|
73
73
|
|
74
|
-
# Dump marshal data.
|
75
|
-
# @return [Hash] The marshal data.
|
76
|
-
def marshal_dump
|
77
|
-
{ params: @params,
|
78
|
-
labels: @labels }
|
79
|
-
end
|
80
|
-
|
81
|
-
# Load marshal data.
|
82
|
-
# @return [nil]
|
83
|
-
def marshal_load(obj)
|
84
|
-
@params = obj[:params]
|
85
|
-
@labels = obj[:labels]
|
86
|
-
nil
|
87
|
-
end
|
88
|
-
|
89
74
|
private
|
90
75
|
|
91
76
|
# @!visibility private
|
@@ -92,23 +92,6 @@ module Rumale
|
|
92
92
|
predict(x)
|
93
93
|
end
|
94
94
|
|
95
|
-
# Dump marshal data.
|
96
|
-
# @return [Hash] The marshal data.
|
97
|
-
def marshal_dump
|
98
|
-
{ params: @params,
|
99
|
-
cluster_centers: @cluster_centers,
|
100
|
-
rng: @rng }
|
101
|
-
end
|
102
|
-
|
103
|
-
# Load marshal data.
|
104
|
-
# @return [nil]
|
105
|
-
def marshal_load(obj)
|
106
|
-
@params = obj[:params]
|
107
|
-
@cluster_centers = obj[:cluster_centers]
|
108
|
-
@rng = obj[:rng]
|
109
|
-
nil
|
110
|
-
end
|
111
|
-
|
112
95
|
private
|
113
96
|
|
114
97
|
def assign_cluster(x)
|
@@ -111,25 +111,6 @@ module Rumale
|
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
114
|
-
# Dump marshal data.
|
115
|
-
# @return [Hash] The marshal data.
|
116
|
-
def marshal_dump
|
117
|
-
{ params: @params,
|
118
|
-
medoid_ids: @medoid_ids,
|
119
|
-
cluster_centers: @cluster_centers,
|
120
|
-
rng: @rng }
|
121
|
-
end
|
122
|
-
|
123
|
-
# Load marshal data.
|
124
|
-
# @return [nil]
|
125
|
-
def marshal_load(obj)
|
126
|
-
@params = obj[:params]
|
127
|
-
@medoid_ids = obj[:medoid_ids]
|
128
|
-
@cluster_centers = obj[:cluster_centers]
|
129
|
-
@rng = obj[:rng]
|
130
|
-
nil
|
131
|
-
end
|
132
|
-
|
133
114
|
private
|
134
115
|
|
135
116
|
def assign_cluster(distances_to_medoids)
|
@@ -89,25 +89,6 @@ module Rumale
|
|
89
89
|
@labels = line_kmeans_clustering(@embedding)
|
90
90
|
end
|
91
91
|
|
92
|
-
# Dump marshal data.
|
93
|
-
# @return [Hash] The marshal data.
|
94
|
-
def marshal_dump
|
95
|
-
{ params: @params,
|
96
|
-
embedding: @embedding,
|
97
|
-
labels: @labels,
|
98
|
-
n_iter: @n_iter }
|
99
|
-
end
|
100
|
-
|
101
|
-
# Load marshal data.
|
102
|
-
# @return [nil]
|
103
|
-
def marshal_load(obj)
|
104
|
-
@params = obj[:params]
|
105
|
-
@embedding = obj[:embedding]
|
106
|
-
@labels = obj[:labels]
|
107
|
-
@n_iter = obj[:n_iter]
|
108
|
-
nil
|
109
|
-
end
|
110
|
-
|
111
92
|
private
|
112
93
|
|
113
94
|
def embedded_space(affinity_mat, max_iter, tol)
|
@@ -70,23 +70,6 @@ module Rumale
|
|
70
70
|
@labels = partial_fit(distance_mat)
|
71
71
|
end
|
72
72
|
|
73
|
-
# Dump marshal data.
|
74
|
-
# @return [Hash] The marshal data.
|
75
|
-
def marshal_dump
|
76
|
-
{ params: @params,
|
77
|
-
labels: @labels,
|
78
|
-
hierarchy: @hierarchy }
|
79
|
-
end
|
80
|
-
|
81
|
-
# Load marshal data.
|
82
|
-
# @return [nil]
|
83
|
-
def marshal_load(obj)
|
84
|
-
@params = obj[:params]
|
85
|
-
@labels = obj[:labels]
|
86
|
-
@hierarchy = obj[:hierarchy]
|
87
|
-
nil
|
88
|
-
end
|
89
|
-
|
90
73
|
private
|
91
74
|
|
92
75
|
# @!visibility private
|
@@ -92,23 +92,6 @@ module Rumale
|
|
92
92
|
@labels = kmeans_clustering(normalized_embedding)
|
93
93
|
end
|
94
94
|
|
95
|
-
# Dump marshal data.
|
96
|
-
# @return [Hash] The marshal data.
|
97
|
-
def marshal_dump
|
98
|
-
{ params: @params,
|
99
|
-
embedding: @embedding,
|
100
|
-
labels: @labels }
|
101
|
-
end
|
102
|
-
|
103
|
-
# Load marshal data.
|
104
|
-
# @return [nil]
|
105
|
-
def marshal_load(obj)
|
106
|
-
@params = obj[:params]
|
107
|
-
@embedding = obj[:embedding]
|
108
|
-
@labels = obj[:labels]
|
109
|
-
nil
|
110
|
-
end
|
111
|
-
|
112
95
|
private
|
113
96
|
|
114
97
|
def embedded_space(affinity_mat, n_clusters)
|
@@ -8,6 +8,40 @@ module Rumale
|
|
8
8
|
module EvaluationMeasure
|
9
9
|
module_function
|
10
10
|
|
11
|
+
# Calculate confusion matrix for evaluating classification performance.
|
12
|
+
#
|
13
|
+
# @example
|
14
|
+
# y_true = Numo::Int32[2, 0, 2, 2, 0, 1]
|
15
|
+
# y_pred = Numo::Int32[0, 0, 2, 2, 0, 2]
|
16
|
+
# p confusion_matrix(y_true, y_pred)
|
17
|
+
#
|
18
|
+
# # Numo::Int32#shape=[3,3]
|
19
|
+
# # [[2, 0, 0],
|
20
|
+
# # [0, 0, 1],
|
21
|
+
# # [1, 0, 2]]
|
22
|
+
#
|
23
|
+
# @param y_true [Numo::Int32] (shape: [n_samples]) The ground truth labels.
|
24
|
+
# @param y_pred [Numo::Int32] (shape: [n_samples]) The predicted labels.
|
25
|
+
# @return [Numo::Int32] (shape: [n_classes, n_classes]) The confusion matrix.
|
26
|
+
def confusion_matrix(y_true, y_pred)
|
27
|
+
y_true = Rumale::Validation.check_convert_label_array(y_true)
|
28
|
+
y_pred = Rumale::Validation.check_convert_label_array(y_pred)
|
29
|
+
|
30
|
+
labels = y_true.to_a.uniq.sort
|
31
|
+
n_labels = labels.size
|
32
|
+
|
33
|
+
conf_mat = Numo::Int32.zeros(n_labels, n_labels)
|
34
|
+
|
35
|
+
labels.each_with_index do |lbl_a, i|
|
36
|
+
y_p = y_pred[y_true.eq(lbl_a)]
|
37
|
+
labels.each_with_index do |lbl_b, j|
|
38
|
+
conf_mat[i, j] = y_p.eq(lbl_b).count
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
conf_mat
|
43
|
+
end
|
44
|
+
|
11
45
|
# Output a summary of classification performance for each class.
|
12
46
|
#
|
13
47
|
# @example
|
@@ -97,25 +97,6 @@ module Rumale
|
|
97
97
|
projection = x.dot(@random_mat) + @random_vec.tile(n_samples, 1)
|
98
98
|
Numo::NMath.sin(projection) * ((2.0 / @params[:n_components])**0.5)
|
99
99
|
end
|
100
|
-
|
101
|
-
# Dump marshal data.
|
102
|
-
# @return [Hash] The marshal data about RBF.
|
103
|
-
def marshal_dump
|
104
|
-
{ params: @params,
|
105
|
-
random_mat: @random_mat,
|
106
|
-
random_vec: @random_vec,
|
107
|
-
rng: @rng }
|
108
|
-
end
|
109
|
-
|
110
|
-
# Load marshal data.
|
111
|
-
# @return [nil]
|
112
|
-
def marshal_load(obj)
|
113
|
-
@params = obj[:params]
|
114
|
-
@random_mat = obj[:random_mat]
|
115
|
-
@random_vec = obj[:random_vec]
|
116
|
-
@rng = obj[:rng]
|
117
|
-
nil
|
118
|
-
end
|
119
100
|
end
|
120
101
|
end
|
121
102
|
end
|
@@ -91,27 +91,6 @@ module Rumale
|
|
91
91
|
transformed = centered_kernel_mat.dot(transform_mat)
|
92
92
|
@params[:n_components] == 1 ? transformed[true, 0].dup : transformed
|
93
93
|
end
|
94
|
-
|
95
|
-
# Dump marshal data.
|
96
|
-
# @return [Hash] The marshal data.
|
97
|
-
def marshal_dump
|
98
|
-
{ params: @params,
|
99
|
-
row_mean: @row_mean,
|
100
|
-
all_mean: @all_mean,
|
101
|
-
alphas: @alphas,
|
102
|
-
lambdas: @lambdas }
|
103
|
-
end
|
104
|
-
|
105
|
-
# Load marshal data.
|
106
|
-
# @return [nil]
|
107
|
-
def marshal_load(obj)
|
108
|
-
@params = obj[:params]
|
109
|
-
@row_mean = obj[:row_mean]
|
110
|
-
@all_mean = obj[:all_mean]
|
111
|
-
@alphas = obj[:alphas]
|
112
|
-
@lambdas = obj[:lambdas]
|
113
|
-
nil
|
114
|
-
end
|
115
94
|
end
|
116
95
|
end
|
117
96
|
end
|
@@ -75,21 +75,6 @@ module Rumale
|
|
75
75
|
x = check_convert_sample_array(x)
|
76
76
|
x.dot(@weight_vec)
|
77
77
|
end
|
78
|
-
|
79
|
-
# Dump marshal data.
|
80
|
-
# @return [Hash] The marshal data.
|
81
|
-
def marshal_dump
|
82
|
-
{ params: @params,
|
83
|
-
weight_vec: @weight_vec }
|
84
|
-
end
|
85
|
-
|
86
|
-
# Load marshal data.
|
87
|
-
# @return [nil]
|
88
|
-
def marshal_load(obj)
|
89
|
-
@params = obj[:params]
|
90
|
-
@weight_vec = obj[:weight_vec]
|
91
|
-
nil
|
92
|
-
end
|
93
78
|
end
|
94
79
|
end
|
95
80
|
end
|
@@ -161,27 +161,6 @@ module Rumale
|
|
161
161
|
probs
|
162
162
|
end
|
163
163
|
|
164
|
-
# Dump marshal data.
|
165
|
-
# @return [Hash] The marshal data about KernelSVC.
|
166
|
-
def marshal_dump
|
167
|
-
{ params: @params,
|
168
|
-
weight_vec: @weight_vec,
|
169
|
-
prob_param: @prob_param,
|
170
|
-
classes: @classes,
|
171
|
-
rng: @rng }
|
172
|
-
end
|
173
|
-
|
174
|
-
# Load marshal data.
|
175
|
-
# @return [nil]
|
176
|
-
def marshal_load(obj)
|
177
|
-
@params = obj[:params]
|
178
|
-
@weight_vec = obj[:weight_vec]
|
179
|
-
@prob_param = obj[:prob_param]
|
180
|
-
@classes = obj[:classes]
|
181
|
-
@rng = obj[:rng]
|
182
|
-
nil
|
183
|
-
end
|
184
|
-
|
185
164
|
private
|
186
165
|
|
187
166
|
def partial_fit(x, bin_y)
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rumale/base/base_estimator'
|
4
|
+
require 'rumale/base/classifier'
|
5
|
+
|
6
|
+
module Rumale
|
7
|
+
# This module consists of the classes that implement naive bayes models.
|
8
|
+
module NaiveBayes
|
9
|
+
# BaseNaiveBayes is a class that has methods for common processes of naive bayes classifier.
|
10
|
+
# This class is used internally.
|
11
|
+
class BaseNaiveBayes
|
12
|
+
include Base::BaseEstimator
|
13
|
+
include Base::Classifier
|
14
|
+
|
15
|
+
# Predict class labels for samples.
|
16
|
+
#
|
17
|
+
# @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to predict the labels.
|
18
|
+
# @return [Numo::Int32] (shape: [n_samples]) Predicted class label per sample.
|
19
|
+
def predict(x)
|
20
|
+
x = check_convert_sample_array(x)
|
21
|
+
n_samples = x.shape.first
|
22
|
+
decision_values = decision_function(x)
|
23
|
+
Numo::Int32.asarray(Array.new(n_samples) { |n| @classes[decision_values[n, true].max_index] })
|
24
|
+
end
|
25
|
+
|
26
|
+
# Predict log-probability for samples.
|
27
|
+
#
|
28
|
+
# @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to predict the log-probailities.
|
29
|
+
# @return [Numo::DFloat] (shape: [n_samples, n_classes]) Predicted log-probability of each class per sample.
|
30
|
+
def predict_log_proba(x)
|
31
|
+
x = check_convert_sample_array(x)
|
32
|
+
n_samples, = x.shape
|
33
|
+
log_likelihoods = decision_function(x)
|
34
|
+
log_likelihoods - Numo::NMath.log(Numo::NMath.exp(log_likelihoods).sum(1)).reshape(n_samples, 1)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Predict probability for samples.
|
38
|
+
#
|
39
|
+
# @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to predict the probailities.
|
40
|
+
# @return [Numo::DFloat] (shape: [n_samples, n_classes]) Predicted probability of each class per sample.
|
41
|
+
def predict_proba(x)
|
42
|
+
x = check_convert_sample_array(x)
|
43
|
+
Numo::NMath.exp(predict_log_proba(x)).abs
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|