rumale-svm 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
- SHA1:
3
- metadata.gz: 94a681354e720d47b0efe86bb2833b4ecdb1c3ff
4
- data.tar.gz: 050ae3bb322c3a89ebbceb1b5e114988738a9404
2
+ SHA256:
3
+ metadata.gz: e2fa12724b67f4cc5be042e64a8d29284e2292f23a5b13031e4b2ee33397285a
4
+ data.tar.gz: 453907d44a6113bf65531ec39e9d6da219bd1c2d0822cc6c72a1188e1b1e0b5e
5
5
  SHA512:
6
- metadata.gz: 3fe3c396ce596b589b508ecbce62258f14ef3733eb26d9d5829bad81c4bba2380fbf143178e1daabf0d9f523118099a0d56ed285bc5407da1c6af10e56283e23
7
- data.tar.gz: fa78aa2cb873c8246b9ddc3c75063ae00ba9acf8c644d87b33900e16a813b870f2cffde7159625e695a1c0a3874d48a9302dca93e3670e25d05ba0caa180656c
6
+ metadata.gz: 490675646f497293d10112605ab1d5dcbc1a69a21e67f2712b304b89d7e542e9894358e536dec4811e04ead3bb94fbd77c5273a7e3464cc883e9e50e8212af0b
7
+ data.tar.gz: 9ccac4d7d7cf56deac34f9c9c731e3b6c455df65ca7349ed0634c37106ea0e6fe42dec243459f966e87c3aadf72525211fa4c365925c59f6089024689968c9be
@@ -0,0 +1,107 @@
1
+ require:
2
+ - rubocop-performance
3
+ - rubocop-rspec
4
+
5
+ AllCops:
6
+ TargetRubyVersion: 2.4
7
+ DisplayCopNames: true
8
+ DisplayStyleGuide: true
9
+ Exclude:
10
+ - 'bin/*'
11
+ - 'rumale-svm.gemspec'
12
+ - 'Rakefile'
13
+ - 'Gemfile'
14
+
15
+ Layout/EmptyLineAfterGuardClause:
16
+ Enabled: false
17
+
18
+ Layout/EmptyLinesAroundAttributeAccessor:
19
+ Enabled: true
20
+
21
+ Layout/LineLength:
22
+ Max: 145
23
+ IgnoredPatterns: ['(\A|\s)#']
24
+
25
+ Layout/SpaceAroundMethodCallOperator:
26
+ Enabled: true
27
+
28
+ Lint/DeprecatedOpenSSLConstant:
29
+ Enabled: true
30
+
31
+ Lint/RaiseException:
32
+ Enabled: true
33
+
34
+ Lint/StructNewOverride:
35
+ Enabled: true
36
+
37
+ Metrics/ModuleLength:
38
+ Max: 200
39
+
40
+ Metrics/ClassLength:
41
+ Max: 200
42
+
43
+ Metrics/MethodLength:
44
+ Max: 40
45
+
46
+ Metrics/AbcSize:
47
+ Max: 60
48
+
49
+ Metrics/CyclomaticComplexity:
50
+ Max: 16
51
+
52
+ Metrics/PerceivedComplexity:
53
+ Max: 16
54
+
55
+ Metrics/BlockLength:
56
+ Max: 40
57
+ Exclude:
58
+ - 'spec/**/*'
59
+
60
+ Metrics/ParameterLists:
61
+ Max: 12
62
+
63
+ Naming/MethodParameterName:
64
+ Enabled: false
65
+
66
+ Naming/ConstantName:
67
+ Enabled: false
68
+
69
+ Security/MarshalLoad:
70
+ Enabled: false
71
+
72
+ Style/Documentation:
73
+ Enabled: false
74
+
75
+ Style/ExponentialNotation:
76
+ Enabled: true
77
+
78
+ Style/HashEachMethods:
79
+ Enabled: true
80
+
81
+ Style/HashTransformKeys:
82
+ Enabled: true
83
+
84
+ Style/HashTransformValues:
85
+ Enabled: true
86
+
87
+ Style/SlicingWithRange:
88
+ Enabled: true
89
+
90
+ Style/FormatStringToken:
91
+ Enabled: false
92
+
93
+ Style/NumericLiterals:
94
+ Enabled: false
95
+
96
+ RSpec/MultipleExpectations:
97
+ Enabled: false
98
+
99
+ RSpec/ExampleLength:
100
+ Max: 40
101
+
102
+ RSpec/InstanceVariable:
103
+ Enabled: false
104
+
105
+ RSpec/LeakyConstantDeclaration:
106
+ Enabled: false
107
+
@@ -8,6 +8,7 @@ rvm:
8
8
  - '2.4'
9
9
  - '2.5'
10
10
  - '2.6'
11
+ - '2.7'
11
12
 
12
13
  before_install:
13
14
  - gem install bundler -v 2.0.2
@@ -1,3 +1,7 @@
1
+ # 0.3.0
2
+ - Fix to raise error when calling prediction method before training model.
3
+ - Fix some config files.
4
+
1
5
  # 0.2.0
2
6
  - Supported the new Rumale's validation:
3
7
  - Fix to use new numeric validation for hyperparameter values.
data/Gemfile CHANGED
@@ -1,4 +1,8 @@
1
- source "https://rubygems.org"
1
+ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in rumale-svm.gemspec
4
4
  gemspec
5
+
6
+ gem 'coveralls', '~> 0.8'
7
+ gem 'rake', '~> 12.0'
8
+ gem 'rspec', '~> 3.0'
@@ -1,4 +1,4 @@
1
- Copyright (c) 2019 Atsushi Tatsuma
1
+ Copyright (c) 2019-2020 Atsushi Tatsuma
2
2
  All rights reserved.
3
3
 
4
4
  Redistribution and use in source and binary forms, with or without
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Coverage Status](https://coveralls.io/repos/github/yoshoku/rumale-svm/badge.svg?branch=master)](https://coveralls.io/github/yoshoku/rumale-svm?branch=master)
5
5
  [![Gem Version](https://badge.fury.io/rb/rumale-svm.svg)](https://badge.fury.io/rb/rumale-svm)
6
6
  [![BSD 3-Clause License](https://img.shields.io/badge/License-BSD%203--Clause-orange.svg)](https://github.com/yoshoku/rumale-svm/blob/master/LICENSE.txt)
7
- [![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](https://yoshoku.github.io/rumale-svm/doc/)
7
+ [![Documentation](http://img.shields.io/badge/api-reference-blue.svg)](https://yoshoku.github.io/rumale-svm/doc/)
8
8
 
9
9
  Rumale::SVM provides support vector machine algorithms in
10
10
  [LIBSVM](https://www.csie.ntu.edu.tw/~cjlin/libsvm/) and [LIBLINEAR](https://www.csie.ntu.edu.tw/~cjlin/liblinear/)
@@ -30,6 +30,10 @@ Or install it yourself as:
30
30
 
31
31
  $ gem install rumale-svm
32
32
 
33
+ ## Documentation
34
+
35
+ - [Rumale::SVM API Documentation](https://yoshoku.github.io/rumale-svm/doc/)
36
+
33
37
  ## Usage
34
38
  Download pendigits dataset from [LIBSVM DATA](https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/) web page.
35
39
 
@@ -85,6 +85,7 @@ module Rumale
85
85
  # @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to compute the scores.
86
86
  # @return [Numo::DFloat] (shape: [n_samples, n_classes]) Confidence score per sample.
87
87
  def decision_function(x)
88
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
88
89
  x = check_convert_sample_array(x)
89
90
  xx = fit_bias? ? expand_feature(x) : x
90
91
  Numo::Liblinear.decision_function(xx, liblinear_params, @model)
@@ -95,6 +96,7 @@ module Rumale
95
96
  # @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to predict the labels.
96
97
  # @return [Numo::Int32] (shape: [n_samples]) Predicted class label per sample.
97
98
  def predict(x)
99
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
98
100
  x = check_convert_sample_array(x)
99
101
  xx = fit_bias? ? expand_feature(x) : x
100
102
  Numo::Int32.cast(Numo::Liblinear.predict(xx, liblinear_params, @model))
@@ -106,6 +108,7 @@ module Rumale
106
108
  # @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to predict the probailities.
107
109
  # @return [Numo::DFloat] (shape: [n_samples, n_classes]) Predicted probability of each class per sample.
108
110
  def predict_proba(x)
111
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
109
112
  x = check_convert_sample_array(x)
110
113
  if binary_class?
111
114
  probs = Numo::DFloat.zeros(x.shape[0], 2)
@@ -232,6 +235,10 @@ module Rumale
232
235
  def labels
233
236
  @model[:label]
234
237
  end
238
+
239
+ def trained?
240
+ !@model.nil?
241
+ end
235
242
  end
236
243
  end
237
244
  end
@@ -79,6 +79,7 @@ module Rumale
79
79
  # @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to predict the labels.
80
80
  # @return [Numo::DFloat] (shape: [n_samples]) Predicted value per sample.
81
81
  def predict(x)
82
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
82
83
  x = check_convert_sample_array(x)
83
84
  xx = fit_bias? ? expand_feature(x) : x
84
85
  Numo::Liblinear.predict(xx, liblinear_params, @model)
@@ -145,6 +146,10 @@ module Rumale
145
146
  def bias_scale
146
147
  @params[:bias_scale]
147
148
  end
149
+
150
+ def trained?
151
+ !@model.nil?
152
+ end
148
153
  end
149
154
  end
150
155
  end
@@ -77,6 +77,7 @@ module Rumale
77
77
  # @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to compute the scores.
78
78
  # @return [Numo::DFloat] (shape: [n_samples, n_classes]) Confidence score per sample.
79
79
  def decision_function(x)
80
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
80
81
  x = check_convert_sample_array(x)
81
82
  xx = fit_bias? ? expand_feature(x) : x
82
83
  Numo::Liblinear.decision_function(xx, liblinear_params, @model)
@@ -87,6 +88,7 @@ module Rumale
87
88
  # @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to predict the labels.
88
89
  # @return [Numo::Int32] (shape: [n_samples]) Predicted class label per sample.
89
90
  def predict(x)
91
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
90
92
  x = check_convert_sample_array(x)
91
93
  xx = fit_bias? ? expand_feature(x) : x
92
94
  Numo::Int32.cast(Numo::Liblinear.predict(xx, liblinear_params, @model))
@@ -98,6 +100,7 @@ module Rumale
98
100
  # @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to predict the probailities.
99
101
  # @return [Numo::DFloat] (shape: [n_samples, n_classes]) Predicted probability of each class per sample.
100
102
  def predict_proba(x)
103
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
101
104
  x = check_convert_sample_array(x)
102
105
  xx = fit_bias? ? expand_feature(x) : x
103
106
  Numo::Liblinear.predict_proba(xx, liblinear_params, @model)
@@ -184,6 +187,10 @@ module Rumale
184
187
  def n_features
185
188
  @model[:nr_feature]
186
189
  end
190
+
191
+ def trained?
192
+ !@model.nil?
193
+ end
187
194
  end
188
195
  end
189
196
  end
@@ -71,6 +71,7 @@ module Rumale
71
71
  # If the kernel is 'precomputed', the shape of x must be [n_samples, n_training_samples].
72
72
  # @return [Numo::DFloat] (shape: [n_samples, n_classes]) Confidence score per sample.
73
73
  def decision_function(x)
74
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
74
75
  x = check_convert_sample_array(x)
75
76
  xx = precomputed_kernel? ? add_index_col(x) : x
76
77
  Numo::Libsvm.decision_function(xx, libsvm_params, @model)
@@ -82,6 +83,7 @@ module Rumale
82
83
  # If the kernel is 'precomputed', the shape of x must be [n_samples, n_training_samples].
83
84
  # @return [Numo::Int32] (shape: [n_samples]) Predicted class label per sample.
84
85
  def predict(x)
86
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
85
87
  x = check_convert_sample_array(x)
86
88
  xx = precomputed_kernel? ? add_index_col(x) : x
87
89
  Numo::Int32.cast(Numo::Libsvm.predict(xx, libsvm_params, @model))
@@ -94,6 +96,7 @@ module Rumale
94
96
  # If the kernel is 'precomputed', the shape of x must be [n_samples, n_training_samples].
95
97
  # @return [Numo::DFloat] (shape: [n_samples, n_classes]) Predicted probability of each class per sample.
96
98
  def predict_proba(x)
99
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
97
100
  x = check_convert_sample_array(x)
98
101
  xx = precomputed_kernel? ? add_index_col(x) : x
99
102
  Numo::Libsvm.predict_proba(xx, libsvm_params, @model)
@@ -188,6 +191,10 @@ module Rumale
188
191
  res[:eps] = res.delete(:tol)
189
192
  res
190
193
  end
194
+
195
+ def trained?
196
+ !@model.nil?
197
+ end
191
198
  end
192
199
  end
193
200
  end
@@ -69,6 +69,7 @@ module Rumale
69
69
  # If the kernel is 'precomputed', the shape of x must be [n_samples, n_training_samples].
70
70
  # @return [Numo::DFloat] (shape: [n_samples]) Predicted value per sample.
71
71
  def predict(x)
72
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
72
73
  x = check_convert_sample_array(x)
73
74
  xx = precomputed_kernel? ? add_index_col(x) : x
74
75
  Numo::Libsvm.predict(xx, libsvm_params, @model)
@@ -151,6 +152,10 @@ module Rumale
151
152
  res[:eps] = res.delete(:tol)
152
153
  res
153
154
  end
155
+
156
+ def trained?
157
+ !@model.nil?
158
+ end
154
159
  end
155
160
  end
156
161
  end
@@ -67,6 +67,7 @@ module Rumale
67
67
  # If the kernel is 'precomputed', the shape of x must be [n_samples, n_training_samples].
68
68
  # @return [Numo::DFloat] (shape: [n_samples, n_classes]) Confidence score per sample.
69
69
  def decision_function(x)
70
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
70
71
  x = check_convert_sample_array(x)
71
72
  Numo::Libsvm.decision_function(x, libsvm_params, @model)
72
73
  end
@@ -77,6 +78,7 @@ module Rumale
77
78
  # If the kernel is 'precomputed', the shape of x must be [n_samples, n_training_samples].
78
79
  # @return [Numo::Int32] (shape: [n_samples]) Predicted label per sample.
79
80
  def predict(x)
81
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
80
82
  x = check_convert_sample_array(x)
81
83
  Numo::Int32.cast(Numo::Libsvm.predict(x, libsvm_params, @model))
82
84
  end
@@ -145,6 +147,10 @@ module Rumale
145
147
  res[:eps] = res.delete(:tol)
146
148
  res
147
149
  end
150
+
151
+ def trained?
152
+ !@model.nil?
153
+ end
148
154
  end
149
155
  end
150
156
  end
@@ -71,6 +71,7 @@ module Rumale
71
71
  # If the kernel is 'precomputed', the shape of x must be [n_samples, n_training_samples].
72
72
  # @return [Numo::DFloat] (shape: [n_samples, n_classes]) Confidence score per sample.
73
73
  def decision_function(x)
74
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
74
75
  x = check_convert_sample_array(x)
75
76
  xx = precomputed_kernel? ? add_index_col(x) : x
76
77
  Numo::Libsvm.decision_function(xx, libsvm_params, @model)
@@ -82,6 +83,7 @@ module Rumale
82
83
  # If the kernel is 'precomputed', the shape of x must be [n_samples, n_training_samples].
83
84
  # @return [Numo::Int32] (shape: [n_samples]) Predicted class label per sample.
84
85
  def predict(x)
86
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
85
87
  x = check_convert_sample_array(x)
86
88
  xx = precomputed_kernel? ? add_index_col(x) : x
87
89
  Numo::Int32.cast(Numo::Libsvm.predict(xx, libsvm_params, @model))
@@ -94,6 +96,7 @@ module Rumale
94
96
  # If the kernel is 'precomputed', the shape of x must be [n_samples, n_training_samples].
95
97
  # @return [Numo::DFloat] (shape: [n_samples, n_classes]) Predicted probability of each class per sample.
96
98
  def predict_proba(x)
99
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
97
100
  x = check_convert_sample_array(x)
98
101
  xx = precomputed_kernel? ? add_index_col(x) : x
99
102
  Numo::Libsvm.predict_proba(xx, libsvm_params, @model)
@@ -189,6 +192,10 @@ module Rumale
189
192
  res[:eps] = res.delete(:tol)
190
193
  res
191
194
  end
195
+
196
+ def trained?
197
+ !@model.nil?
198
+ end
192
199
  end
193
200
  end
194
201
  end
@@ -72,6 +72,7 @@ module Rumale
72
72
  # If the kernel is 'precomputed', the shape of x must be [n_samples, n_training_samples].
73
73
  # @return [Numo::DFloat] (shape: [n_samples]) Predicted value per sample.
74
74
  def predict(x)
75
+ raise "#{self.class.name}\##{__method__} expects to be called after training the model with the fit method." unless trained?
75
76
  x = check_convert_sample_array(x)
76
77
  xx = precomputed_kernel? ? add_index_col(x) : x
77
78
  Numo::Libsvm.predict(xx, libsvm_params, @model)
@@ -156,6 +157,10 @@ module Rumale
156
157
  res[:eps] = res.delete(:tol)
157
158
  res
158
159
  end
160
+
161
+ def trained?
162
+ !@model.nil?
163
+ end
159
164
  end
160
165
  end
161
166
  end
@@ -5,6 +5,6 @@ module Rumale
5
5
  # This module consists of Rumale interfaces for suppor vector machine algorithms with LIBSVM and LIBLINEAR.
6
6
  module SVM
7
7
  # The version of Rumale-SVM you are using.
8
- VERSION = '0.2.0'
8
+ VERSION = '0.3.0'
9
9
  end
10
10
  end
@@ -34,8 +34,4 @@ Gem::Specification.new do |spec|
34
34
  spec.add_runtime_dependency 'numo-liblinear', '~> 1.0'
35
35
  spec.add_runtime_dependency 'numo-libsvm', '~> 1.0'
36
36
  spec.add_runtime_dependency 'rumale', '~> 0.14'
37
- spec.add_development_dependency 'bundler', '~> 2.0'
38
- spec.add_development_dependency 'coveralls', '~> 0.8'
39
- spec.add_development_dependency 'rake', '~> 10.0'
40
- spec.add_development_dependency 'rspec', '~> 3.0'
41
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rumale-svm
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
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-11-18 00:00:00.000000000 Z
11
+ date: 2020-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-liblinear
@@ -52,62 +52,6 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.14'
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '2.0'
69
- - !ruby/object:Gem::Dependency
70
- name: coveralls
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '0.8'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '0.8'
83
- - !ruby/object:Gem::Dependency
84
- name: rake
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '10.0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '10.0'
97
- - !ruby/object:Gem::Dependency
98
- name: rspec
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '3.0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '3.0'
111
55
  description: 'Rumale-SVM provides support vector machine algorithms of LIBSVM and
112
56
  LIBLINEAR with Rumale interface.
113
57
 
@@ -122,6 +66,7 @@ files:
122
66
  - ".github/workflows/build.yml"
123
67
  - ".gitignore"
124
68
  - ".rspec"
69
+ - ".rubocop.yml"
125
70
  - ".travis.yml"
126
71
  - CHANGELOG.md
127
72
  - CODE_OF_CONDUCT.md
@@ -150,7 +95,7 @@ metadata:
150
95
  source_code_uri: https://github.com/yoshoku/rumale-svm
151
96
  changelog_uri: https://github.com/yoshoku/rumale-svm/blob/master/CHANGELOG.md
152
97
  documentation_uri: https://yoshoku.github.io/rumale-svm/doc/
153
- post_install_message:
98
+ post_install_message:
154
99
  rdoc_options: []
155
100
  require_paths:
156
101
  - lib
@@ -165,9 +110,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
110
  - !ruby/object:Gem::Version
166
111
  version: '0'
167
112
  requirements: []
168
- rubyforge_project:
169
- rubygems_version: 2.6.14.4
170
- signing_key:
113
+ rubygems_version: 3.1.2
114
+ signing_key:
171
115
  specification_version: 4
172
116
  summary: Rumale-SVM provides support vector machine algorithms of LIBSVM and LIBLINEAR
173
117
  with Rumale interface.