rumale 0.18.4 → 0.18.5
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 +4 -4
- data/.rubocop.yml +16 -0
- data/CHANGELOG.md +4 -0
- data/lib/rumale/clustering/hdbscan.rb +2 -0
- data/lib/rumale/ensemble/gradient_boosting_regressor.rb +3 -5
- data/lib/rumale/evaluation_measure/function.rb +8 -5
- data/lib/rumale/kernel_machine/kernel_fda.rb +1 -1
- data/lib/rumale/nearest_neighbors/vp_tree.rb +5 -7
- data/lib/rumale/pairwise_metric.rb +33 -0
- data/lib/rumale/version.rb +1 -1
- metadata +2 -4
- data/bin/console +0 -14
- data/bin/setup +0 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 90ea96f8e47e9710da8f9e3d2c0d88b45e5ec86f349fb4dc1d9058867750c88c
|
|
4
|
+
data.tar.gz: dde564e3cb15d6abbbb35c2629d1b9c53c79a456f29a60a5cfe7780aa06dd47b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: aaaad994a319b406686962301ad28a67e9d92b3fd15930f9792eb0e6249342d98b08a822737771f19501928036cfdf64a41dede62e9a3fe114aefa13a77f72c6
|
|
7
|
+
data.tar.gz: f71fe52af3418d4ff74641a6f651fda783eca32450c36023de276ed41f0e326e035f3996f9433e2514569f8bcb496276bc582d0b507a5c603c90164ad388fad4
|
data/.rubocop.yml
CHANGED
|
@@ -15,10 +15,26 @@ AllCops:
|
|
|
15
15
|
Style/Documentation:
|
|
16
16
|
Enabled: false
|
|
17
17
|
|
|
18
|
+
Style/HashEachMethods:
|
|
19
|
+
Enabled: true
|
|
20
|
+
|
|
21
|
+
Style/HashTransformKeys:
|
|
22
|
+
Enabled: true
|
|
23
|
+
|
|
24
|
+
Style/HashTransformValues:
|
|
25
|
+
Enabled: true
|
|
26
|
+
|
|
27
|
+
Lint/RaiseException:
|
|
28
|
+
Enabled: true
|
|
29
|
+
|
|
30
|
+
Lint/StructNewOverride:
|
|
31
|
+
Enabled: true
|
|
32
|
+
|
|
18
33
|
Layout/LineLength:
|
|
19
34
|
Max: 145
|
|
20
35
|
IgnoredPatterns: ['(\A|\s)#']
|
|
21
36
|
|
|
37
|
+
|
|
22
38
|
Metrics/ModuleLength:
|
|
23
39
|
Max: 200
|
|
24
40
|
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# 0.18.5
|
|
2
|
+
- Add functions for calculation of cosine similarity and distance to [Rumale::PairwiseMetric](https://yoshoku.github.io/rumale/doc/Rumale/PairwiseMetric.html).
|
|
3
|
+
- Refactor some codes with Rubocop.
|
|
4
|
+
|
|
1
5
|
# 0.18.4
|
|
2
6
|
- Add transformer class for [KernelFDA](https://yoshoku.github.io/rumale/doc/Rumale/KernelMachine/KernelFDA.html).
|
|
3
7
|
- Refactor [KernelPCA](https://yoshoku.github.io/rumale/doc/Rumale/KernelMachine/KernelPCA.html).
|
|
@@ -134,6 +134,7 @@ module Rumale
|
|
|
134
134
|
res
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
|
|
137
138
|
def condense_tree(hierarchy, min_cluster_size)
|
|
138
139
|
n_edges = hierarchy.size
|
|
139
140
|
root = 2 * n_edges
|
|
@@ -262,6 +263,7 @@ module Rumale
|
|
|
262
263
|
end
|
|
263
264
|
res
|
|
264
265
|
end
|
|
266
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Metrics/PerceivedComplexity
|
|
265
267
|
end
|
|
266
268
|
end
|
|
267
269
|
end
|
|
@@ -125,12 +125,10 @@ module Rumale
|
|
|
125
125
|
n_outputs = @estimators.first.is_a?(Array) ? @estimators.size : 1
|
|
126
126
|
if n_outputs > 1
|
|
127
127
|
multivar_predict(x)
|
|
128
|
+
elsif enable_parallel?
|
|
129
|
+
parallel_map(@params[:n_estimators]) { |n| @estimators[n].predict(x) }.reduce(&:+) + @base_predictions
|
|
128
130
|
else
|
|
129
|
-
|
|
130
|
-
parallel_map(@params[:n_estimators]) { |n| @estimators[n].predict(x) }.reduce(&:+) + @base_predictions
|
|
131
|
-
else
|
|
132
|
-
@estimators.map { |tree| tree.predict(x) }.reduce(&:+) + @base_predictions
|
|
133
|
-
end
|
|
131
|
+
@estimators.map { |tree| tree.predict(x) }.reduce(&:+) + @base_predictions
|
|
134
132
|
end
|
|
135
133
|
end
|
|
136
134
|
|
|
@@ -42,6 +42,8 @@ module Rumale
|
|
|
42
42
|
conf_mat
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
46
|
+
|
|
45
47
|
# Output a summary of classification performance for each class.
|
|
46
48
|
#
|
|
47
49
|
# @example
|
|
@@ -69,7 +71,8 @@ module Rumale
|
|
|
69
71
|
y_true = Rumale::Validation.check_convert_label_array(y_true)
|
|
70
72
|
y_pred = Rumale::Validation.check_convert_label_array(y_pred)
|
|
71
73
|
# calculate each evaluation measure.
|
|
72
|
-
|
|
74
|
+
classes = y_true.to_a.uniq.sort
|
|
75
|
+
supports = Numo::Int32.asarray(classes.map { |label| y_true.eq(label).count })
|
|
73
76
|
precisions = Rumale::EvaluationMeasure::PrecisionRecall.precision_each_class(y_true, y_pred)
|
|
74
77
|
recalls = Rumale::EvaluationMeasure::PrecisionRecall.recall_each_class(y_true, y_pred)
|
|
75
78
|
fscores = Rumale::EvaluationMeasure::PrecisionRecall.f_score_each_class(y_true, y_pred)
|
|
@@ -83,7 +86,7 @@ module Rumale
|
|
|
83
86
|
weighted_recall = (Numo::DFloat.cast(recalls) * weights).sum
|
|
84
87
|
weighted_fscore = (Numo::DFloat.cast(fscores) * weights).sum
|
|
85
88
|
# output reults.
|
|
86
|
-
target_name ||=
|
|
89
|
+
target_name ||= classes.map(&:to_s)
|
|
87
90
|
if output_hash
|
|
88
91
|
res = {}
|
|
89
92
|
target_name.each_with_index do |label, n|
|
|
@@ -107,9 +110,8 @@ module Rumale
|
|
|
107
110
|
fscore: weighted_fscore,
|
|
108
111
|
support: sum_supports
|
|
109
112
|
}
|
|
110
|
-
res
|
|
111
113
|
else
|
|
112
|
-
width = [
|
|
114
|
+
width = [12, target_name.map(&:size).max].max # 12 is 'weighted avg'.size
|
|
113
115
|
res = +''
|
|
114
116
|
res << "#{' ' * width} precision recall f1-score support\n"
|
|
115
117
|
res << "\n"
|
|
@@ -136,8 +138,9 @@ module Rumale
|
|
|
136
138
|
fscore_str = format('%#10s', format('%.2f', weighted_fscore))
|
|
137
139
|
res << format("%##{width}s ", 'weighted avg')
|
|
138
140
|
res << "#{precision_str}#{recall_str}#{fscore_str}#{supports_str}\n"
|
|
139
|
-
res
|
|
140
141
|
end
|
|
142
|
+
res
|
|
141
143
|
end
|
|
144
|
+
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
|
142
145
|
end
|
|
143
146
|
end
|
|
@@ -81,7 +81,7 @@ module Rumale
|
|
|
81
81
|
within_mat = centered_kernel_mat.dot(centered_kernel_mat.transpose) + @params[:reg_param] * Numo::DFloat.eye(n_samples)
|
|
82
82
|
|
|
83
83
|
# calculate projection matrix.
|
|
84
|
-
|
|
84
|
+
_, eig_vecs = Numo::Linalg.eigh(
|
|
85
85
|
between_mat, within_mat,
|
|
86
86
|
vals_range: (n_samples - n_components)...n_samples
|
|
87
87
|
)
|
|
@@ -84,14 +84,12 @@ module Rumale
|
|
|
84
84
|
else
|
|
85
85
|
node
|
|
86
86
|
end
|
|
87
|
+
elsif dist + tau >= node.threshold
|
|
88
|
+
node.right.n_samples < k ? node : search(q, node.right, k, tau)
|
|
89
|
+
elsif dist - tau <= node.threshold
|
|
90
|
+
node.left.n_samples < k ? node : search(q, node.left, k, tau)
|
|
87
91
|
else
|
|
88
|
-
|
|
89
|
-
node.right.n_samples < k ? node : search(q, node.right, k, tau)
|
|
90
|
-
elsif dist - tau <= node.threshold
|
|
91
|
-
node.left.n_samples < k ? node : search(q, node.left, k, tau)
|
|
92
|
-
else
|
|
93
|
-
node
|
|
94
|
-
end
|
|
92
|
+
node
|
|
95
93
|
end
|
|
96
94
|
# :nocov:
|
|
97
95
|
end
|
|
@@ -54,6 +54,39 @@ module Rumale
|
|
|
54
54
|
err_mat.class.maximum(err_mat, 0)
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
+
# Calculate the pairwise cosine simlarities between x and y.
|
|
58
|
+
#
|
|
59
|
+
# @param x [Numo::DFloat] (shape: [n_samples_x, n_features])
|
|
60
|
+
# @param y [Numo::DFloat] (shape: [n_samples_y, n_features])
|
|
61
|
+
# @return [Numo::DFloat] (shape: [n_samples_x, n_samples_x] or [n_samples_x, n_samples_y] if y is given)
|
|
62
|
+
def cosine_similarity(x, y = nil)
|
|
63
|
+
y_not_given = y.nil?
|
|
64
|
+
x = Rumale::Validation.check_convert_sample_array(x)
|
|
65
|
+
y = Rumale::Validation.check_convert_sample_array(y) unless y_not_given
|
|
66
|
+
x_norm = Numo::NMath.sqrt((x**2).sum(1))
|
|
67
|
+
x_norm[x_norm.eq(0)] = 1
|
|
68
|
+
x /= x_norm.expand_dims(1)
|
|
69
|
+
if y_not_given
|
|
70
|
+
x.dot(x.transpose)
|
|
71
|
+
else
|
|
72
|
+
y_norm = Numo::NMath.sqrt((y**2).sum(1))
|
|
73
|
+
y_norm[y_norm.eq(0)] = 1
|
|
74
|
+
y /= y_norm.expand_dims(1)
|
|
75
|
+
x.dot(y.transpose)
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Calculate the pairwise cosine distances between x and y.
|
|
80
|
+
#
|
|
81
|
+
# @param x [Numo::DFloat] (shape: [n_samples_x, n_features])
|
|
82
|
+
# @param y [Numo::DFloat] (shape: [n_samples_y, n_features])
|
|
83
|
+
# @return [Numo::DFloat] (shape: [n_samples_x, n_samples_x] or [n_samples_x, n_samples_y] if y is given)
|
|
84
|
+
def cosine_distance(x, y = nil)
|
|
85
|
+
dist_mat = 1 - cosine_similarity(x, y)
|
|
86
|
+
dist_mat[dist_mat.diag_indices] = 0 if y.nil?
|
|
87
|
+
dist_mat.clip(0, 2)
|
|
88
|
+
end
|
|
89
|
+
|
|
57
90
|
# Calculate the rbf kernel between x and y.
|
|
58
91
|
#
|
|
59
92
|
# @param x [Numo::DFloat] (shape: [n_samples_x, n_features])
|
data/lib/rumale/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rumale
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.18.
|
|
4
|
+
version: 0.18.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- yoshoku
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-04-
|
|
11
|
+
date: 2020-04-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: numo-narray
|
|
@@ -180,8 +180,6 @@ files:
|
|
|
180
180
|
- LICENSE.txt
|
|
181
181
|
- README.md
|
|
182
182
|
- Rakefile
|
|
183
|
-
- bin/console
|
|
184
|
-
- bin/setup
|
|
185
183
|
- ext/rumale/extconf.rb
|
|
186
184
|
- ext/rumale/rumale.c
|
|
187
185
|
- ext/rumale/rumale.h
|
data/bin/console
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
require 'bundler/setup'
|
|
4
|
-
require 'rumale'
|
|
5
|
-
|
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
|
8
|
-
|
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
10
|
-
# require 'pry'
|
|
11
|
-
# Pry.start
|
|
12
|
-
|
|
13
|
-
require 'irb'
|
|
14
|
-
IRB.start(__FILE__)
|