numo-liblinear 0.2.0 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3bf71a14ccac359b6dffce32a5a5d3c784ef9efa
4
- data.tar.gz: 6af9f95c6b28c11b06fc0b10628a37e9397564c5
3
+ metadata.gz: 0ae7bd5566c47d6b045d596945bf7b4b84955b22
4
+ data.tar.gz: 13dc445acfcf11c6097dedbbf25544f19810cb60
5
5
  SHA512:
6
- metadata.gz: 18e64c5d487cab2636216425e45fd8eeaefa0f14026068d3678f0d8d643aea00acf867aa64ba510a62d4c343408a9e22bace2a0347a7b7aba7ddd872f2bbc579
7
- data.tar.gz: 43e16f69a931aab7a45163f1909e307f3334ef88f4e45ed79e5513b288804d5c0dfcbb92ef79642bb7c40e70bcdffe6f47548a2cad10351da3585dd48f0a84db
6
+ metadata.gz: 4dac8c681d092896a0d1947ed3374d4400ea224c3bc18c4fd2ebfa65aa504181e7c01f3ffb68452d92bb22bbe54fc61e831b9bc7197da26cf3908df8b59d9fc3
7
+ data.tar.gz: 9b2a82a5a087a1f86113c10be3a11880b03357bb9e3b91191291f2824e26c672c542a7401a69638aefc3ef36a7bcee51bbdfcebad010f0f50c66460aa5e99fac
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
+ # 0.3.0
2
+ - Add random_seed parameter for specifying seed to give to srand function.
3
+ - Several documentation improvements.
4
+
1
5
  # 0.2.0
2
- - Add valation of method parameters.
6
+ - Add validation of method parameters.
3
7
  - Several documentation improvements.
4
8
 
5
9
  # 0.1.0
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![Build Status](https://travis-ci.org/yoshoku/numo-liblinear.svg?branch=master)](https://travis-ci.org/yoshoku/numo-liblinear)
4
4
  [![Gem Version](https://badge.fury.io/rb/numo-liblinear.svg)](https://badge.fury.io/rb/numo-liblinear)
5
5
  [![BSD 3-Clause License](https://img.shields.io/badge/License-BSD%203--Clause-orange.svg)](https://github.com/yoshoku/numo-liblinear/blob/master/LICENSE.txt)
6
- [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](https://www.rubydoc.info/gems/numo-liblinear/0.2.0)
6
+ [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](https://www.rubydoc.info/gems/numo-liblinear/0.3.0)
7
7
 
8
8
  Numo::Liblinear is a Ruby gem binding to the [LIBLINEAR](https://www.csie.ntu.edu.tw/~cjlin/liblinear/) library.
9
9
  LIBLINEAR is one of the famous libraries for large-scale regularized linear classification and regression.
@@ -153,6 +153,27 @@ Predict labels.
153
153
  Accuracy: 87.9 %
154
154
  ```
155
155
 
156
+ ## Note
157
+ The hyperparemter of LIBLINEAR is given with Ruby Hash on Numo::Liblinear.
158
+ The hash key of hyperparameter and its meaning match the struct parameter of LIBLINEAR.
159
+ The parameter is detailed in [LIBLINEAR README](https://github.com/cjlin1/liblinear/blob/master/README)
160
+
161
+ ```ruby
162
+ param = {
163
+ solver_type: # [Integer] Type of Solver
164
+ Numo::Liblinear::SolverType::L2R_L2LOSS_SVC_DUAL,
165
+ eps: 0.01, # [Float] Stopping criterion
166
+ C: 1, # [Float] Cost of constraints violation.
167
+ nr_weight: 3, # [Integer] Number of weights.
168
+ weight_label: # [Numo::Int32] Labels to add weight.
169
+ Numo::Int32[0, 1, 2],
170
+ weight: # [Numo::DFloat] Weight values.
171
+ Numo::DFloat[0.4, 0.4, 0.2],
172
+ p: 0.1, # [Float] Sensitiveness of loss of support vector regression.
173
+ random_seed: 1 # [Integer/Nil] Random seed
174
+ }
175
+ ```
176
+
156
177
  ## Development
157
178
 
158
179
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -16,6 +16,28 @@ void print_null(const char *s) {}
16
16
  * @param y [Numo::DFloat] (shape: [n_samples]) The labels or target values for samples.
17
17
  * @param param [Hash] The parameters of a model.
18
18
  *
19
+ * @example
20
+ * require 'numo/liblinear'
21
+ *
22
+ * # Prepare training dataset.
23
+ * x = Numo::DFloat[[-0.8, 1.0], [-0.5, 0.8], [0.9, -0.8], [0.8, -0.7]]
24
+ * y = Numo::Int32[-1, -1, 1, 1]
25
+ *
26
+ * # Train L2-regularized L2-loss support vector classifier.
27
+ * param = {
28
+ * solver_type: Numo::Liblinear::SolverType::L2R_L2LOSS_SVC_DUAL,
29
+ * C: 0.1,
30
+ * random_seed: 1
31
+ * }
32
+ * model = Numo::Liblinear.train(x, y, param)
33
+ *
34
+ * # Predict labels of test data.
35
+ * x_test = Numo::DFloat[[-0.7, 0.9], [0.5, -0.4]]
36
+ * result = Numo::Liblinear.predict(x_test, param, model)
37
+ * p result
38
+ * # Numo::DFloat#shape=[2]
39
+ * # [-1, 1]
40
+ *
19
41
  * @raise [ArgumentError] If the sample array is not 2-dimensional, the label array is not 1-dimensional,
20
42
  * the sample array and label array do not have the same number of samples, or
21
43
  * the hyperparameter has an invalid value, this error is raised.
@@ -30,6 +52,7 @@ VALUE numo_liblinear_train(VALUE self, VALUE x_val, VALUE y_val, VALUE param_has
30
52
  narray_t* x_nary;
31
53
  narray_t* y_nary;
32
54
  char* err_msg;
55
+ VALUE random_seed;
33
56
  VALUE model_hash;
34
57
 
35
58
  if (CLASS_OF(x_val) != numo_cDFloat) {
@@ -60,6 +83,11 @@ VALUE numo_liblinear_train(VALUE self, VALUE x_val, VALUE y_val, VALUE param_has
60
83
  return Qnil;
61
84
  }
62
85
 
86
+ random_seed = rb_hash_aref(param_hash, ID2SYM(rb_intern("random_seed")));
87
+ if (!NIL_P(random_seed)) {
88
+ srand(NUM2UINT(random_seed));
89
+ }
90
+
63
91
  param = rb_hash_to_parameter(param_hash);
64
92
  problem = dataset_to_problem(x_val, y_val);
65
93
 
@@ -107,6 +135,7 @@ VALUE numo_liblinear_cross_validation(VALUE self, VALUE x_val, VALUE y_val, VALU
107
135
  narray_t* x_nary;
108
136
  narray_t* y_nary;
109
137
  char* err_msg;
138
+ VALUE random_seed;
110
139
  struct problem* problem;
111
140
  struct parameter* param;
112
141
 
@@ -138,6 +167,11 @@ VALUE numo_liblinear_cross_validation(VALUE self, VALUE x_val, VALUE y_val, VALU
138
167
  return Qnil;
139
168
  }
140
169
 
170
+ random_seed = rb_hash_aref(param_hash, ID2SYM(rb_intern("random_seed")));
171
+ if (!NIL_P(random_seed)) {
172
+ srand(NUM2UINT(random_seed));
173
+ }
174
+
141
175
  param = rb_hash_to_parameter(param_hash);
142
176
  problem = dataset_to_problem(x_val, y_val);
143
177
 
@@ -3,6 +3,6 @@
3
3
  module Numo
4
4
  module Liblinear
5
5
  # The version of Numo::Liblienar you are using.
6
- VERSION = '0.2.0'
6
+ VERSION = '0.3.0'
7
7
  end
8
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: numo-liblinear
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - yoshoku
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-15 00:00:00.000000000 Z
11
+ date: 2019-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-narray