diff --git a/.rspec b/.rspec index 8c18f1ab..34c5164d 100644 --- a/.rspec +++ b/.rspec @@ -1,2 +1,3 @@ --format documentation --color +--require spec_helper diff --git a/.rubocop.yml b/.rubocop.yml index bc13d45d..21951704 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,7 +1,7 @@ inherit_from: .rubocop_todo.yml AllCops: - TargetRubyVersion: 2.2 + TargetRubyVersion: 2.3 DisplayCopNames: true DisplayStyleGuide: true diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 7d7c3883..7125b286 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -10,7 +10,7 @@ # Cop supports --auto-correct. Layout/ClosingHeredocIndentation: Exclude: - - 'svmkit.gemspec' + - 'rumale.gemspec' # Offense count: 2 # Cop supports --auto-correct. @@ -18,13 +18,13 @@ Layout/ClosingHeredocIndentation: # SupportedStyles: auto_detection, squiggly, active_support, powerpack, unindent Layout/IndentHeredoc: Exclude: - - 'svmkit.gemspec' + - 'rumale.gemspec' # Offense count: 1 # Cop supports --auto-correct. Layout/LeadingBlankLines: Exclude: - - 'svmkit.gemspec' + - 'rumale.gemspec' # Offense count: 1 # Configuration parameters: CountComments, ExcludedMethods. diff --git a/.travis.yml b/.travis.yml index 2c6d7819..36cc6e76 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,8 +3,6 @@ os: linux dist: trusty language: ruby rvm: - - 2.1 - - 2.2 - 2.3 - 2.4 - 2.5 diff --git a/CHANGELOG.md b/CHANGELOG.md index f963a873..54bf9c1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,6 @@ # 0.8.0 -## Information -- Rename the project to [Rumale](https://github.com/yoshoku/Rumale). - - SVMKit has been deprecated and has been renamed to Rumale. SVMKit will release only bugfix. - ## Breaking changes +- Rename SVMKit to Rumale. - Rename SGDLienareEstimator class to BaseLienarModel class. - Add data type option to load_libsvm_file method. By default, the method represents the feature with Numo::DFloat. diff --git a/Gemfile b/Gemfile index 5cf72650..f8d706e4 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,4 @@ source 'https://rubygems.org' -git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } - -# Specify your gem's dependencies in svmkit.gemspec +# Specify your gem's dependencies in rumale.gemspec gemspec diff --git a/README.md b/README.md index f5b702b4..bd0c51d5 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,27 @@ -# SVMKit - -[![Build Status](https://travis-ci.org/yoshoku/svmkit.svg?branch=master)](https://travis-ci.org/yoshoku/svmkit) -[![Coverage Status](https://coveralls.io/repos/github/yoshoku/svmkit/badge.svg?branch=master)](https://coveralls.io/github/yoshoku/svmkit?branch=master) -[![Gem Version](https://badge.fury.io/rb/svmkit.svg)](https://badge.fury.io/rb/svmkit) -[![BSD 2-Clause License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://github.com/yoshoku/svmkit/blob/master/LICENSE.txt) -[![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](https://www.rubydoc.info/gems/svmkit/) - -SVMKit has been deprecated and has been renamed to [Rumale](https://github.com/yoshoku/rumale). -Initially, I started developing SVMKit as an experimental library aiming at implementing SVM in Ruby. -However, since I added many other machine learning algorithms to SVMKit, I decided to change the library name. -SVMKit will continue releasing for bugfix but will not add new features. - -SVMKit is a machine learninig library in Ruby. -SVMKit provides machine learning algorithms with interfaces similar to Scikit-Learn in Python. -SVMKit supports Linear / Kernel Support Vector Machine, +# Rumale + +[![Build Status](https://travis-ci.org/yoshoku/rumale.svg?branch=master)](https://travis-ci.org/yoshoku/rumale) +[![Coverage Status](https://coveralls.io/repos/github/yoshoku/rumale/badge.svg?branch=master)](https://coveralls.io/github/yoshoku/rumale?branch=master) +[![Gem Version](https://badge.fury.io/rb/rumale.svg)](https://badge.fury.io/rb/rumale) +[![BSD 2-Clause License](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](https://github.com/yoshoku/rumale/blob/master/LICENSE.txt) +[![Documentation](http://img.shields.io/badge/docs-rdoc.info-blue.svg)](https://www.rubydoc.info/gems/rumale/) + +Rumale (**Ru**by **ma**chine **le**arning) is a machine learninig library in Ruby. +Rumale provides machine learning algorithms with interfaces similar to Scikit-Learn in Python. +Rumale supports Linear / Kernel Support Vector Machine, Logistic Regression, Linear Regression, Ridge, Lasso, Factorization Machine, Naive Bayes, Decision Tree, AdaBoost, Random Forest, K-nearest neighbor classifier, K-Means, DBSCAN, Principal Component Analysis, and Non-negative Matrix Factorization. +This project was formerly known as SVMKit. +If you use SVMKit, please replace `SVMKit` constants with `Rumale`. + ## Installation Add this line to your application's Gemfile: ```ruby -gem 'svmkit' +gem 'rumale' ``` And then execute: @@ -32,13 +30,13 @@ And then execute: Or install it yourself as: - $ gem install svmkit + $ gem install rumale ## Usage ### Example 1. Pendigits dataset classification -SVMKit provides function loading libsvm format dataset file. +Rumale provides function loading libsvm format dataset file. We start by downloading the pendigits dataset from LIBSVM Data web site. ```bash @@ -49,17 +47,17 @@ $ wget https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/pendig Training of the classifier with Linear SVM and RBF kernel feature map is the following code. ```ruby -require 'svmkit' +require 'rumale' # Load the training dataset. -samples, labels = SVMKit::Dataset.load_libsvm_file('pendigits') +samples, labels = Rumale::Dataset.load_libsvm_file('pendigits') # Map training data to RBF kernel feature space. -transformer = SVMKit::KernelApproximation::RBF.new(gamma: 0.0001, n_components: 1024, random_seed: 1) +transformer = Rumale::KernelApproximation::RBF.new(gamma: 0.0001, n_components: 1024, random_seed: 1) transformed = transformer.fit_transform(samples) # Train linear SVM classifier. -classifier = SVMKit::LinearModel::SVC.new(reg_param: 0.0001, max_iter: 1000, batch_size: 50, random_seed: 1) +classifier = Rumale::LinearModel::SVC.new(reg_param: 0.0001, max_iter: 1000, batch_size: 50, random_seed: 1) classifier.fit(transformed, labels) # Save the model. @@ -70,10 +68,10 @@ File.open('classifier.dat', 'wb') { |f| f.write(Marshal.dump(classifier)) } Classifying testing data with the trained classifier is the following code. ```ruby -require 'svmkit' +require 'rumale' # Load the testing dataset. -samples, labels = SVMKit::Dataset.load_libsvm_file('pendigits.t') +samples, labels = Rumale::Dataset.load_libsvm_file('pendigits.t') # Load the model. transformer = Marshal.load(File.binread('transformer.dat')) @@ -87,7 +85,7 @@ puts("Accuracy: %.1f%%" % (100.0 * classifier.score(transformed, labels))) # Other evaluating approach # results = classifier.predict(transformed) -# evaluator = SVMKit::EvaluationMeasure::Accuracy.new +# evaluator = Rumale::EvaluationMeasure::Accuracy.new # puts("Accuracy: %.1f%%" % (100.0 * evaluator.score(results, labels))) ``` @@ -102,18 +100,18 @@ Accuracy: 98.4% ### Example 2. Cross-validation ```ruby -require 'svmkit' +require 'rumale' # Load dataset. -samples, labels = SVMKit::Dataset.load_libsvm_file('pendigits') +samples, labels = Rumale::Dataset.load_libsvm_file('pendigits') # Define the estimator to be evaluated. -lr = SVMKit::LinearModel::LogisticRegression.new(reg_param: 0.0001, random_seed: 1) +lr = Rumale::LinearModel::LogisticRegression.new(reg_param: 0.0001, random_seed: 1) # Define the evaluation measure, splitting strategy, and cross validation. -ev = SVMKit::EvaluationMeasure::LogLoss.new -kf = SVMKit::ModelSelection::StratifiedKFold.new(n_splits: 5, shuffle: true, random_seed: 1) -cv = SVMKit::ModelSelection::CrossValidation.new(estimator: lr, splitter: kf, evaluator: ev) +ev = Rumale::EvaluationMeasure::LogLoss.new +kf = Rumale::ModelSelection::StratifiedKFold.new(n_splits: 5, shuffle: true, random_seed: 1) +cv = Rumale::ModelSelection::CrossValidation.new(estimator: lr, splitter: kf, evaluator: ev) # Perform 5-cross validation. report = cv.perform(samples, labels) @@ -126,19 +124,19 @@ puts("5-CV mean log-loss: %.3f" % mean_logloss) ### Example 3. Pipeline ```ruby -require 'svmkit' +require 'rumale' # Load dataset. -samples, labels = SVMKit::Dataset.load_libsvm_file('pendigits') +samples, labels = Rumale::Dataset.load_libsvm_file('pendigits') # Construct pipeline with kernel approximation and SVC. -rbf = SVMKit::KernelApproximation::RBF.new(gamma: 0.0001, n_components: 800, random_seed: 1) -svc = SVMKit::LinearModel::SVC.new(reg_param: 0.0001, max_iter: 1000, random_seed: 1) -pipeline = SVMKit::Pipeline::Pipeline.new(steps: { trns: rbf, clsf: svc }) +rbf = Rumale::KernelApproximation::RBF.new(gamma: 0.0001, n_components: 800, random_seed: 1) +svc = Rumale::LinearModel::SVC.new(reg_param: 0.0001, max_iter: 1000, random_seed: 1) +pipeline = Rumale::Pipeline::Pipeline.new(steps: { trns: rbf, clsf: svc }) # Define the splitting strategy and cross validation. -kf = SVMKit::ModelSelection::StratifiedKFold.new(n_splits: 5, shuffle: true, random_seed: 1) -cv = SVMKit::ModelSelection::CrossValidation.new(estimator: pipeline, splitter: kf) +kf = Rumale::ModelSelection::StratifiedKFold.new(n_splits: 5, shuffle: true, random_seed: 1) +cv = Rumale::ModelSelection::CrossValidation.new(estimator: pipeline, splitter: kf) # Perform 5-cross validation. report = cv.perform(samples, labels) @@ -163,7 +161,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To ## Contributing -Bug reports and pull requests are welcome on GitHub at https://github.com/yoshoku/svmkit. +Bug reports and pull requests are welcome on GitHub at https://github.com/yoshoku/Rumale. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. @@ -173,5 +171,5 @@ The gem is available as open source under the terms of the [BSD 2-clause License ## Code of Conduct -Everyone interacting in the SVMKit project’s codebases, issue trackers, -chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/yoshoku/svmkit/blob/master/CODE_OF_CONDUCT.md). +Everyone interacting in the Rumale project’s codebases, issue trackers, +chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/yoshoku/Rumale/blob/master/CODE_OF_CONDUCT.md). diff --git a/Rakefile b/Rakefile index 4c774a2b..93cb9430 100644 --- a/Rakefile +++ b/Rakefile @@ -3,4 +3,4 @@ require 'rspec/core/rake_task' RSpec::Core::RakeTask.new(:spec) -task default: :spec +task :default => :spec diff --git a/bin/console b/bin/console index df255d5e..d38d8244 100755 --- a/bin/console +++ b/bin/console @@ -1,14 +1,14 @@ #!/usr/bin/env ruby -require "bundler/setup" -require "svmkit" +require 'bundler/setup' +require 'rumale' # You can add fixtures and/or initialization code here to make experimenting # with your gem easier. You can also use a different console, if you like. # (If you use this, don't forget to add pry to your Gemfile!) -# require "pry" +# require 'pry' # Pry.start -require "irb" +require 'irb' IRB.start(__FILE__) diff --git a/lib/rumale.rb b/lib/rumale.rb new file mode 100644 index 00000000..6c696323 --- /dev/null +++ b/lib/rumale.rb @@ -0,0 +1,70 @@ +# frozen_string_literal: true + +require 'numo/narray' + +require 'rumale/version' +require 'rumale/validation' +require 'rumale/values' +require 'rumale/utils' +require 'rumale/pairwise_metric' +require 'rumale/dataset' +require 'rumale/probabilistic_output' +require 'rumale/base/base_estimator' +require 'rumale/base/classifier' +require 'rumale/base/regressor' +require 'rumale/base/cluster_analyzer' +require 'rumale/base/transformer' +require 'rumale/base/splitter' +require 'rumale/base/evaluator' +require 'rumale/optimizer/sgd' +require 'rumale/optimizer/rmsprop' +require 'rumale/optimizer/nadam' +require 'rumale/optimizer/yellow_fin' +require 'rumale/pipeline/pipeline' +require 'rumale/kernel_approximation/rbf' +require 'rumale/linear_model/base_linear_model' +require 'rumale/linear_model/svc' +require 'rumale/linear_model/svr' +require 'rumale/linear_model/logistic_regression' +require 'rumale/linear_model/linear_regression' +require 'rumale/linear_model/ridge' +require 'rumale/linear_model/lasso' +require 'rumale/kernel_machine/kernel_svc' +require 'rumale/polynomial_model/base_factorization_machine' +require 'rumale/polynomial_model/factorization_machine_classifier' +require 'rumale/polynomial_model/factorization_machine_regressor' +require 'rumale/multiclass/one_vs_rest_classifier' +require 'rumale/nearest_neighbors/k_neighbors_classifier' +require 'rumale/nearest_neighbors/k_neighbors_regressor' +require 'rumale/naive_bayes/naive_bayes' +require 'rumale/tree/node' +require 'rumale/tree/base_decision_tree' +require 'rumale/tree/decision_tree_classifier' +require 'rumale/tree/decision_tree_regressor' +require 'rumale/ensemble/ada_boost_classifier' +require 'rumale/ensemble/ada_boost_regressor' +require 'rumale/ensemble/random_forest_classifier' +require 'rumale/ensemble/random_forest_regressor' +require 'rumale/clustering/k_means' +require 'rumale/clustering/dbscan' +require 'rumale/decomposition/pca' +require 'rumale/decomposition/nmf' +require 'rumale/preprocessing/l2_normalizer' +require 'rumale/preprocessing/min_max_scaler' +require 'rumale/preprocessing/standard_scaler' +require 'rumale/preprocessing/label_encoder' +require 'rumale/preprocessing/one_hot_encoder' +require 'rumale/model_selection/k_fold' +require 'rumale/model_selection/stratified_k_fold' +require 'rumale/model_selection/cross_validation' +require 'rumale/model_selection/grid_search_cv' +require 'rumale/evaluation_measure/accuracy' +require 'rumale/evaluation_measure/precision' +require 'rumale/evaluation_measure/recall' +require 'rumale/evaluation_measure/f_score' +require 'rumale/evaluation_measure/log_loss' +require 'rumale/evaluation_measure/r2_score' +require 'rumale/evaluation_measure/mean_squared_error' +require 'rumale/evaluation_measure/mean_absolute_error' +require 'rumale/evaluation_measure/purity' +require 'rumale/evaluation_measure/normalized_mutual_information' diff --git a/lib/svmkit/base/base_estimator.rb b/lib/rumale/base/base_estimator.rb similarity index 78% rename from lib/svmkit/base/base_estimator.rb rename to lib/rumale/base/base_estimator.rb index 256d4e66..b94e39ca 100644 --- a/lib/svmkit/base/base_estimator.rb +++ b/lib/rumale/base/base_estimator.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -module SVMKit +module Rumale # This module consists of basic mix-in classes. module Base - # Base module for all estimators in SVMKit. + # Base module for all estimators in Rumale. module BaseEstimator # Return parameters about an estimator. # @return [Hash] diff --git a/lib/svmkit/base/classifier.rb b/lib/rumale/base/classifier.rb similarity index 82% rename from lib/svmkit/base/classifier.rb rename to lib/rumale/base/classifier.rb index 9470b989..6229882d 100644 --- a/lib/svmkit/base/classifier.rb +++ b/lib/rumale/base/classifier.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'svmkit/validation' -require 'svmkit/evaluation_measure/accuracy' +require 'rumale/validation' +require 'rumale/evaluation_measure/accuracy' -module SVMKit +module Rumale module Base - # Module for all classifiers in SVMKit. + # Module for all classifiers in Rumale. module Classifier include Validation @@ -28,7 +28,7 @@ def score(x, y) check_sample_array(x) check_label_array(y) check_sample_label_size(x, y) - evaluator = SVMKit::EvaluationMeasure::Accuracy.new + evaluator = Rumale::EvaluationMeasure::Accuracy.new evaluator.score(y, predict(x)) end end diff --git a/lib/svmkit/base/cluster_analyzer.rb b/lib/rumale/base/cluster_analyzer.rb similarity index 79% rename from lib/svmkit/base/cluster_analyzer.rb rename to lib/rumale/base/cluster_analyzer.rb index b4cb3225..0fbbe500 100644 --- a/lib/svmkit/base/cluster_analyzer.rb +++ b/lib/rumale/base/cluster_analyzer.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'svmkit/validation' -require 'svmkit/evaluation_measure/purity' +require 'rumale/validation' +require 'rumale/evaluation_measure/purity' -module SVMKit +module Rumale module Base - # Module for all clustering algorithms in SVMKit. + # Module for all clustering algorithms in Rumale. module ClusterAnalyzer include Validation @@ -23,7 +23,7 @@ def score(x, y) check_sample_array(x) check_label_array(y) check_sample_label_size(x, y) - evaluator = SVMKit::EvaluationMeasure::Purity.new + evaluator = Rumale::EvaluationMeasure::Purity.new evaluator.score(y, fit_predict(x)) end end diff --git a/lib/svmkit/base/evaluator.rb b/lib/rumale/base/evaluator.rb similarity index 74% rename from lib/svmkit/base/evaluator.rb rename to lib/rumale/base/evaluator.rb index 07b5e22d..45b0b0e2 100644 --- a/lib/svmkit/base/evaluator.rb +++ b/lib/rumale/base/evaluator.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'svmkit/validation' +require 'rumale/validation' -module SVMKit +module Rumale module Base - # Module for all evaluation measures in SVMKit. + # Module for all evaluation measures in Rumale. module Evaluator include Validation diff --git a/lib/svmkit/base/regressor.rb b/lib/rumale/base/regressor.rb similarity index 83% rename from lib/svmkit/base/regressor.rb rename to lib/rumale/base/regressor.rb index 757d3c00..2f754afd 100644 --- a/lib/svmkit/base/regressor.rb +++ b/lib/rumale/base/regressor.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -require 'svmkit/validation' -require 'svmkit/evaluation_measure/r2_score' +require 'rumale/validation' +require 'rumale/evaluation_measure/r2_score' -module SVMKit +module Rumale module Base - # Module for all regressors in SVMKit. + # Module for all regressors in Rumale. module Regressor include Validation @@ -28,7 +28,7 @@ def score(x, y) check_sample_array(x) check_tvalue_array(y) check_sample_tvalue_size(x, y) - evaluator = SVMKit::EvaluationMeasure::R2Score.new + evaluator = Rumale::EvaluationMeasure::R2Score.new evaluator.score(y, predict(x)) end end diff --git a/lib/svmkit/base/splitter.rb b/lib/rumale/base/splitter.rb similarity index 79% rename from lib/svmkit/base/splitter.rb rename to lib/rumale/base/splitter.rb index 11aad72a..b7143f2d 100644 --- a/lib/svmkit/base/splitter.rb +++ b/lib/rumale/base/splitter.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'svmkit/validation' +require 'rumale/validation' -module SVMKit +module Rumale module Base - # Module for all validation methods in SVMKit. + # Module for all validation methods in Rumale. module Splitter include Validation diff --git a/lib/svmkit/base/transformer.rb b/lib/rumale/base/transformer.rb similarity index 84% rename from lib/svmkit/base/transformer.rb rename to lib/rumale/base/transformer.rb index d65283dd..e6765eda 100644 --- a/lib/svmkit/base/transformer.rb +++ b/lib/rumale/base/transformer.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'svmkit/validation' +require 'rumale/validation' -module SVMKit +module Rumale module Base - # Module for all transfomers in SVMKit. + # Module for all transfomers in Rumale. module Transformer include Validation diff --git a/lib/svmkit/clustering/dbscan.rb b/lib/rumale/clustering/dbscan.rb similarity index 95% rename from lib/svmkit/clustering/dbscan.rb rename to lib/rumale/clustering/dbscan.rb index 0d18d3be..0fb88e27 100644 --- a/lib/svmkit/clustering/dbscan.rb +++ b/lib/rumale/clustering/dbscan.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/cluster_analyzer' -require 'svmkit/pairwise_metric' +require 'rumale/base/base_estimator' +require 'rumale/base/cluster_analyzer' +require 'rumale/pairwise_metric' -module SVMKit +module Rumale module Clustering # DBSCAN is a class that implements DBSCAN cluster analysis. # The current implementation uses the Euclidean distance for analyzing the clusters. # # @example - # analyzer = SVMKit::Clustering::DBSCAN.new(eps: 0.5, min_samples: 5) + # analyzer = Rumale::Clustering::DBSCAN.new(eps: 0.5, min_samples: 5) # cluster_labels = analyzer.fit_predict(samples) # # *Reference* diff --git a/lib/svmkit/clustering/k_means.rb b/lib/rumale/clustering/k_means.rb similarity index 95% rename from lib/svmkit/clustering/k_means.rb rename to lib/rumale/clustering/k_means.rb index f3496869..6fee9a23 100644 --- a/lib/svmkit/clustering/k_means.rb +++ b/lib/rumale/clustering/k_means.rb @@ -1,17 +1,17 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/cluster_analyzer' -require 'svmkit/pairwise_metric' +require 'rumale/base/base_estimator' +require 'rumale/base/cluster_analyzer' +require 'rumale/pairwise_metric' -module SVMKit +module Rumale # This module consists of classes that implement cluster analysis methods. module Clustering # KMeans is a class that implements K-Means cluster analysis. # The current implementation uses the Euclidean distance for analyzing the clusters. # # @example - # analyzer = SVMKit::Clustering::KMeans.new(n_clusters: 10, max_iter: 50) + # analyzer = Rumale::Clustering::KMeans.new(n_clusters: 10, max_iter: 50) # cluster_labels = analyzer.fit_predict(samples) # # *Reference* @@ -66,7 +66,7 @@ def fit(x, _y = nil) old_centers = @cluster_centers.dup @params[:n_clusters].times do |n| assigned_bits = cluster_labels.eq(n) - @cluster_centers[n, true] = x[assigned_bits.where, true].mean(axis: 0) if assigned_bits.count > 0 + @cluster_centers[n, true] = x[assigned_bits.where, true].mean(axis: 0) if assigned_bits.count.positive? end error = Numo::NMath.sqrt(((old_centers - @cluster_centers)**2).sum(axis: 1)).mean break if error <= @params[:tol] diff --git a/lib/svmkit/dataset.rb b/lib/rumale/dataset.rb similarity index 99% rename from lib/svmkit/dataset.rb rename to lib/rumale/dataset.rb index 2cba627e..4b44bd2c 100644 --- a/lib/svmkit/dataset.rb +++ b/lib/rumale/dataset.rb @@ -2,7 +2,7 @@ require 'csv' -module SVMKit +module Rumale # Module for loading and saving a dataset file. module Dataset class << self diff --git a/lib/svmkit/decomposition/nmf.rb b/lib/rumale/decomposition/nmf.rb similarity index 94% rename from lib/svmkit/decomposition/nmf.rb rename to lib/rumale/decomposition/nmf.rb index cd1c8f7d..50196d3b 100644 --- a/lib/svmkit/decomposition/nmf.rb +++ b/lib/rumale/decomposition/nmf.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/utils' -require 'svmkit/base/base_estimator' -require 'svmkit/base/transformer' +require 'rumale/utils' +require 'rumale/base/base_estimator' +require 'rumale/base/transformer' -module SVMKit +module Rumale module Decomposition # NMF is a class that implements Non-negative Matrix Factorization. # # @example - # decomposer = SVMKit::Decomposition::NMF.new(n_components: 2) + # decomposer = Rumale::Decomposition::NMF.new(n_components: 2) # representaion = decomposer.fit_transform(samples) # # *Reference* @@ -113,8 +113,8 @@ def partial_fit(x, update_comps = true) # initialize some variables. n_samples, n_features = x.shape scale = Math.sqrt(x.mean / @params[:n_components]) - @components = SVMKit::Utils.rand_uniform([@params[:n_components], n_features], @rng) * scale if update_comps - coefficients = SVMKit::Utils.rand_uniform([n_samples, @params[:n_components]], @rng) * scale + @components = Rumale::Utils.rand_uniform([@params[:n_components], n_features], @rng) * scale if update_comps + coefficients = Rumale::Utils.rand_uniform([n_samples, @params[:n_components]], @rng) * scale # optimization. @params[:max_iter].times do # update diff --git a/lib/svmkit/decomposition/pca.rb b/lib/rumale/decomposition/pca.rb similarity index 97% rename from lib/svmkit/decomposition/pca.rb rename to lib/rumale/decomposition/pca.rb index b561cf79..22bc2914 100644 --- a/lib/svmkit/decomposition/pca.rb +++ b/lib/rumale/decomposition/pca.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/transformer' +require 'rumale/base/base_estimator' +require 'rumale/base/transformer' -module SVMKit +module Rumale # Module for matrix decomposition algorithms. module Decomposition # PCA is a class that implements Principal Component Analysis. # # @example - # decomposer = SVMKit::Decomposition::PCA.new(n_components: 2) + # decomposer = Rumale::Decomposition::PCA.new(n_components: 2) # representaion = decomposer.fit_transform(samples) # # *Reference* diff --git a/lib/svmkit/ensemble/ada_boost_classifier.rb b/lib/rumale/ensemble/ada_boost_classifier.rb similarity index 96% rename from lib/svmkit/ensemble/ada_boost_classifier.rb rename to lib/rumale/ensemble/ada_boost_classifier.rb index b6659af3..d53b5069 100644 --- a/lib/svmkit/ensemble/ada_boost_classifier.rb +++ b/lib/rumale/ensemble/ada_boost_classifier.rb @@ -1,19 +1,19 @@ # frozen_string_literal: true -require 'svmkit/values' -require 'svmkit/utils' -require 'svmkit/base/base_estimator' -require 'svmkit/base/classifier' -require 'svmkit/tree/decision_tree_classifier' +require 'rumale/values' +require 'rumale/utils' +require 'rumale/base/base_estimator' +require 'rumale/base/classifier' +require 'rumale/tree/decision_tree_classifier' -module SVMKit +module Rumale module Ensemble # AdaBoostClassifier is a class that implements AdaBoost (SAMME.R) for classification. # This class uses decision tree for a weak learner. # # @example # estimator = - # SVMKit::Ensemble::AdaBoostClassifier.new( + # Rumale::Ensemble::AdaBoostClassifier.new( # n_estimators: 10, criterion: 'gini', max_depth: 3, max_leaf_nodes: 10, min_samples_leaf: 5, random_seed: 1) # estimator.fit(training_samples, traininig_labels) # results = estimator.predict(testing_samples) @@ -102,12 +102,12 @@ def fit(x, y) # rubocop:disable Metrics/AbcSize observation_weights = Numo::DFloat.zeros(n_samples) + 1.fdiv(n_samples) @params[:n_estimators].times do |_t| # Fit classfier. - ids = SVMKit::Utils.choice_ids(n_samples, observation_weights, @rng) + ids = Rumale::Utils.choice_ids(n_samples, observation_weights, @rng) break if y[ids].to_a.uniq.size != n_classes tree = Tree::DecisionTreeClassifier.new( criterion: @params[:criterion], max_depth: @params[:max_depth], max_leaf_nodes: @params[:max_leaf_nodes], min_samples_leaf: @params[:min_samples_leaf], - max_features: @params[:max_features], random_seed: @rng.rand(SVMKit::Values.int_max) + max_features: @params[:max_features], random_seed: @rng.rand(Rumale::Values.int_max) ) tree.fit(x[ids, true], y[ids]) # Calculate estimator error. diff --git a/lib/svmkit/ensemble/ada_boost_regressor.rb b/lib/rumale/ensemble/ada_boost_regressor.rb similarity index 96% rename from lib/svmkit/ensemble/ada_boost_regressor.rb rename to lib/rumale/ensemble/ada_boost_regressor.rb index 0a7f6a0a..4f5ce6af 100644 --- a/lib/svmkit/ensemble/ada_boost_regressor.rb +++ b/lib/rumale/ensemble/ada_boost_regressor.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'svmkit/values' -require 'svmkit/base/base_estimator' -require 'svmkit/base/regressor' -require 'svmkit/tree/decision_tree_regressor' +require 'rumale/values' +require 'rumale/base/base_estimator' +require 'rumale/base/regressor' +require 'rumale/tree/decision_tree_regressor' -module SVMKit +module Rumale module Ensemble # AdaBoostRegressor is a class that implements random forest for regression. # This class uses decision tree for a weak learner. # # @example # estimator = - # SVMKit::Ensemble::AdaBoostRegressor.new( + # Rumale::Ensemble::AdaBoostRegressor.new( # n_estimators: 10, criterion: 'mse', max_depth: 3, max_leaf_nodes: 10, min_samples_leaf: 5, random_seed: 1) # estimator.fit(training_samples, traininig_values) # results = estimator.predict(testing_samples) @@ -105,11 +105,11 @@ def fit(x, y) # rubocop:disable Metrics/AbcSize # Construct forest. @params[:n_estimators].times do |_t| # Fit weak learner. - ids = SVMKit::Utils.choice_ids(n_samples, observation_weights, @rng) + ids = Rumale::Utils.choice_ids(n_samples, observation_weights, @rng) tree = Tree::DecisionTreeRegressor.new( criterion: @params[:criterion], max_depth: @params[:max_depth], max_leaf_nodes: @params[:max_leaf_nodes], min_samples_leaf: @params[:min_samples_leaf], - max_features: @params[:max_features], random_seed: @rng.rand(SVMKit::Values.int_max) + max_features: @params[:max_features], random_seed: @rng.rand(Rumale::Values.int_max) ) tree.fit(x[ids, true], y[ids]) p = tree.predict(x) diff --git a/lib/svmkit/ensemble/random_forest_classifier.rb b/lib/rumale/ensemble/random_forest_classifier.rb similarity index 96% rename from lib/svmkit/ensemble/random_forest_classifier.rb rename to lib/rumale/ensemble/random_forest_classifier.rb index 4e854e43..44a6a50d 100644 --- a/lib/svmkit/ensemble/random_forest_classifier.rb +++ b/lib/rumale/ensemble/random_forest_classifier.rb @@ -1,18 +1,18 @@ # frozen_string_literal: true -require 'svmkit/values' -require 'svmkit/base/base_estimator' -require 'svmkit/base/classifier' -require 'svmkit/tree/decision_tree_classifier' +require 'rumale/values' +require 'rumale/base/base_estimator' +require 'rumale/base/classifier' +require 'rumale/tree/decision_tree_classifier' -module SVMKit +module Rumale # This module consists of the classes that implement ensemble-based methods. module Ensemble # RandomForestClassifier is a class that implements random forest for classification. # # @example # estimator = - # SVMKit::Ensemble::RandomForestClassifier.new( + # Rumale::Ensemble::RandomForestClassifier.new( # n_estimators: 10, criterion: 'gini', max_depth: 3, max_leaf_nodes: 10, min_samples_leaf: 5, random_seed: 1) # estimator.fit(training_samples, traininig_labels) # results = estimator.predict(testing_samples) @@ -95,7 +95,7 @@ def fit(x, y) tree = Tree::DecisionTreeClassifier.new( criterion: @params[:criterion], max_depth: @params[:max_depth], max_leaf_nodes: @params[:max_leaf_nodes], min_samples_leaf: @params[:min_samples_leaf], - max_features: @params[:max_features], random_seed: @rng.rand(SVMKit::Values.int_max) + max_features: @params[:max_features], random_seed: @rng.rand(Rumale::Values.int_max) ) bootstrap_ids = Array.new(n_samples) { @rng.rand(0...n_samples) } tree.fit(x[bootstrap_ids, true], y[bootstrap_ids]) diff --git a/lib/svmkit/ensemble/random_forest_regressor.rb b/lib/rumale/ensemble/random_forest_regressor.rb similarity index 96% rename from lib/svmkit/ensemble/random_forest_regressor.rb rename to lib/rumale/ensemble/random_forest_regressor.rb index 045aa672..65175d31 100644 --- a/lib/svmkit/ensemble/random_forest_regressor.rb +++ b/lib/rumale/ensemble/random_forest_regressor.rb @@ -1,17 +1,17 @@ # frozen_string_literal: true -require 'svmkit/values' -require 'svmkit/base/base_estimator' -require 'svmkit/base/regressor' -require 'svmkit/tree/decision_tree_regressor' +require 'rumale/values' +require 'rumale/base/base_estimator' +require 'rumale/base/regressor' +require 'rumale/tree/decision_tree_regressor' -module SVMKit +module Rumale module Ensemble # RandomForestRegressor is a class that implements random forest for regression # # @example # estimator = - # SVMKit::Ensemble::RandomForestRegressor.new( + # Rumale::Ensemble::RandomForestRegressor.new( # n_estimators: 10, criterion: 'mse', max_depth: 3, max_leaf_nodes: 10, min_samples_leaf: 5, random_seed: 1) # estimator.fit(training_samples, traininig_values) # results = estimator.predict(testing_samples) @@ -89,7 +89,7 @@ def fit(x, y) tree = Tree::DecisionTreeRegressor.new( criterion: @params[:criterion], max_depth: @params[:max_depth], max_leaf_nodes: @params[:max_leaf_nodes], min_samples_leaf: @params[:min_samples_leaf], - max_features: @params[:max_features], random_seed: @rng.rand(SVMKit::Values.int_max) + max_features: @params[:max_features], random_seed: @rng.rand(Rumale::Values.int_max) ) bootstrap_ids = Array.new(n_samples) { @rng.rand(0...n_samples) } tree.fit(x[bootstrap_ids, true], single_target ? y[bootstrap_ids] : y[bootstrap_ids, true]) diff --git a/lib/svmkit/evaluation_measure/accuracy.rb b/lib/rumale/evaluation_measure/accuracy.rb similarity index 88% rename from lib/svmkit/evaluation_measure/accuracy.rb rename to lib/rumale/evaluation_measure/accuracy.rb index 82d967c8..11b797e0 100644 --- a/lib/svmkit/evaluation_measure/accuracy.rb +++ b/lib/rumale/evaluation_measure/accuracy.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' +require 'rumale/base/evaluator' -module SVMKit +module Rumale # This module consists of the classes for model evaluation. module EvaluationMeasure # Accuracy is a class that calculates the accuracy of classifier from the predicted labels. # # @example - # evaluator = SVMKit::EvaluationMeasure::Accuracy.new + # evaluator = Rumale::EvaluationMeasure::Accuracy.new # puts evaluator.score(ground_truth, predicted) class Accuracy include Base::Evaluator diff --git a/lib/svmkit/evaluation_measure/f_score.rb b/lib/rumale/evaluation_measure/f_score.rb similarity index 89% rename from lib/svmkit/evaluation_measure/f_score.rb rename to lib/rumale/evaluation_measure/f_score.rb index 9b87f516..df8a83c7 100644 --- a/lib/svmkit/evaluation_measure/f_score.rb +++ b/lib/rumale/evaluation_measure/f_score.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' -require 'svmkit/evaluation_measure/precision_recall' +require 'rumale/base/evaluator' +require 'rumale/evaluation_measure/precision_recall' -module SVMKit +module Rumale # This module consists of the classes for model evaluation. module EvaluationMeasure # FScore is a class that calculates the F1-score of the predicted labels. # # @example - # evaluator = SVMKit::EvaluationMeasure::FScore.new + # evaluator = Rumale::EvaluationMeasure::FScore.new # puts evaluator.score(ground_truth, predicted) class FScore include Base::Evaluator diff --git a/lib/svmkit/evaluation_measure/log_loss.rb b/lib/rumale/evaluation_measure/log_loss.rb similarity index 88% rename from lib/svmkit/evaluation_measure/log_loss.rb rename to lib/rumale/evaluation_measure/log_loss.rb index ea3adab4..d1a115ac 100644 --- a/lib/svmkit/evaluation_measure/log_loss.rb +++ b/lib/rumale/evaluation_measure/log_loss.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' -require 'svmkit/preprocessing/one_hot_encoder' +require 'rumale/base/evaluator' +require 'rumale/preprocessing/one_hot_encoder' -module SVMKit +module Rumale module EvaluationMeasure # LogLoss is a class that calculates the logarithmic loss of predicted class probability. # # @example - # evaluator = SVMKit::EvaluationMeasure::LogLoss.new + # evaluator = Rumale::EvaluationMeasure::LogLoss.new # puts evaluator.score(ground_truth, predicted) class LogLoss include Base::Evaluator @@ -33,7 +33,7 @@ def score(y_true, y_pred, eps = 1e-15) bin_y_true = Numo::DFloat.cast(y_true.ne(negative_label)) -(bin_y_true * Numo::NMath.log(clipped_p) + (1 - bin_y_true) * Numo::NMath.log(1 - clipped_p)) else - encoder = SVMKit::Preprocessing::OneHotEncoder.new + encoder = Rumale::Preprocessing::OneHotEncoder.new encoded_y_true = encoder.fit_transform(y_true) clipped_p /= clipped_p.sum(1).expand_dims(1) -(encoded_y_true * Numo::NMath.log(clipped_p)).sum(1) diff --git a/lib/svmkit/evaluation_measure/mean_absolute_error.rb b/lib/rumale/evaluation_measure/mean_absolute_error.rb similarity index 88% rename from lib/svmkit/evaluation_measure/mean_absolute_error.rb rename to lib/rumale/evaluation_measure/mean_absolute_error.rb index 8af5b380..7d84452c 100644 --- a/lib/svmkit/evaluation_measure/mean_absolute_error.rb +++ b/lib/rumale/evaluation_measure/mean_absolute_error.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' +require 'rumale/base/evaluator' -module SVMKit +module Rumale module EvaluationMeasure # MeanAbsoluteError is a class that calculates the mean absolute error. # # @example - # evaluator = SVMKit::EvaluationMeasure::MeanAbsoluteError.new + # evaluator = Rumale::EvaluationMeasure::MeanAbsoluteError.new # puts evaluator.score(ground_truth, predicted) class MeanAbsoluteError include Base::Evaluator diff --git a/lib/svmkit/evaluation_measure/mean_squared_error.rb b/lib/rumale/evaluation_measure/mean_squared_error.rb similarity index 88% rename from lib/svmkit/evaluation_measure/mean_squared_error.rb rename to lib/rumale/evaluation_measure/mean_squared_error.rb index 699ee604..6a4e0c92 100644 --- a/lib/svmkit/evaluation_measure/mean_squared_error.rb +++ b/lib/rumale/evaluation_measure/mean_squared_error.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' +require 'rumale/base/evaluator' -module SVMKit +module Rumale module EvaluationMeasure # MeanSquaredError is a class that calculates the mean squared error. # # @example - # evaluator = SVMKit::EvaluationMeasure::MeanSquaredError.new + # evaluator = Rumale::EvaluationMeasure::MeanSquaredError.new # puts evaluator.score(ground_truth, predicted) class MeanSquaredError include Base::Evaluator diff --git a/lib/svmkit/evaluation_measure/normalized_mutual_information.rb b/lib/rumale/evaluation_measure/normalized_mutual_information.rb similarity index 94% rename from lib/svmkit/evaluation_measure/normalized_mutual_information.rb rename to lib/rumale/evaluation_measure/normalized_mutual_information.rb index 314c1f03..9b40167a 100644 --- a/lib/svmkit/evaluation_measure/normalized_mutual_information.rb +++ b/lib/rumale/evaluation_measure/normalized_mutual_information.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' +require 'rumale/base/evaluator' -module SVMKit +module Rumale module EvaluationMeasure # NormalizedMutualInformation is a class that calculates the normalized mutual information of cluatering results. # # @example - # evaluator = SVMKit::EvaluationMeasure::NormalizedMutualInformation.new + # evaluator = Rumale::EvaluationMeasure::NormalizedMutualInformation.new # puts evaluator.score(ground_truth, predicted) # # *Reference* @@ -48,7 +48,7 @@ def score(y_true, y_pred) tr_sample_ids = y_true.eq(j).where.to_a n_tr_samples = tr_sample_ids.size n_intr_samples = (pr_sample_ids & tr_sample_ids).size - if n_intr_samples > 0 + if n_intr_samples.positive? mutual_information += n_intr_samples.fdiv(n_samples) * Math.log((n_samples * n_intr_samples).fdiv(n_pr_samples * n_tr_samples)) end diff --git a/lib/svmkit/evaluation_measure/precision.rb b/lib/rumale/evaluation_measure/precision.rb similarity index 89% rename from lib/svmkit/evaluation_measure/precision.rb rename to lib/rumale/evaluation_measure/precision.rb index 727eae51..aa736cc2 100644 --- a/lib/svmkit/evaluation_measure/precision.rb +++ b/lib/rumale/evaluation_measure/precision.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' -require 'svmkit/evaluation_measure/precision_recall' +require 'rumale/base/evaluator' +require 'rumale/evaluation_measure/precision_recall' -module SVMKit +module Rumale # This module consists of the classes for model evaluation. module EvaluationMeasure # Precision is a class that calculates the preicision of the predicted labels. # # @example - # evaluator = SVMKit::EvaluationMeasure::Precision.new + # evaluator = Rumale::EvaluationMeasure::Precision.new # puts evaluator.score(ground_truth, predicted) class Precision include Base::Evaluator diff --git a/lib/svmkit/evaluation_measure/precision_recall.rb b/lib/rumale/evaluation_measure/precision_recall.rb similarity index 98% rename from lib/svmkit/evaluation_measure/precision_recall.rb rename to lib/rumale/evaluation_measure/precision_recall.rb index 8ad56593..da403d78 100644 --- a/lib/svmkit/evaluation_measure/precision_recall.rb +++ b/lib/rumale/evaluation_measure/precision_recall.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' +require 'rumale/base/evaluator' -module SVMKit +module Rumale # This module consists of the classes for model evaluation. module EvaluationMeasure # @!visibility private diff --git a/lib/svmkit/evaluation_measure/purity.rb b/lib/rumale/evaluation_measure/purity.rb similarity index 91% rename from lib/svmkit/evaluation_measure/purity.rb rename to lib/rumale/evaluation_measure/purity.rb index 5a0c54ba..392519aa 100644 --- a/lib/svmkit/evaluation_measure/purity.rb +++ b/lib/rumale/evaluation_measure/purity.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' +require 'rumale/base/evaluator' -module SVMKit +module Rumale module EvaluationMeasure # Purity is a class that calculates the purity of cluatering results. # # @example - # evaluator = SVMKit::EvaluationMeasure::Purity.new + # evaluator = Rumale::EvaluationMeasure::Purity.new # puts evaluator.score(ground_truth, predicted) # # *Reference* diff --git a/lib/svmkit/evaluation_measure/r2_score.rb b/lib/rumale/evaluation_measure/r2_score.rb similarity index 89% rename from lib/svmkit/evaluation_measure/r2_score.rb rename to lib/rumale/evaluation_measure/r2_score.rb index c580f559..f82fe17b 100644 --- a/lib/svmkit/evaluation_measure/r2_score.rb +++ b/lib/rumale/evaluation_measure/r2_score.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' -require 'svmkit/evaluation_measure/precision_recall' +require 'rumale/base/evaluator' +require 'rumale/evaluation_measure/precision_recall' -module SVMKit +module Rumale module EvaluationMeasure # R2Score is a class that calculates the coefficient of determination for the predicted values. # # @example - # evaluator = SVMKit::EvaluationMeasure::R2Score.new + # evaluator = Rumale::EvaluationMeasure::R2Score.new # puts evaluator.score(ground_truth, predicted) class R2Score include Base::Evaluator diff --git a/lib/svmkit/evaluation_measure/recall.rb b/lib/rumale/evaluation_measure/recall.rb similarity index 89% rename from lib/svmkit/evaluation_measure/recall.rb rename to lib/rumale/evaluation_measure/recall.rb index 7ba2c75f..4d8ec223 100644 --- a/lib/svmkit/evaluation_measure/recall.rb +++ b/lib/rumale/evaluation_measure/recall.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/base/evaluator' -require 'svmkit/evaluation_measure/precision_recall' +require 'rumale/base/evaluator' +require 'rumale/evaluation_measure/precision_recall' -module SVMKit +module Rumale # This module consists of the classes for model evaluation. module EvaluationMeasure # Recall is a class that calculates the recall of the predicted labels. # # @example - # evaluator = SVMKit::EvaluationMeasure::Recall.new + # evaluator = Rumale::EvaluationMeasure::Recall.new # puts evaluator.score(ground_truth, predicted) class Recall include Base::Evaluator diff --git a/lib/svmkit/kernel_approximation/rbf.rb b/lib/rumale/kernel_approximation/rbf.rb similarity index 94% rename from lib/svmkit/kernel_approximation/rbf.rb rename to lib/rumale/kernel_approximation/rbf.rb index 41626285..60aa68e6 100644 --- a/lib/svmkit/kernel_approximation/rbf.rb +++ b/lib/rumale/kernel_approximation/rbf.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'svmkit/utils' -require 'svmkit/base/base_estimator' -require 'svmkit/base/transformer' +require 'rumale/utils' +require 'rumale/base/base_estimator' +require 'rumale/base/transformer' -module SVMKit +module Rumale # Module for kernel approximation algorithms. module KernelApproximation # Class for RBF kernel feature mapping. # # @example - # transformer = SVMKit::KernelApproximation::RBF.new(gamma: 1.0, n_coponents: 128, random_seed: 1) + # transformer = Rumale::KernelApproximation::RBF.new(gamma: 1.0, n_coponents: 128, random_seed: 1) # new_training_samples = transformer.fit_transform(training_samples) # new_testing_samples = transformer.transform(testing_samples) # @@ -64,7 +64,7 @@ def fit(x, _y = nil) n_features = x.shape[1] @params[:n_components] = 2 * n_features if @params[:n_components] <= 0 - @random_mat = SVMKit::Utils.rand_normal([n_features, @params[:n_components]], @rng) * (2.0 * @params[:gamma])**0.5 + @random_mat = Rumale::Utils.rand_normal([n_features, @params[:n_components]], @rng) * (2.0 * @params[:gamma])**0.5 n_half_components = @params[:n_components] / 2 @random_vec = Numo::DFloat.zeros(@params[:n_components] - n_half_components).concatenate( Numo::DFloat.ones(n_half_components) * (0.5 * Math::PI) diff --git a/lib/svmkit/kernel_machine/kernel_svc.rb b/lib/rumale/kernel_machine/kernel_svc.rb similarity index 94% rename from lib/svmkit/kernel_machine/kernel_svc.rb rename to lib/rumale/kernel_machine/kernel_svc.rb index a0877736..d5c62882 100644 --- a/lib/svmkit/kernel_machine/kernel_svc.rb +++ b/lib/rumale/kernel_machine/kernel_svc.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/classifier' -require 'svmkit/probabilistic_output' +require 'rumale/base/base_estimator' +require 'rumale/base/classifier' +require 'rumale/probabilistic_output' -module SVMKit +module Rumale # This module consists of the classes that implement kernel method-based estimator. module KernelMachine # KernelSVC is a class that implements (Nonlinear) Kernel Support Vector Classifier @@ -12,11 +12,11 @@ module KernelMachine # For multiclass classification problem, it uses one-vs-the-rest strategy. # # @example - # training_kernel_matrix = SVMKit::PairwiseMetric::rbf_kernel(training_samples) + # training_kernel_matrix = Rumale::PairwiseMetric::rbf_kernel(training_samples) # estimator = - # SVMKit::KernelMachine::KernelSVC.new(reg_param: 1.0, max_iter: 1000, random_seed: 1) + # Rumale::KernelMachine::KernelSVC.new(reg_param: 1.0, max_iter: 1000, random_seed: 1) # estimator.fit(training_kernel_matrix, traininig_labels) - # testing_kernel_matrix = SVMKit::PairwiseMetric::rbf_kernel(testing_samples, training_samples) + # testing_kernel_matrix = Rumale::PairwiseMetric::rbf_kernel(testing_samples, training_samples) # results = estimator.predict(testing_kernel_matrix) # # *Reference* @@ -83,7 +83,7 @@ def fit(x, y) bin_y = Numo::Int32.cast(y.eq(@classes[n])) * 2 - 1 @weight_vec[n, true] = binary_fit(x, bin_y) @prob_param[n, true] = if @params[:probability] - SVMKit::ProbabilisticOutput.fit_sigmoid(x.dot(@weight_vec[n, true].transpose), bin_y) + Rumale::ProbabilisticOutput.fit_sigmoid(x.dot(@weight_vec[n, true].transpose), bin_y) else Numo::DFloat[1, 0] end @@ -93,7 +93,7 @@ def fit(x, y) bin_y = Numo::Int32.cast(y.ne(negative_label)) * 2 - 1 @weight_vec = binary_fit(x, bin_y) @prob_param = if @params[:probability] - SVMKit::ProbabilisticOutput.fit_sigmoid(x.dot(@weight_vec.transpose), bin_y) + Rumale::ProbabilisticOutput.fit_sigmoid(x.dot(@weight_vec.transpose), bin_y) else Numo::DFloat[1, 0] end diff --git a/lib/svmkit/linear_model/base_linear_model.rb b/lib/rumale/linear_model/base_linear_model.rb similarity index 97% rename from lib/svmkit/linear_model/base_linear_model.rb rename to lib/rumale/linear_model/base_linear_model.rb index 2adb68cb..9aef2fb8 100644 --- a/lib/svmkit/linear_model/base_linear_model.rb +++ b/lib/rumale/linear_model/base_linear_model.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/optimizer/nadam' +require 'rumale/base/base_estimator' +require 'rumale/optimizer/nadam' -module SVMKit +module Rumale module LinearModel # BaseLinearModel is an abstract class for implementation of linear estimator # with mini-batch stochastic gradient descent optimization. diff --git a/lib/svmkit/linear_model/lasso.rb b/lib/rumale/linear_model/lasso.rb similarity index 96% rename from lib/svmkit/linear_model/lasso.rb rename to lib/rumale/linear_model/lasso.rb index f3ffadf9..098ed92e 100644 --- a/lib/svmkit/linear_model/lasso.rb +++ b/lib/rumale/linear_model/lasso.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'svmkit/linear_model/base_linear_model' -require 'svmkit/base/regressor' +require 'rumale/linear_model/base_linear_model' +require 'rumale/base/regressor' -module SVMKit +module Rumale module LinearModel # Lasso is a class that implements Lasso Regression # with stochastic gradient descent (SGD) optimization. # # @example # estimator = - # SVMKit::LinearModel::Lasso.new(reg_param: 0.1, max_iter: 1000, batch_size: 20, random_seed: 1) + # Rumale::LinearModel::Lasso.new(reg_param: 0.1, max_iter: 1000, batch_size: 20, random_seed: 1) # estimator.fit(training_samples, traininig_values) # results = estimator.predict(testing_samples) # diff --git a/lib/svmkit/linear_model/linear_regression.rb b/lib/rumale/linear_model/linear_regression.rb similarity index 96% rename from lib/svmkit/linear_model/linear_regression.rb rename to lib/rumale/linear_model/linear_regression.rb index 3efd8157..a0611968 100644 --- a/lib/svmkit/linear_model/linear_regression.rb +++ b/lib/rumale/linear_model/linear_regression.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'svmkit/linear_model/base_linear_model' -require 'svmkit/base/regressor' +require 'rumale/linear_model/base_linear_model' +require 'rumale/base/regressor' -module SVMKit +module Rumale module LinearModel # LinearRegression is a class that implements ordinary least square linear regression # with mini-batch stochastic gradient descent optimization. # # @example # estimator = - # SVMKit::LinearModel::LinearRegression.new(max_iter: 1000, batch_size: 20, random_seed: 1) + # Rumale::LinearModel::LinearRegression.new(max_iter: 1000, batch_size: 20, random_seed: 1) # estimator.fit(training_samples, traininig_values) # results = estimator.predict(testing_samples) # diff --git a/lib/svmkit/linear_model/logistic_regression.rb b/lib/rumale/linear_model/logistic_regression.rb similarity index 97% rename from lib/svmkit/linear_model/logistic_regression.rb rename to lib/rumale/linear_model/logistic_regression.rb index 5a4212f5..7b6cb2df 100644 --- a/lib/svmkit/linear_model/logistic_regression.rb +++ b/lib/rumale/linear_model/logistic_regression.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'svmkit/linear_model/base_linear_model' -require 'svmkit/base/classifier' +require 'rumale/linear_model/base_linear_model' +require 'rumale/base/classifier' -module SVMKit +module Rumale module LinearModel # LogisticRegression is a class that implements Logistic Regression # with mini-batch stochastic gradient descent optimization. @@ -11,7 +11,7 @@ module LinearModel # # @example # estimator = - # SVMKit::LinearModel::LogisticRegression.new(reg_param: 1.0, max_iter: 1000, batch_size: 20, random_seed: 1) + # Rumale::LinearModel::LogisticRegression.new(reg_param: 1.0, max_iter: 1000, batch_size: 20, random_seed: 1) # estimator.fit(training_samples, traininig_labels) # results = estimator.predict(testing_samples) # diff --git a/lib/svmkit/linear_model/ridge.rb b/lib/rumale/linear_model/ridge.rb similarity index 95% rename from lib/svmkit/linear_model/ridge.rb rename to lib/rumale/linear_model/ridge.rb index 126d13b5..7ca93c48 100644 --- a/lib/svmkit/linear_model/ridge.rb +++ b/lib/rumale/linear_model/ridge.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'svmkit/linear_model/base_linear_model' -require 'svmkit/base/regressor' +require 'rumale/linear_model/base_linear_model' +require 'rumale/base/regressor' -module SVMKit +module Rumale module LinearModel # Ridge is a class that implements Ridge Regression # with mini-batch stochastic gradient descent optimization. # # @example # estimator = - # SVMKit::LinearModel::Ridge.new(reg_param: 0.1, max_iter: 1000, batch_size: 20, random_seed: 1) + # Rumale::LinearModel::Ridge.new(reg_param: 0.1, max_iter: 1000, batch_size: 20, random_seed: 1) # estimator.fit(training_samples, traininig_values) # results = estimator.predict(testing_samples) # diff --git a/lib/svmkit/linear_model/svc.rb b/lib/rumale/linear_model/svc.rb similarity index 95% rename from lib/svmkit/linear_model/svc.rb rename to lib/rumale/linear_model/svc.rb index fa11fac7..28a865cc 100644 --- a/lib/svmkit/linear_model/svc.rb +++ b/lib/rumale/linear_model/svc.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -require 'svmkit/linear_model/base_linear_model' -require 'svmkit/base/classifier' -require 'svmkit/probabilistic_output' +require 'rumale/linear_model/base_linear_model' +require 'rumale/base/classifier' +require 'rumale/probabilistic_output' -module SVMKit +module Rumale # This module consists of the classes that implement generalized linear models. module LinearModel # SVC is a class that implements Support Vector Classifier @@ -13,7 +13,7 @@ module LinearModel # # @example # estimator = - # SVMKit::LinearModel::SVC.new(reg_param: 1.0, max_iter: 1000, batch_size: 20, random_seed: 1) + # Rumale::LinearModel::SVC.new(reg_param: 1.0, max_iter: 1000, batch_size: 20, random_seed: 1) # estimator.fit(training_samples, traininig_labels) # results = estimator.predict(testing_samples) # @@ -86,7 +86,7 @@ def fit(x, y) bin_y = Numo::Int32.cast(y.eq(@classes[n])) * 2 - 1 @weight_vec[n, true], @bias_term[n] = partial_fit(x, bin_y) @prob_param[n, true] = if @params[:probability] - SVMKit::ProbabilisticOutput.fit_sigmoid(x.dot(@weight_vec[n, true].transpose) + @bias_term[n], bin_y) + Rumale::ProbabilisticOutput.fit_sigmoid(x.dot(@weight_vec[n, true].transpose) + @bias_term[n], bin_y) else Numo::DFloat[1, 0] end @@ -96,7 +96,7 @@ def fit(x, y) bin_y = Numo::Int32.cast(y.ne(negative_label)) * 2 - 1 @weight_vec, @bias_term = partial_fit(x, bin_y) @prob_param = if @params[:probability] - SVMKit::ProbabilisticOutput.fit_sigmoid(x.dot(@weight_vec.transpose) + @bias_term, bin_y) + Rumale::ProbabilisticOutput.fit_sigmoid(x.dot(@weight_vec.transpose) + @bias_term, bin_y) else Numo::DFloat[1, 0] end diff --git a/lib/svmkit/linear_model/svr.rb b/lib/rumale/linear_model/svr.rb similarity index 96% rename from lib/svmkit/linear_model/svr.rb rename to lib/rumale/linear_model/svr.rb index 99a880bb..af2ab488 100644 --- a/lib/svmkit/linear_model/svr.rb +++ b/lib/rumale/linear_model/svr.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'svmkit/linear_model/base_linear_model' -require 'svmkit/base/regressor' +require 'rumale/linear_model/base_linear_model' +require 'rumale/base/regressor' -module SVMKit +module Rumale module LinearModel # SVR is a class that implements Support Vector Regressor # with mini-batch stochastic gradient descent optimization. # # @example # estimator = - # SVMKit::LinearModel::SVR.new(reg_param: 1.0, epsilon: 0.1, max_iter: 1000, batch_size: 20, random_seed: 1) + # Rumale::LinearModel::SVR.new(reg_param: 1.0, epsilon: 0.1, max_iter: 1000, batch_size: 20, random_seed: 1) # estimator.fit(training_samples, traininig_target_values) # results = estimator.predict(testing_samples) # diff --git a/lib/svmkit/model_selection/cross_validation.rb b/lib/rumale/model_selection/cross_validation.rb similarity index 85% rename from lib/svmkit/model_selection/cross_validation.rb rename to lib/rumale/model_selection/cross_validation.rb index 57f754d8..764f5aa6 100644 --- a/lib/svmkit/model_selection/cross_validation.rb +++ b/lib/rumale/model_selection/cross_validation.rb @@ -1,22 +1,22 @@ # frozen_string_literal: true -require 'svmkit/validation' -require 'svmkit/base/base_estimator' -require 'svmkit/base/classifier' -require 'svmkit/base/regressor' -require 'svmkit/base/splitter' -require 'svmkit/base/evaluator' -require 'svmkit/evaluation_measure/log_loss' +require 'rumale/validation' +require 'rumale/base/base_estimator' +require 'rumale/base/classifier' +require 'rumale/base/regressor' +require 'rumale/base/splitter' +require 'rumale/base/evaluator' +require 'rumale/evaluation_measure/log_loss' -module SVMKit +module Rumale # This module consists of the classes for model validation techniques. module ModelSelection # CrossValidation is a class that evaluates a given classifier with cross-validation method. # # @example - # svc = SVMKit::LinearModel::SVC.new - # kf = SVMKit::ModelSelection::StratifiedKFold.new(n_splits: 5) - # cv = SVMKit::ModelSelection::CrossValidation.new(estimator: svc, splitter: kf) + # svc = Rumale::LinearModel::SVC.new + # kf = Rumale::ModelSelection::StratifiedKFold.new(n_splits: 5) + # cv = Rumale::ModelSelection::CrossValidation.new(estimator: svc, splitter: kf) # report = cv.perform(samples, lables) # mean_test_score = report[:test_score].inject(:+) / kf.n_splits # @@ -46,9 +46,9 @@ class CrossValidation # @param evaluator [Evaluator] The evaluator that calculates score of estimator results. # @param return_train_score [Boolean] The flag indicating whether to calculate the score of training dataset. def initialize(estimator: nil, splitter: nil, evaluator: nil, return_train_score: false) - check_params_type(SVMKit::Base::BaseEstimator, estimator: estimator) - check_params_type(SVMKit::Base::Splitter, splitter: splitter) - check_params_type_or_nil(SVMKit::Base::Evaluator, evaluator: evaluator) + check_params_type(Rumale::Base::BaseEstimator, estimator: estimator) + check_params_type(Rumale::Base::Splitter, splitter: splitter) + check_params_type_or_nil(Rumale::Base::Evaluator, evaluator: evaluator) check_params_boolean(return_train_score: return_train_score) @estimator = estimator @splitter = splitter @@ -69,11 +69,11 @@ def initialize(estimator: nil, splitter: nil, evaluator: nil, return_train_score # the return_train_score is false. def perform(x, y) check_sample_array(x) - if @estimator.is_a?(SVMKit::Base::Classifier) + if @estimator.is_a?(Rumale::Base::Classifier) check_label_array(y) check_sample_label_size(x, y) end - if @estimator.is_a?(SVMKit::Base::Regressor) + if @estimator.is_a?(Rumale::Base::Regressor) check_tvalue_array(y) check_sample_tvalue_size(x, y) end @@ -116,7 +116,7 @@ def kernel_machine? end def log_loss? - @evaluator.is_a?(SVMKit::EvaluationMeasure::LogLoss) + @evaluator.is_a?(Rumale::EvaluationMeasure::LogLoss) end end end diff --git a/lib/svmkit/model_selection/grid_search_cv.rb b/lib/rumale/model_selection/grid_search_cv.rb similarity index 90% rename from lib/svmkit/model_selection/grid_search_cv.rb rename to lib/rumale/model_selection/grid_search_cv.rb index 8cf7c882..24235b3e 100644 --- a/lib/svmkit/model_selection/grid_search_cv.rb +++ b/lib/rumale/model_selection/grid_search_cv.rb @@ -1,31 +1,31 @@ # frozen_string_literal: true -require 'svmkit/validation' -require 'svmkit/base/base_estimator' -require 'svmkit/base/evaluator' -require 'svmkit/base/splitter' -require 'svmkit/pipeline/pipeline' +require 'rumale/validation' +require 'rumale/base/base_estimator' +require 'rumale/base/evaluator' +require 'rumale/base/splitter' +require 'rumale/pipeline/pipeline' -module SVMKit +module Rumale module ModelSelection # GridSearchCV is a class that performs hyperparameter optimization with grid search method. # # @example - # rfc = SVMKit::Ensemble::RandomForestClassifier.new(random_seed: 1) + # rfc = Rumale::Ensemble::RandomForestClassifier.new(random_seed: 1) # pg = { n_estimators: [5, 10], max_depth: [3, 5], max_leaf_nodes: [15, 31] } - # kf = SVMKit::ModelSelection::StratifiedKFold.new(n_splits: 5) - # gs = SVMKit::ModelSelection::GridSearchCV.new(estimator: rfc, param_grid: pg, splitter: kf) + # kf = Rumale::ModelSelection::StratifiedKFold.new(n_splits: 5) + # gs = Rumale::ModelSelection::GridSearchCV.new(estimator: rfc, param_grid: pg, splitter: kf) # gs.fit(samples, labels) # p gs.cv_results # p gs.best_params # # @example - # rbf = SVMKit::KernelApproximation::RBF.new(random_seed: 1) - # svc = SVMKit::LinearModel::SVC.new(random_seed: 1) - # pipe = SVMKit::Pipeline::Pipeline.new(steps: { rbf: rbf, svc: svc }) + # rbf = Rumale::KernelApproximation::RBF.new(random_seed: 1) + # svc = Rumale::LinearModel::SVC.new(random_seed: 1) + # pipe = Rumale::Pipeline::Pipeline.new(steps: { rbf: rbf, svc: svc }) # pg = { rbf__gamma: [32.0, 1.0], rbf__n_components: [4, 128], svc__reg_param: [16.0, 0.1] } - # kf = SVMKit::ModelSelection::StratifiedKFold.new(n_splits: 5) - # gs = SVMKit::ModelSelection::GridSearchCV.new(estimator: pipe, param_grid: pg, splitter: kf) + # kf = Rumale::ModelSelection::StratifiedKFold.new(n_splits: 5) + # gs = Rumale::ModelSelection::GridSearchCV.new(estimator: pipe, param_grid: pg, splitter: kf) # gs.fit(samples, labels) # p gs.cv_results # p gs.best_params @@ -65,9 +65,9 @@ class GridSearchCV # @param greater_is_better [Boolean] The flag that indicates whether the estimator is better as # evaluation score is larger. def initialize(estimator: nil, param_grid: nil, splitter: nil, evaluator: nil, greater_is_better: true) - check_params_type(SVMKit::Base::BaseEstimator, estimator: estimator) - check_params_type(SVMKit::Base::Splitter, splitter: splitter) - check_params_type_or_nil(SVMKit::Base::Evaluator, evaluator: evaluator) + check_params_type(Rumale::Base::BaseEstimator, estimator: estimator) + check_params_type(Rumale::Base::Splitter, splitter: splitter) + check_params_type_or_nil(Rumale::Base::Evaluator, evaluator: evaluator) check_params_boolean(greater_is_better: greater_is_better) @params = {} @params[:param_grid] = valid_param_grid(param_grid) @@ -203,7 +203,7 @@ def perform_cross_validation(x, y, prms) def configurated_estimator(prms) estimator = Marshal.load(Marshal.dump(@params[:estimator])) - if @params[:estimator].is_a?(SVMKit::Pipeline::Pipeline) + if @params[:estimator].is_a?(Rumale::Pipeline::Pipeline) prms.each do |k, v| est_name, prm_name = k.to_s.split('__') estimator.steps[est_name.to_sym].params[prm_name.to_sym] = v diff --git a/lib/svmkit/model_selection/k_fold.rb b/lib/rumale/model_selection/k_fold.rb similarity index 96% rename from lib/svmkit/model_selection/k_fold.rb rename to lib/rumale/model_selection/k_fold.rb index b02c391e..d7c996a8 100644 --- a/lib/svmkit/model_selection/k_fold.rb +++ b/lib/rumale/model_selection/k_fold.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'svmkit/base/splitter' +require 'rumale/base/splitter' -module SVMKit +module Rumale # This module consists of the classes for model validation techniques. module ModelSelection # KFold is a class that generates the set of data indices for K-fold cross-validation. # # @example - # kf = SVMKit::ModelSelection::KFold.new(n_splits: 3, shuffle: true, random_seed: 1) + # kf = Rumale::ModelSelection::KFold.new(n_splits: 3, shuffle: true, random_seed: 1) # kf.split(samples, labels).each do |train_ids, test_ids| # train_samples = samples[train_ids, true] # test_samples = samples[test_ids, true] diff --git a/lib/svmkit/model_selection/stratified_k_fold.rb b/lib/rumale/model_selection/stratified_k_fold.rb similarity index 97% rename from lib/svmkit/model_selection/stratified_k_fold.rb rename to lib/rumale/model_selection/stratified_k_fold.rb index b534a58f..746eab8c 100644 --- a/lib/svmkit/model_selection/stratified_k_fold.rb +++ b/lib/rumale/model_selection/stratified_k_fold.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'svmkit/base/splitter' +require 'rumale/base/splitter' -module SVMKit +module Rumale module ModelSelection # StratifiedKFold is a class that generates the set of data indices for K-fold cross-validation. # The proportion of the number of samples in each class will be almost equal for each fold. # # @example - # kf = SVMKit::ModelSelection::StratifiedKFold.new(n_splits: 3, shuffle: true, random_seed: 1) + # kf = Rumale::ModelSelection::StratifiedKFold.new(n_splits: 3, shuffle: true, random_seed: 1) # kf.split(samples, labels).each do |train_ids, test_ids| # train_samples = samples[train_ids, true] # test_samples = samples[test_ids, true] diff --git a/lib/svmkit/multiclass/one_vs_rest_classifier.rb b/lib/rumale/multiclass/one_vs_rest_classifier.rb similarity index 90% rename from lib/svmkit/multiclass/one_vs_rest_classifier.rb rename to lib/rumale/multiclass/one_vs_rest_classifier.rb index ce2378f3..e5aadb4d 100644 --- a/lib/svmkit/multiclass/one_vs_rest_classifier.rb +++ b/lib/rumale/multiclass/one_vs_rest_classifier.rb @@ -1,20 +1,20 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator.rb' -require 'svmkit/base/classifier.rb' +require 'rumale/base/base_estimator.rb' +require 'rumale/base/classifier.rb' -module SVMKit +module Rumale # This module consists of the classes that implement multi-class classification strategy. module Multiclass # @note - # All classifier in SVMKit support multi-class classifiction since version 0.2.7. + # All classifier in Rumale support multi-class classifiction since version 0.2.7. # There is no need to explicitly use this class for multiclass classifiction. # # OneVsRestClassifier is a class that implements One-vs-Rest (OvR) strategy for multi-class classification. # # @example - # base_estimator = SVMKit::LinearModel::LogisticRegression.new - # estimator = SVMKit::Multiclass::OneVsRestClassifier.new(estimator: base_estimator) + # base_estimator = Rumale::LinearModel::LogisticRegression.new + # estimator = Rumale::Multiclass::OneVsRestClassifier.new(estimator: base_estimator) # estimator.fit(training_samples, training_labels) # results = estimator.predict(testing_samples) class OneVsRestClassifier @@ -33,7 +33,7 @@ class OneVsRestClassifier # # @param estimator [Classifier] The (binary) classifier for construction a multi-class classifier. def initialize(estimator: nil) - check_params_type(SVMKit::Base::BaseEstimator, estimator: estimator) + check_params_type(Rumale::Base::BaseEstimator, estimator: estimator) @params = {} @params[:estimator] = estimator @estimators = nil diff --git a/lib/svmkit/naive_bayes/naive_bayes.rb b/lib/rumale/naive_bayes/naive_bayes.rb similarity index 97% rename from lib/svmkit/naive_bayes/naive_bayes.rb rename to lib/rumale/naive_bayes/naive_bayes.rb index eea45ce5..f2e63d0d 100644 --- a/lib/svmkit/naive_bayes/naive_bayes.rb +++ b/lib/rumale/naive_bayes/naive_bayes.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/classifier' +require 'rumale/base/base_estimator' +require 'rumale/base/classifier' -module SVMKit +module Rumale # This module consists of the classes that implement naive bayes models. module NaiveBayes # BaseNaiveBayes is a class that has methods for common processes of naive bayes classifier. @@ -46,7 +46,7 @@ def predict_proba(x) # GaussianNB is a class that implements Gaussian Naive Bayes classifier. # # @example - # estimator = SVMKit::NaiveBayes::GaussianNB.new + # estimator = Rumale::NaiveBayes::GaussianNB.new # estimator.fit(training_samples, training_labels) # results = estimator.predict(testing_samples) class GaussianNB < BaseNaiveBayes @@ -131,7 +131,7 @@ def marshal_load(obj) # MultinomialNB is a class that implements Multinomial Naive Bayes classifier. # # @example - # estimator = SVMKit::NaiveBayes::MultinomialNB.new(smoothing_param: 1.0) + # estimator = Rumale::NaiveBayes::MultinomialNB.new(smoothing_param: 1.0) # estimator.fit(training_samples, training_labels) # results = estimator.predict(testing_samples) # @@ -219,7 +219,7 @@ def marshal_load(obj) # BernoulliNB is a class that implements Bernoulli Naive Bayes classifier. # # @example - # estimator = SVMKit::NaiveBayes::BernoulliNB.new(smoothing_param: 1.0, bin_threshold: 0.0) + # estimator = Rumale::NaiveBayes::BernoulliNB.new(smoothing_param: 1.0, bin_threshold: 0.0) # estimator.fit(training_samples, training_labels) # results = estimator.predict(testing_samples) # diff --git a/lib/svmkit/nearest_neighbors/k_neighbors_classifier.rb b/lib/rumale/nearest_neighbors/k_neighbors_classifier.rb similarity index 96% rename from lib/svmkit/nearest_neighbors/k_neighbors_classifier.rb rename to lib/rumale/nearest_neighbors/k_neighbors_classifier.rb index 79679832..0b9fe8be 100644 --- a/lib/svmkit/nearest_neighbors/k_neighbors_classifier.rb +++ b/lib/rumale/nearest_neighbors/k_neighbors_classifier.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/classifier' +require 'rumale/base/base_estimator' +require 'rumale/base/classifier' -module SVMKit +module Rumale # This module consists of the classes that implement estimators based on nearest neighbors rule. module NearestNeighbors # KNeighborsClassifier is a class that implements the classifier with the k-nearest neighbors rule. @@ -11,7 +11,7 @@ module NearestNeighbors # # @example # estimator = - # SVMKit::NearestNeighbors::KNeighborsClassifier.new(n_neighbors = 5) + # Rumale::NearestNeighbors::KNeighborsClassifier.new(n_neighbors = 5) # estimator.fit(training_samples, traininig_labels) # results = estimator.predict(testing_samples) # diff --git a/lib/svmkit/nearest_neighbors/k_neighbors_regressor.rb b/lib/rumale/nearest_neighbors/k_neighbors_regressor.rb similarity index 95% rename from lib/svmkit/nearest_neighbors/k_neighbors_regressor.rb rename to lib/rumale/nearest_neighbors/k_neighbors_regressor.rb index a80a1b52..c34ea608 100644 --- a/lib/svmkit/nearest_neighbors/k_neighbors_regressor.rb +++ b/lib/rumale/nearest_neighbors/k_neighbors_regressor.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/regressor' +require 'rumale/base/base_estimator' +require 'rumale/base/regressor' -module SVMKit +module Rumale module NearestNeighbors # KNeighborsRegressor is a class that implements the regressor with the k-nearest neighbors rule. # The current implementation uses the Euclidean distance for finding the neighbors. # # @example # estimator = - # SVMKit::NearestNeighbors::KNeighborsRegressor.new(n_neighbors = 5) + # Rumale::NearestNeighbors::KNeighborsRegressor.new(n_neighbors = 5) # estimator.fit(training_samples, traininig_target_values) # results = estimator.predict(testing_samples) # diff --git a/lib/svmkit/optimizer/nadam.rb b/lib/rumale/optimizer/nadam.rb similarity index 94% rename from lib/svmkit/optimizer/nadam.rb rename to lib/rumale/optimizer/nadam.rb index 945284ab..4a25029b 100644 --- a/lib/svmkit/optimizer/nadam.rb +++ b/lib/rumale/optimizer/nadam.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'svmkit/validation' -require 'svmkit/base/base_estimator' +require 'rumale/validation' +require 'rumale/base/base_estimator' -module SVMKit +module Rumale # This module consists of the classes that implement optimizers adaptively tuning hyperparameters. module Optimizer # Nadam is a class that implements Nadam optimizer. # # @example - # optimizer = SVMKit::Optimizer::Nadam.new(learning_rate: 0.01, momentum: 0.9, decay1: 0.9, decay2: 0.999) - # estimator = SVMKit::LinearModel::LinearRegression.new(optimizer: optimizer, random_seed: 1) + # optimizer = Rumale::Optimizer::Nadam.new(learning_rate: 0.01, momentum: 0.9, decay1: 0.9, decay2: 0.999) + # estimator = Rumale::LinearModel::LinearRegression.new(optimizer: optimizer, random_seed: 1) # estimator.fit(samples, values) # # *Reference* diff --git a/lib/svmkit/optimizer/rmsprop.rb b/lib/rumale/optimizer/rmsprop.rb similarity index 92% rename from lib/svmkit/optimizer/rmsprop.rb rename to lib/rumale/optimizer/rmsprop.rb index 976ce6fb..2a40f1aa 100644 --- a/lib/svmkit/optimizer/rmsprop.rb +++ b/lib/rumale/optimizer/rmsprop.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/validation' -require 'svmkit/base/base_estimator' +require 'rumale/validation' +require 'rumale/base/base_estimator' -module SVMKit +module Rumale module Optimizer # RMSProp is a class that implements RMSProp optimizer. # # @example - # optimizer = SVMKit::Optimizer::RMSProp.new(learning_rate: 0.01, momentum: 0.9, decay: 0.9) - # estimator = SVMKit::LinearModel::LinearRegression.new(optimizer: optimizer, random_seed: 1) + # optimizer = Rumale::Optimizer::RMSProp.new(learning_rate: 0.01, momentum: 0.9, decay: 0.9) + # estimator = Rumale::LinearModel::LinearRegression.new(optimizer: optimizer, random_seed: 1) # estimator.fit(samples, values) # # *Reference* diff --git a/lib/svmkit/optimizer/sgd.rb b/lib/rumale/optimizer/sgd.rb similarity index 90% rename from lib/svmkit/optimizer/sgd.rb rename to lib/rumale/optimizer/sgd.rb index 143fbb0d..b6de03f0 100644 --- a/lib/svmkit/optimizer/sgd.rb +++ b/lib/rumale/optimizer/sgd.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/validation' -require 'svmkit/base/base_estimator' +require 'rumale/validation' +require 'rumale/base/base_estimator' -module SVMKit +module Rumale module Optimizer # SGD is a class that implements SGD optimizer. # # @example - # optimizer = SVMKit::Optimizer::SGD.new(learning_rate: 0.01, momentum: 0.9, decay: 0.9) - # estimator = SVMKit::LinearModel::LinearRegression.new(optimizer: optimizer, random_seed: 1) + # optimizer = Rumale::Optimizer::SGD.new(learning_rate: 0.01, momentum: 0.9, decay: 0.9) + # estimator = Rumale::LinearModel::LinearRegression.new(optimizer: optimizer, random_seed: 1) # estimator.fit(samples, values) class SGD include Base::BaseEstimator diff --git a/lib/svmkit/optimizer/yellow_fin.rb b/lib/rumale/optimizer/yellow_fin.rb similarity index 96% rename from lib/svmkit/optimizer/yellow_fin.rb rename to lib/rumale/optimizer/yellow_fin.rb index bb191b27..cb2d0f46 100644 --- a/lib/svmkit/optimizer/yellow_fin.rb +++ b/lib/rumale/optimizer/yellow_fin.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/validation' -require 'svmkit/base/base_estimator' +require 'rumale/validation' +require 'rumale/base/base_estimator' -module SVMKit +module Rumale module Optimizer # YellowFin is a class that implements YellowFin optimizer. # # @example - # optimizer = SVMKit::Optimizer::YellowFin.new(learning_rate: 0.01, momentum: 0.9, decay: 0.999, window_width: 20) - # estimator = SVMKit::LinearModel::LinearRegression.new(optimizer: optimizer, random_seed: 1) + # optimizer = Rumale::Optimizer::YellowFin.new(learning_rate: 0.01, momentum: 0.9, decay: 0.999, window_width: 20) + # estimator = Rumale::LinearModel::LinearRegression.new(optimizer: optimizer, random_seed: 1) # estimator.fit(samples, values) # # *Reference* diff --git a/lib/svmkit/pairwise_metric.rb b/lib/rumale/pairwise_metric.rb similarity index 79% rename from lib/svmkit/pairwise_metric.rb rename to lib/rumale/pairwise_metric.rb index fddf1510..952de533 100644 --- a/lib/svmkit/pairwise_metric.rb +++ b/lib/rumale/pairwise_metric.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'svmkit/validation' +require 'rumale/validation' -module SVMKit +module Rumale # Module for calculating pairwise distances, similarities, and kernels. module PairwiseMetric class << self @@ -13,8 +13,8 @@ class << self # @return [Numo::DFloat] (shape: [n_samples_x, n_samples_x] or [n_samples_x, n_samples_y] if y is given) def euclidean_distance(x, y = nil) y = x if y.nil? - SVMKit::Validation.check_sample_array(x) - SVMKit::Validation.check_sample_array(y) + Rumale::Validation.check_sample_array(x) + Rumale::Validation.check_sample_array(y) sum_x_vec = (x**2).sum(1) sum_y_vec = (y**2).sum(1) dot_xy_mat = x.dot(y.transpose) @@ -33,9 +33,9 @@ def euclidean_distance(x, y = nil) def rbf_kernel(x, y = nil, gamma = nil) y = x if y.nil? gamma ||= 1.0 / x.shape[1] - SVMKit::Validation.check_sample_array(x) - SVMKit::Validation.check_sample_array(y) - SVMKit::Validation.check_params_float(gamma: gamma) + Rumale::Validation.check_sample_array(x) + Rumale::Validation.check_sample_array(y) + Rumale::Validation.check_params_float(gamma: gamma) distance_matrix = euclidean_distance(x, y) Numo::NMath.exp((distance_matrix**2) * -gamma) end @@ -47,8 +47,8 @@ def rbf_kernel(x, y = nil, gamma = nil) # @return [Numo::DFloat] (shape: [n_samples_x, n_samples_x] or [n_samples_x, n_samples_y] if y is given) def linear_kernel(x, y = nil) y = x if y.nil? - SVMKit::Validation.check_sample_array(x) - SVMKit::Validation.check_sample_array(y) + Rumale::Validation.check_sample_array(x) + Rumale::Validation.check_sample_array(y) x.dot(y.transpose) end @@ -63,10 +63,10 @@ def linear_kernel(x, y = nil) def polynomial_kernel(x, y = nil, degree = 3, gamma = nil, coef = 1) y = x if y.nil? gamma ||= 1.0 / x.shape[1] - SVMKit::Validation.check_sample_array(x) - SVMKit::Validation.check_sample_array(y) - SVMKit::Validation.check_params_float(gamma: gamma) - SVMKit::Validation.check_params_integer(degree: degree, coef: coef) + Rumale::Validation.check_sample_array(x) + Rumale::Validation.check_sample_array(y) + Rumale::Validation.check_params_float(gamma: gamma) + Rumale::Validation.check_params_integer(degree: degree, coef: coef) (x.dot(y.transpose) * gamma + coef)**degree end @@ -80,10 +80,10 @@ def polynomial_kernel(x, y = nil, degree = 3, gamma = nil, coef = 1) def sigmoid_kernel(x, y = nil, gamma = nil, coef = 1) y = x if y.nil? gamma ||= 1.0 / x.shape[1] - SVMKit::Validation.check_sample_array(x) - SVMKit::Validation.check_sample_array(y) - SVMKit::Validation.check_params_float(gamma: gamma) - SVMKit::Validation.check_params_integer(coef: coef) + Rumale::Validation.check_sample_array(x) + Rumale::Validation.check_sample_array(y) + Rumale::Validation.check_params_float(gamma: gamma) + Rumale::Validation.check_params_integer(coef: coef) Numo::NMath.tanh(x.dot(y.transpose) * gamma + coef) end end diff --git a/lib/svmkit/pipeline/pipeline.rb b/lib/rumale/pipeline/pipeline.rb similarity index 95% rename from lib/svmkit/pipeline/pipeline.rb rename to lib/rumale/pipeline/pipeline.rb index 27809e7d..42a7269a 100644 --- a/lib/svmkit/pipeline/pipeline.rb +++ b/lib/rumale/pipeline/pipeline.rb @@ -1,17 +1,17 @@ # frozen_string_literal: true -require 'svmkit/validation' -require 'svmkit/base/base_estimator' +require 'rumale/validation' +require 'rumale/base/base_estimator' -module SVMKit +module Rumale # Module implements utilities of pipeline that cosists of a chain of transfomers and estimators. module Pipeline # Pipeline is a class that implements the function to perform the transformers and estimators sequencially. # # @example - # rbf = SVMKit::KernelApproximation::RBF.new(gamma: 1.0, n_coponents: 128, random_seed: 1) - # svc = SVMKit::LinearModel::SVC.new(reg_param: 1.0, fit_bias: true, max_iter: 5000, random_seed: 1) - # pipeline = SVMKit::Pipeline::Pipeline.new(steps: { trs: rbf, est: svc }) + # rbf = Rumale::KernelApproximation::RBF.new(gamma: 1.0, n_coponents: 128, random_seed: 1) + # svc = Rumale::LinearModel::SVC.new(reg_param: 1.0, fit_bias: true, max_iter: 5000, random_seed: 1) + # pipeline = Rumale::Pipeline::Pipeline.new(steps: { trs: rbf, est: svc }) # pipeline.fit(training_samples, traininig_labels) # results = pipeline.predict(testing_samples) # @@ -42,7 +42,7 @@ def initialize(steps:) def fit(x, y) check_sample_array(x) trans_x = apply_transforms(x, y, fit: true) - last_estimator.fit(trans_x, y) unless last_estimator.nil? + last_estimator&.fit(trans_x, y) self end @@ -171,7 +171,7 @@ def validate_steps(steps) end estimator = steps[steps.keys.last] - unless estimator.nil? || estimator.class.method_defined?(:fit) + unless estimator.nil? || estimator.class.method_defined?(:fit) # rubocop:disable Style/GuardClause raise TypeError, 'Class of last step in pipeline should be implemented fit method: ' \ "#{steps.keys.last} => #{estimator.class}" diff --git a/lib/svmkit/polynomial_model/base_factorization_machine.rb b/lib/rumale/polynomial_model/base_factorization_machine.rb similarity index 97% rename from lib/svmkit/polynomial_model/base_factorization_machine.rb rename to lib/rumale/polynomial_model/base_factorization_machine.rb index 99413c40..8c4ef22d 100644 --- a/lib/svmkit/polynomial_model/base_factorization_machine.rb +++ b/lib/rumale/polynomial_model/base_factorization_machine.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/optimizer/nadam' +require 'rumale/base/base_estimator' +require 'rumale/optimizer/nadam' -module SVMKit +module Rumale # This module consists of the classes that implement polynomial models. module PolynomialModel # BaseFactorizationMachine is an abstract class for implementation of Factorization Machine-based estimators. diff --git a/lib/svmkit/polynomial_model/factorization_machine_classifier.rb b/lib/rumale/polynomial_model/factorization_machine_classifier.rb similarity index 97% rename from lib/svmkit/polynomial_model/factorization_machine_classifier.rb rename to lib/rumale/polynomial_model/factorization_machine_classifier.rb index 020cc13d..7556a37b 100644 --- a/lib/svmkit/polynomial_model/factorization_machine_classifier.rb +++ b/lib/rumale/polynomial_model/factorization_machine_classifier.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'svmkit/base/classifier' -require 'svmkit/polynomial_model/base_factorization_machine' +require 'rumale/base/classifier' +require 'rumale/polynomial_model/base_factorization_machine' -module SVMKit +module Rumale # This module consists of the classes that implement polynomial models. module PolynomialModel # FactorizationMachineClassifier is a class that implements Factorization Machine @@ -12,7 +12,7 @@ module PolynomialModel # # @example # estimator = - # SVMKit::PolynomialModel::FactorizationMachineClassifier.new( + # Rumale::PolynomialModel::FactorizationMachineClassifier.new( # n_factors: 10, loss: 'hinge', reg_param_linear: 0.001, reg_param_factor: 0.001, # max_iter: 5000, batch_size: 50, random_seed: 1) # estimator.fit(training_samples, traininig_labels) diff --git a/lib/svmkit/polynomial_model/factorization_machine_regressor.rb b/lib/rumale/polynomial_model/factorization_machine_regressor.rb similarity index 96% rename from lib/svmkit/polynomial_model/factorization_machine_regressor.rb rename to lib/rumale/polynomial_model/factorization_machine_regressor.rb index e3d62d49..f5d12093 100644 --- a/lib/svmkit/polynomial_model/factorization_machine_regressor.rb +++ b/lib/rumale/polynomial_model/factorization_machine_regressor.rb @@ -1,16 +1,16 @@ # frozen_string_literal: true -require 'svmkit/base/regressor' -require 'svmkit/polynomial_model/base_factorization_machine' +require 'rumale/base/regressor' +require 'rumale/polynomial_model/base_factorization_machine' -module SVMKit +module Rumale module PolynomialModel # FactorizationMachineRegressor is a class that implements Factorization Machine # with stochastic gradient descent (SGD) optimization. # # @example # estimator = - # SVMKit::PolynomialModel::FactorizationMachineRegressor.new( + # Rumale::PolynomialModel::FactorizationMachineRegressor.new( # n_factors: 10, reg_param_linear: 0.1, reg_param_factor: 0.1, # max_iter: 5000, batch_size: 50, random_seed: 1) # estimator.fit(training_samples, traininig_values) diff --git a/lib/svmkit/preprocessing/l2_normalizer.rb b/lib/rumale/preprocessing/l2_normalizer.rb similarity index 92% rename from lib/svmkit/preprocessing/l2_normalizer.rb rename to lib/rumale/preprocessing/l2_normalizer.rb index 6bbc5bc7..c7e49df9 100644 --- a/lib/svmkit/preprocessing/l2_normalizer.rb +++ b/lib/rumale/preprocessing/l2_normalizer.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/transformer' +require 'rumale/base/base_estimator' +require 'rumale/base/transformer' -module SVMKit +module Rumale # This module consists of the classes that perform preprocessings. module Preprocessing # Normalize samples to unit L2-norm. # # @example - # normalizer = SVMKit::Preprocessing::StandardScaler.new + # normalizer = Rumale::Preprocessing::StandardScaler.new # new_samples = normalizer.fit_transform(samples) class L2Normalizer include Base::BaseEstimator diff --git a/lib/svmkit/preprocessing/label_encoder.rb b/lib/rumale/preprocessing/label_encoder.rb similarity index 94% rename from lib/svmkit/preprocessing/label_encoder.rb rename to lib/rumale/preprocessing/label_encoder.rb index ee09180b..3015de7f 100644 --- a/lib/svmkit/preprocessing/label_encoder.rb +++ b/lib/rumale/preprocessing/label_encoder.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/transformer' +require 'rumale/base/base_estimator' +require 'rumale/base/transformer' -module SVMKit +module Rumale module Preprocessing # Encode labels to values between 0 and n_classes - 1. # # @example - # encoder = SVMKit::Preprocessing::LabelEncoder.new + # encoder = Rumale::Preprocessing::LabelEncoder.new # labels = Numo::Int32[1, 8, 8, 15, 0] # encoded_labels = encoder.fit_transform(labels) # # > pp encoded_labels diff --git a/lib/svmkit/preprocessing/min_max_scaler.rb b/lib/rumale/preprocessing/min_max_scaler.rb similarity index 95% rename from lib/svmkit/preprocessing/min_max_scaler.rb rename to lib/rumale/preprocessing/min_max_scaler.rb index 03d1f90b..b4b9b7fd 100644 --- a/lib/svmkit/preprocessing/min_max_scaler.rb +++ b/lib/rumale/preprocessing/min_max_scaler.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/transformer' +require 'rumale/base/base_estimator' +require 'rumale/base/transformer' -module SVMKit +module Rumale # This module consists of the classes that perform preprocessings. module Preprocessing # Normalize samples by scaling each feature to a given range. # # @example - # normalizer = SVMKit::Preprocessing::MinMaxScaler.new(feature_range: [0.0, 1.0]) + # normalizer = Rumale::Preprocessing::MinMaxScaler.new(feature_range: [0.0, 1.0]) # new_training_samples = normalizer.fit_transform(training_samples) # new_testing_samples = normalizer.transform(testing_samples) class MinMaxScaler diff --git a/lib/svmkit/preprocessing/one_hot_encoder.rb b/lib/rumale/preprocessing/one_hot_encoder.rb similarity index 95% rename from lib/svmkit/preprocessing/one_hot_encoder.rb rename to lib/rumale/preprocessing/one_hot_encoder.rb index 6d45223c..daf455e1 100644 --- a/lib/svmkit/preprocessing/one_hot_encoder.rb +++ b/lib/rumale/preprocessing/one_hot_encoder.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/transformer' +require 'rumale/base/base_estimator' +require 'rumale/base/transformer' -module SVMKit +module Rumale module Preprocessing # Encode categorical integer features to one-hot-vectors. # # @example - # encoder = SVMKit::Preprocessing::OneHotEncoder.new + # encoder = Rumale::Preprocessing::OneHotEncoder.new # labels = Numo::Int32[0, 0, 2, 3, 2, 1] # one_hot_vectors = encoder.fit_transform(labels) # # > pp one_hot_vectors diff --git a/lib/svmkit/preprocessing/standard_scaler.rb b/lib/rumale/preprocessing/standard_scaler.rb similarity index 94% rename from lib/svmkit/preprocessing/standard_scaler.rb rename to lib/rumale/preprocessing/standard_scaler.rb index fe37728f..6c642baf 100644 --- a/lib/svmkit/preprocessing/standard_scaler.rb +++ b/lib/rumale/preprocessing/standard_scaler.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/base/transformer' +require 'rumale/base/base_estimator' +require 'rumale/base/transformer' -module SVMKit +module Rumale # This module consists of the classes that perform preprocessings. module Preprocessing # Normalize samples by centering and scaling to unit variance. # # @example - # normalizer = SVMKit::Preprocessing::StandardScaler.new + # normalizer = Rumale::Preprocessing::StandardScaler.new # new_training_samples = normalizer.fit_transform(training_samples) # new_testing_samples = normalizer.transform(testing_samples) class StandardScaler diff --git a/lib/svmkit/probabilistic_output.rb b/lib/rumale/probabilistic_output.rb similarity index 93% rename from lib/svmkit/probabilistic_output.rb rename to lib/rumale/probabilistic_output.rb index 4b3597d4..cb05d84b 100644 --- a/lib/svmkit/probabilistic_output.rb +++ b/lib/rumale/probabilistic_output.rb @@ -1,14 +1,14 @@ # frozen_string_literal: true -module SVMKit +module Rumale # Module for calculating posterior class probabilities with SVM outputs. # This module is used for internal processes. # # @example - # estimator = SVMKit::LinearModel::SVC.new + # estimator = Rumale::LinearModel::SVC.new # estimator.fit(x, bin_y) # df = estimator.decision_function(x) - # params = SVMKit::ProbabilisticOutput.fit_sigmoid(df, bin_y) + # params = Rumale::ProbabilisticOutput.fit_sigmoid(df, bin_y) # probs = 1 / (Numo::NMath.exp(params[0] * df + params[1]) + 1) # # *Reference* @@ -74,8 +74,8 @@ def error_function(target_probs, df, alpha, beta) pos = fn.ge(0.0) neg = fn.lt(0.0) err = 0.0 - err += (target_probs[pos] * fn[pos] + Numo::NMath.log(1 + Numo::NMath.exp(-fn[pos]))).sum if pos.count > 0 - err += ((target_probs[neg] - 1) * fn[neg] + Numo::NMath.log(1 + Numo::NMath.exp(fn[neg]))).sum if neg.count > 0 + err += (target_probs[pos] * fn[pos] + Numo::NMath.log(1 + Numo::NMath.exp(-fn[pos]))).sum if pos.count.positive? + err += ((target_probs[neg] - 1) * fn[neg] + Numo::NMath.log(1 + Numo::NMath.exp(fn[neg]))).sum if neg.count.positive? err end @@ -84,8 +84,8 @@ def predicted_probs(df, alpha, beta) pos = fn.ge(0.0) neg = fn.lt(0.0) probs = Numo::DFloat.zeros(df.shape[0]) - probs[pos] = Numo::NMath.exp(-fn[pos]) / (1 + Numo::NMath.exp(-fn[pos])) if pos.count > 0 - probs[neg] = 1 / (1 + Numo::NMath.exp(fn[neg])) if neg.count > 0 + probs[pos] = Numo::NMath.exp(-fn[pos]) / (1 + Numo::NMath.exp(-fn[pos])) if pos.count.positive? + probs[neg] = 1 / (1 + Numo::NMath.exp(fn[neg])) if neg.count.positive? probs end diff --git a/lib/svmkit/tree/base_decision_tree.rb b/lib/rumale/tree/base_decision_tree.rb similarity index 98% rename from lib/svmkit/tree/base_decision_tree.rb rename to lib/rumale/tree/base_decision_tree.rb index 7835d7a3..7ae1bfcb 100644 --- a/lib/svmkit/tree/base_decision_tree.rb +++ b/lib/rumale/tree/base_decision_tree.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -require 'svmkit/base/base_estimator' -require 'svmkit/tree/node' +require 'rumale/base/base_estimator' +require 'rumale/tree/node' -module SVMKit +module Rumale # This module consists of the classes that implement tree models. module Tree # BaseDecisionTree is an abstract class for implementation of decision tree-based estimator. diff --git a/lib/svmkit/tree/decision_tree_classifier.rb b/lib/rumale/tree/decision_tree_classifier.rb similarity index 97% rename from lib/svmkit/tree/decision_tree_classifier.rb rename to lib/rumale/tree/decision_tree_classifier.rb index 925ac906..210184f7 100644 --- a/lib/svmkit/tree/decision_tree_classifier.rb +++ b/lib/rumale/tree/decision_tree_classifier.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/tree/base_decision_tree' -require 'svmkit/base/classifier' +require 'rumale/tree/base_decision_tree' +require 'rumale/base/classifier' -module SVMKit +module Rumale module Tree # DecisionTreeClassifier is a class that implements decision tree for classification. # # @example # estimator = - # SVMKit::Tree::DecisionTreeClassifier.new( + # Rumale::Tree::DecisionTreeClassifier.new( # criterion: 'gini', max_depth: 3, max_leaf_nodes: 10, min_samples_leaf: 5, random_seed: 1) # estimator.fit(training_samples, traininig_labels) # results = estimator.predict(testing_samples) diff --git a/lib/svmkit/tree/decision_tree_regressor.rb b/lib/rumale/tree/decision_tree_regressor.rb similarity index 97% rename from lib/svmkit/tree/decision_tree_regressor.rb rename to lib/rumale/tree/decision_tree_regressor.rb index 092d27bf..fff25fd1 100644 --- a/lib/svmkit/tree/decision_tree_regressor.rb +++ b/lib/rumale/tree/decision_tree_regressor.rb @@ -1,15 +1,15 @@ # frozen_string_literal: true -require 'svmkit/tree/base_decision_tree' -require 'svmkit/base/regressor' +require 'rumale/tree/base_decision_tree' +require 'rumale/base/regressor' -module SVMKit +module Rumale module Tree # DecisionTreeRegressor is a class that implements decision tree for regression. # # @example # estimator = - # SVMKit::Tree::DecisionTreeRegressor.new( + # Rumale::Tree::DecisionTreeRegressor.new( # max_depth: 3, max_leaf_nodes: 10, min_samples_leaf: 5, random_seed: 1) # estimator.fit(training_samples, traininig_values) # results = estimator.predict(testing_samples) diff --git a/lib/svmkit/tree/node.rb b/lib/rumale/tree/node.rb similarity index 99% rename from lib/svmkit/tree/node.rb rename to lib/rumale/tree/node.rb index cef4a0ca..af362968 100644 --- a/lib/svmkit/tree/node.rb +++ b/lib/rumale/tree/node.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module SVMKit +module Rumale module Tree # Node is a class that implements node used for construction of decision tree. # This class is used for internal data structures. diff --git a/lib/svmkit/utils.rb b/lib/rumale/utils.rb similarity index 98% rename from lib/svmkit/utils.rb rename to lib/rumale/utils.rb index 562a77d5..32a3bd47 100644 --- a/lib/svmkit/utils.rb +++ b/lib/rumale/utils.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module SVMKit +module Rumale # @!visibility private module Utils module_function diff --git a/lib/svmkit/validation.rb b/lib/rumale/validation.rb similarity index 97% rename from lib/svmkit/validation.rb rename to lib/rumale/validation.rb index e0a241c1..d40fc5b3 100644 --- a/lib/svmkit/validation.rb +++ b/lib/rumale/validation.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module SVMKit +module Rumale # @!visibility private module Validation module_function @@ -72,7 +72,7 @@ def check_params_boolean(params = {}) # @!visibility private def check_params_positive(params = {}) - params.reject { |_, v| v.nil? }.each { |k, v| raise ArgumentError, "Expect #{k} to be positive value" if v < 0 } + params.reject { |_, v| v.nil? }.each { |k, v| raise ArgumentError, "Expect #{k} to be positive value" if v.negative? } nil end end diff --git a/lib/svmkit/values.rb b/lib/rumale/values.rb similarity index 93% rename from lib/svmkit/values.rb rename to lib/rumale/values.rb index c93d6976..e5ee6abf 100644 --- a/lib/svmkit/values.rb +++ b/lib/rumale/values.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module SVMKit +module Rumale # @!visibility private module Values module_function diff --git a/lib/rumale/version.rb b/lib/rumale/version.rb new file mode 100644 index 00000000..dc1b0147 --- /dev/null +++ b/lib/rumale/version.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +# Rumale is a machine learning library in Ruby. +module Rumale + VERSION = '0.8.0' +end diff --git a/lib/svmkit.rb b/lib/svmkit.rb deleted file mode 100644 index ac25b4c8..00000000 --- a/lib/svmkit.rb +++ /dev/null @@ -1,70 +0,0 @@ -# frozen_string_literal: true - -require 'numo/narray' - -require 'svmkit/version' -require 'svmkit/validation' -require 'svmkit/values' -require 'svmkit/utils' -require 'svmkit/pairwise_metric' -require 'svmkit/dataset' -require 'svmkit/probabilistic_output' -require 'svmkit/base/base_estimator' -require 'svmkit/base/classifier' -require 'svmkit/base/regressor' -require 'svmkit/base/cluster_analyzer' -require 'svmkit/base/transformer' -require 'svmkit/base/splitter' -require 'svmkit/base/evaluator' -require 'svmkit/optimizer/sgd' -require 'svmkit/optimizer/rmsprop' -require 'svmkit/optimizer/nadam' -require 'svmkit/optimizer/yellow_fin' -require 'svmkit/pipeline/pipeline' -require 'svmkit/kernel_approximation/rbf' -require 'svmkit/linear_model/base_linear_model' -require 'svmkit/linear_model/svc' -require 'svmkit/linear_model/svr' -require 'svmkit/linear_model/logistic_regression' -require 'svmkit/linear_model/linear_regression' -require 'svmkit/linear_model/ridge' -require 'svmkit/linear_model/lasso' -require 'svmkit/kernel_machine/kernel_svc' -require 'svmkit/polynomial_model/base_factorization_machine' -require 'svmkit/polynomial_model/factorization_machine_classifier' -require 'svmkit/polynomial_model/factorization_machine_regressor' -require 'svmkit/multiclass/one_vs_rest_classifier' -require 'svmkit/nearest_neighbors/k_neighbors_classifier' -require 'svmkit/nearest_neighbors/k_neighbors_regressor' -require 'svmkit/naive_bayes/naive_bayes' -require 'svmkit/tree/node' -require 'svmkit/tree/base_decision_tree' -require 'svmkit/tree/decision_tree_classifier' -require 'svmkit/tree/decision_tree_regressor' -require 'svmkit/ensemble/ada_boost_classifier' -require 'svmkit/ensemble/ada_boost_regressor' -require 'svmkit/ensemble/random_forest_classifier' -require 'svmkit/ensemble/random_forest_regressor' -require 'svmkit/clustering/k_means' -require 'svmkit/clustering/dbscan' -require 'svmkit/decomposition/pca' -require 'svmkit/decomposition/nmf' -require 'svmkit/preprocessing/l2_normalizer' -require 'svmkit/preprocessing/min_max_scaler' -require 'svmkit/preprocessing/standard_scaler' -require 'svmkit/preprocessing/label_encoder' -require 'svmkit/preprocessing/one_hot_encoder' -require 'svmkit/model_selection/k_fold' -require 'svmkit/model_selection/stratified_k_fold' -require 'svmkit/model_selection/cross_validation' -require 'svmkit/model_selection/grid_search_cv' -require 'svmkit/evaluation_measure/accuracy' -require 'svmkit/evaluation_measure/precision' -require 'svmkit/evaluation_measure/recall' -require 'svmkit/evaluation_measure/f_score' -require 'svmkit/evaluation_measure/log_loss' -require 'svmkit/evaluation_measure/r2_score' -require 'svmkit/evaluation_measure/mean_squared_error' -require 'svmkit/evaluation_measure/mean_absolute_error' -require 'svmkit/evaluation_measure/purity' -require 'svmkit/evaluation_measure/normalized_mutual_information' diff --git a/lib/svmkit/version.rb b/lib/svmkit/version.rb deleted file mode 100644 index ba39ac73..00000000 --- a/lib/svmkit/version.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -# SVMKit is a machine learning library in Ruby. -module SVMKit - # @!visibility private - VERSION = '0.8.0'.freeze -end diff --git a/svmkit.gemspec b/rumale.gemspec similarity index 55% rename from svmkit.gemspec rename to rumale.gemspec index 4a41dda3..1e82f91a 100644 --- a/svmkit.gemspec +++ b/rumale.gemspec @@ -1,34 +1,26 @@ lib = File.expand_path('lib', __dir__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'svmkit/version' +require 'rumale/version' Gem::Specification.new do |spec| - spec.name = 'svmkit' - spec.version = SVMKit::VERSION + spec.name = 'rumale' + spec.version = Rumale::VERSION spec.authors = ['yoshoku'] spec.email = ['yoshoku@outlook.com'] spec.summary = <= 0.9.1' diff --git a/spec/base/classifier_spec.rb b/spec/base/classifier_spec.rb index 699eb48a..223aa2e4 100644 --- a/spec/base/classifier_spec.rb +++ b/spec/base/classifier_spec.rb @@ -2,10 +2,10 @@ require 'spec_helper' -RSpec.describe SVMKit::Base::Classifier do +RSpec.describe Rumale::Base::Classifier do let(:dummy_class) do class Dummy - include SVMKit::Base::Classifier + include Rumale::Base::Classifier end Dummy.new end diff --git a/spec/base/cluster_analyzer_spec.rb b/spec/base/cluster_analyzer_spec.rb index 81daa037..c8c65b00 100644 --- a/spec/base/cluster_analyzer_spec.rb +++ b/spec/base/cluster_analyzer_spec.rb @@ -2,10 +2,10 @@ require 'spec_helper' -RSpec.describe SVMKit::Base::ClusterAnalyzer do +RSpec.describe Rumale::Base::ClusterAnalyzer do let(:dummy_class) do class Dummy - include SVMKit::Base::ClusterAnalyzer + include Rumale::Base::ClusterAnalyzer end Dummy.new end diff --git a/spec/base/evaluator_spec.rb b/spec/base/evaluator_spec.rb index 9f27aad8..bc1e9efb 100644 --- a/spec/base/evaluator_spec.rb +++ b/spec/base/evaluator_spec.rb @@ -2,10 +2,10 @@ require 'spec_helper' -RSpec.describe SVMKit::Base::Evaluator do +RSpec.describe Rumale::Base::Evaluator do let(:dummy_class) do class Dummy - include SVMKit::Base::Evaluator + include Rumale::Base::Evaluator end Dummy.new end diff --git a/spec/base/regressor_spec.rb b/spec/base/regressor_spec.rb index 3ddc6eb2..da516444 100644 --- a/spec/base/regressor_spec.rb +++ b/spec/base/regressor_spec.rb @@ -2,10 +2,10 @@ require 'spec_helper' -RSpec.describe SVMKit::Base::Regressor do +RSpec.describe Rumale::Base::Regressor do let(:dummy_class) do class Dummy - include SVMKit::Base::Regressor + include Rumale::Base::Regressor end Dummy.new end diff --git a/spec/base/splitter_spec.rb b/spec/base/splitter_spec.rb index 9204a850..6888939a 100644 --- a/spec/base/splitter_spec.rb +++ b/spec/base/splitter_spec.rb @@ -2,10 +2,10 @@ require 'spec_helper' -RSpec.describe SVMKit::Base::Splitter do +RSpec.describe Rumale::Base::Splitter do let(:dummy_class) do class Dummy - include SVMKit::Base::Splitter + include Rumale::Base::Splitter end Dummy.new end diff --git a/spec/base/transformer_spec.rb b/spec/base/transformer_spec.rb index a8ebeebb..ba340ee3 100644 --- a/spec/base/transformer_spec.rb +++ b/spec/base/transformer_spec.rb @@ -2,10 +2,10 @@ require 'spec_helper' -RSpec.describe SVMKit::Base::Transformer do +RSpec.describe Rumale::Base::Transformer do let(:dummy_class) do class Dummy - include SVMKit::Base::Transformer + include Rumale::Base::Transformer end Dummy.new end diff --git a/spec/clustering/dbscan_spec.rb b/spec/clustering/dbscan_spec.rb index 6f3ec5aa..834bb146 100644 --- a/spec/clustering/dbscan_spec.rb +++ b/spec/clustering/dbscan_spec.rb @@ -3,7 +3,7 @@ require 'pp' require 'spec_helper' -RSpec.describe SVMKit::Clustering::DBSCAN do +RSpec.describe Rumale::Clustering::DBSCAN do let(:x_mlt) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } let(:y_mlt) { Marshal.load(File.read(__dir__ + '/../test_labels_three_clusters.dat')) - 1 } let(:analyzer) { described_class.new(eps: 1.0) } diff --git a/spec/clustering/k_means_spec.rb b/spec/clustering/k_means_spec.rb index 20af3109..f46f6e59 100644 --- a/spec/clustering/k_means_spec.rb +++ b/spec/clustering/k_means_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Clustering::KMeans do +RSpec.describe Rumale::Clustering::KMeans do let(:x_mlt) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } let(:y_mlt) { Marshal.load(File.read(__dir__ + '/../test_labels_three_clusters.dat')) - 1 } let(:analyzer) { described_class.new(n_clusters: 3, max_iter: 50, random_seed: 1) } diff --git a/spec/datasets_spec.rb b/spec/datasets_spec.rb index 6c133874..3e51b089 100644 --- a/spec/datasets_spec.rb +++ b/spec/datasets_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Dataset do +RSpec.describe Rumale::Dataset do let(:labels) { Numo::Int32.asarray([1, 2, 2, 1, 1, 0]) } let(:target_variables) { Numo::DFloat.asarray([1.2, 2.0, 2.3, 1.0, 1.1, 0.64]) } let(:mult_target_vals) { Numo::DFloat.asarray([[1.2, 2.0], [2.3, 1.0], [1.1, 0.64], [2.1, 1.9], [0.0, 1.7], [8.7, 4.1]]) } diff --git a/spec/decomposition/nmf_spec.rb b/spec/decomposition/nmf_spec.rb index 23352f34..67794015 100644 --- a/spec/decomposition/nmf_spec.rb +++ b/spec/decomposition/nmf_spec.rb @@ -2,15 +2,15 @@ require 'spec_helper' -RSpec.describe SVMKit::Decomposition::NMF do +RSpec.describe Rumale::Decomposition::NMF do let(:n_samples) { 200 } let(:n_features) { 6 } let(:n_components) { 3 } let(:decomposer) { described_class.new(n_components: n_components, max_iter: 10000, tol: 1.0e-4, random_seed: 1) } let(:x) do rng = Random.new(1) - a = SVMKit::Utils.rand_uniform([n_samples, n_components], rng) - b = SVMKit::Utils.rand_uniform([n_components, n_features], rng) + a = Rumale::Utils.rand_uniform([n_samples, n_components], rng) + b = Rumale::Utils.rand_uniform([n_components, n_features], rng) a.dot(b) end diff --git a/spec/decomposition/pca_spec.rb b/spec/decomposition/pca_spec.rb index 123ddf58..58240bea 100644 --- a/spec/decomposition/pca_spec.rb +++ b/spec/decomposition/pca_spec.rb @@ -2,11 +2,11 @@ require 'spec_helper' -RSpec.describe SVMKit::Decomposition::PCA do +RSpec.describe Rumale::Decomposition::PCA do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:n_components) { 16 } let(:decomposer) { described_class.new(n_components: n_components, tol: 1.0e-8, random_seed: 1) } - let(:transformer) { SVMKit::KernelApproximation::RBF.new(gamma: 1.0, n_components: 32, random_seed: 1) } + let(:transformer) { Rumale::KernelApproximation::RBF.new(gamma: 1.0, n_components: 32, random_seed: 1) } it 'projects high-dimensinal data into subspace.' do samples = transformer.fit_transform(x) diff --git a/spec/ensemble/ada_boost_classifier_spec.rb b/spec/ensemble/ada_boost_classifier_spec.rb index a4a4c6f6..956c8f85 100644 --- a/spec/ensemble/ada_boost_classifier_spec.rb +++ b/spec/ensemble/ada_boost_classifier_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Ensemble::AdaBoostClassifier do +RSpec.describe Rumale::Ensemble::AdaBoostClassifier do let(:x_bin) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y_bin) { Marshal.load(File.read(__dir__ + '/../test_labels.dat')) } let(:x_mlt) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } @@ -13,7 +13,7 @@ _n_samples, n_features = x_bin.shape estimator.fit(x_bin, y_bin) expect(estimator.estimators.class).to eq(Array) - expect(estimator.estimators[0].class).to eq(SVMKit::Tree::DecisionTreeClassifier) + expect(estimator.estimators[0].class).to eq(Rumale::Tree::DecisionTreeClassifier) expect(estimator.classes.class).to eq(Numo::Int32) expect(estimator.classes.size).to eq(2) expect(estimator.feature_importances.class).to eq(Numo::DFloat) @@ -26,7 +26,7 @@ _n_samples, n_features = x_mlt.shape estimator.fit(x_mlt, y_mlt) expect(estimator.estimators.class).to eq(Array) - expect(estimator.estimators[0].class).to eq(SVMKit::Tree::DecisionTreeClassifier) + expect(estimator.estimators[0].class).to eq(Rumale::Tree::DecisionTreeClassifier) expect(estimator.classes.class).to eq(Numo::Int32) expect(estimator.classes.size).to eq(3) expect(estimator.feature_importances.class).to eq(Numo::DFloat) diff --git a/spec/ensemble/ada_boost_regressor_spec.rb b/spec/ensemble/ada_boost_regressor_spec.rb index 37cdb343..0e4fdc67 100644 --- a/spec/ensemble/ada_boost_regressor_spec.rb +++ b/spec/ensemble/ada_boost_regressor_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Ensemble::AdaBoostRegressor do +RSpec.describe Rumale::Ensemble::AdaBoostRegressor do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x[true, 0] + x[true, 1]**2 } let(:y_mult) { Numo::DFloat[x[true, 0].to_a, (x[true, 1]**2).to_a].transpose.dot(Numo::DFloat[[0.6, 0.4], [0.0, 0.1]]) } @@ -15,7 +15,7 @@ estimator.fit(x, y) expect(estimator.estimators.class).to eq(Array) - expect(estimator.estimators[0].class).to eq(SVMKit::Tree::DecisionTreeRegressor) + expect(estimator.estimators[0].class).to eq(Rumale::Tree::DecisionTreeRegressor) expect(estimator.feature_importances.class).to eq(Numo::DFloat) expect(estimator.feature_importances.shape[0]).to eq(n_features) expect(estimator.feature_importances.shape[1]).to be_nil diff --git a/spec/ensemble/random_forest_classifier_spec.rb b/spec/ensemble/random_forest_classifier_spec.rb index 7eaf9ad1..a8df587d 100644 --- a/spec/ensemble/random_forest_classifier_spec.rb +++ b/spec/ensemble/random_forest_classifier_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Ensemble::RandomForestClassifier do +RSpec.describe Rumale::Ensemble::RandomForestClassifier do let(:x_bin) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y_bin) { Marshal.load(File.read(__dir__ + '/../test_labels.dat')) } let(:x_mlt) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } @@ -18,7 +18,7 @@ expect(estimator.params[:max_features]).to eq(2) expect(estimator.estimators.class).to eq(Array) expect(estimator.estimators.size).to eq(n_estimators) - expect(estimator.estimators[0].class).to eq(SVMKit::Tree::DecisionTreeClassifier) + expect(estimator.estimators[0].class).to eq(Rumale::Tree::DecisionTreeClassifier) expect(estimator.classes.class).to eq(Numo::Int32) expect(estimator.classes.size).to eq(2) expect(estimator.feature_importances.class).to eq(Numo::DFloat) @@ -32,7 +32,7 @@ estimator.fit(x_mlt, y_mlt) expect(estimator.estimators.class).to eq(Array) expect(estimator.estimators.size).to eq(n_estimators) - expect(estimator.estimators[0].class).to eq(SVMKit::Tree::DecisionTreeClassifier) + expect(estimator.estimators[0].class).to eq(Rumale::Tree::DecisionTreeClassifier) expect(estimator.classes.class).to eq(Numo::Int32) expect(estimator.classes.size).to eq(3) expect(estimator.feature_importances.class).to eq(Numo::DFloat) diff --git a/spec/ensemble/random_forest_regressor_spec.rb b/spec/ensemble/random_forest_regressor_spec.rb index 795b57a0..4a129b67 100644 --- a/spec/ensemble/random_forest_regressor_spec.rb +++ b/spec/ensemble/random_forest_regressor_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Ensemble::RandomForestRegressor do +RSpec.describe Rumale::Ensemble::RandomForestRegressor do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x[true, 0] + x[true, 1]**2 } let(:y_mult) { Numo::DFloat[x[true, 0].to_a, (x[true, 1]**2).to_a].transpose.dot(Numo::DFloat[[0.6, 0.4], [0.0, 0.1]]) } @@ -19,7 +19,7 @@ expect(estimator.params[:max_features]).to eq(2) expect(estimator.estimators.class).to eq(Array) expect(estimator.estimators.size).to eq(n_estimators) - expect(estimator.estimators[0].class).to eq(SVMKit::Tree::DecisionTreeRegressor) + expect(estimator.estimators[0].class).to eq(Rumale::Tree::DecisionTreeRegressor) expect(estimator.feature_importances.class).to eq(Numo::DFloat) expect(estimator.feature_importances.shape[0]).to eq(n_features) expect(estimator.feature_importances.shape[1]).to be_nil @@ -39,7 +39,7 @@ expect(estimator.estimators.class).to eq(Array) expect(estimator.estimators.size).to eq(n_estimators) - expect(estimator.estimators[0].class).to eq(SVMKit::Tree::DecisionTreeRegressor) + expect(estimator.estimators[0].class).to eq(Rumale::Tree::DecisionTreeRegressor) expect(estimator.feature_importances.class).to eq(Numo::DFloat) expect(estimator.feature_importances.shape[0]).to eq(n_features) expect(estimator.feature_importances.shape[1]).to be_nil diff --git a/spec/evaluation_measure/accuracy_spec.rb b/spec/evaluation_measure/accuracy_spec.rb index 3b1bc112..266ad47e 100644 --- a/spec/evaluation_measure/accuracy_spec.rb +++ b/spec/evaluation_measure/accuracy_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::EvaluationMeasure::Accuracy do +RSpec.describe Rumale::EvaluationMeasure::Accuracy do let(:bin_ground_truth) { Numo::Int32[1, 1, 1, 1, 1, -1, -1, -1, -1, -1] } let(:bin_predicted) { Numo::Int32[-1, -1, 1, 1, 1, -1, -1, 1, 1, 1] } let(:mult_ground_truth) { Numo::Int32[1, 1, 2, 2, 3, 3, 0, 0, 4, 4] } diff --git a/spec/evaluation_measure/f_score_spec.rb b/spec/evaluation_measure/f_score_spec.rb index 6bf0abd4..502bc527 100644 --- a/spec/evaluation_measure/f_score_spec.rb +++ b/spec/evaluation_measure/f_score_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::EvaluationMeasure::FScore do +RSpec.describe Rumale::EvaluationMeasure::FScore do let(:bin_ground_truth) { Numo::Int32[1, 1, 1, 1, -1, -1, -1, -1] } let(:bin_predicted) { Numo::Int32[-1, -1, 1, 1, -1, -1, 1, 1] } let(:mult_ground_truth) { Numo::Int32[0, 1, 2, 0, 1, 2, 3, 3, 0, 0] } diff --git a/spec/evaluation_measure/log_loss_spec.rb b/spec/evaluation_measure/log_loss_spec.rb index 5fcf5a79..5503401f 100644 --- a/spec/evaluation_measure/log_loss_spec.rb +++ b/spec/evaluation_measure/log_loss_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::EvaluationMeasure::LogLoss do +RSpec.describe Rumale::EvaluationMeasure::LogLoss do let(:bin_ground_truth) { Numo::Int32[1, 1, 1, 1, 1, -1, -1, -1, -1, -1] } let(:bin_predicted) { Numo::DFloat[0.9, 0.8, 0.6, 0.6, 0.8, 0.1, 0.2, 0.4, 0.4, 0.2] } let(:mult_ground_truth) { Numo::Int32[1, 0, 0, 2] } diff --git a/spec/evaluation_measure/mean_absolute_error_spec.rb b/spec/evaluation_measure/mean_absolute_error_spec.rb index 20160eab..85251a7b 100644 --- a/spec/evaluation_measure/mean_absolute_error_spec.rb +++ b/spec/evaluation_measure/mean_absolute_error_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::EvaluationMeasure::MeanAbsoluteError do +RSpec.describe Rumale::EvaluationMeasure::MeanAbsoluteError do let(:ground_truth) { Numo::DFloat[3.2, -0.2, 2.2, 6.8] } let(:estimated) { Numo::DFloat[2.9, -0.1, 2.3, 7.2] } let(:mult_ground_truth) { Numo::DFloat[[0.5, 1.9], [-0.7, 1.8], [7.9, -6.5]] } diff --git a/spec/evaluation_measure/mean_squared_error_spec.rb b/spec/evaluation_measure/mean_squared_error_spec.rb index d7aee2ea..5235ec3b 100644 --- a/spec/evaluation_measure/mean_squared_error_spec.rb +++ b/spec/evaluation_measure/mean_squared_error_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::EvaluationMeasure::MeanSquaredError do +RSpec.describe Rumale::EvaluationMeasure::MeanSquaredError do let(:ground_truth) { Numo::DFloat[3.2, -0.2, 2.2, 6.8] } let(:estimated) { Numo::DFloat[2.9, -0.1, 2.3, 7.2] } let(:mult_ground_truth) { Numo::DFloat[[0.5, 1.9], [-0.7, 1.8], [7.9, -6.5]] } diff --git a/spec/evaluation_measure/normalized_mutual_information_spec.rb b/spec/evaluation_measure/normalized_mutual_information_spec.rb index b49dba7e..e6e669a6 100644 --- a/spec/evaluation_measure/normalized_mutual_information_spec.rb +++ b/spec/evaluation_measure/normalized_mutual_information_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::EvaluationMeasure::NormalizedMutualInformation do +RSpec.describe Rumale::EvaluationMeasure::NormalizedMutualInformation do let(:ground_truth) { Numo::Int32[1, 1, 2, 2, 3, 3, 0, 0, 4, 4] } let(:predicted) { Numo::Int32[0, 1, 1, 2, 0, 3, 0, 0, 4, 4] } diff --git a/spec/evaluation_measure/precision_spec.rb b/spec/evaluation_measure/precision_spec.rb index 3dee2680..9169f894 100644 --- a/spec/evaluation_measure/precision_spec.rb +++ b/spec/evaluation_measure/precision_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::EvaluationMeasure::Precision do +RSpec.describe Rumale::EvaluationMeasure::Precision do let(:bin_ground_truth) { Numo::Int32[1, 1, 1, 1, 1, -1, -1, -1, -1, -1] } let(:bin_predicted) { Numo::Int32[-1, -1, 1, 1, 1, -1, -1, 1, 1, 1] } let(:mult_ground_truth) { Numo::Int32[0, 1, 2, 0, 1, 2, 3, 3, 0, 0] } diff --git a/spec/evaluation_measure/purity_spec.rb b/spec/evaluation_measure/purity_spec.rb index 1b0dd966..eb726682 100644 --- a/spec/evaluation_measure/purity_spec.rb +++ b/spec/evaluation_measure/purity_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::EvaluationMeasure::Purity do +RSpec.describe Rumale::EvaluationMeasure::Purity do let(:ground_truth) { Numo::Int32[1, 1, 2, 2, 3, 3, 0, 0, 4, 4] } let(:predicted) { Numo::Int32[2, 1, 1, 2, 0, 3, 0, 0, 4, 4] } diff --git a/spec/evaluation_measure/r2_score_spec.rb b/spec/evaluation_measure/r2_score_spec.rb index d3a2c76e..9b7e9038 100644 --- a/spec/evaluation_measure/r2_score_spec.rb +++ b/spec/evaluation_measure/r2_score_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::EvaluationMeasure::R2Score do +RSpec.describe Rumale::EvaluationMeasure::R2Score do let(:ground_truth) { Numo::DFloat[3, -0.2, 2, 7] } let(:estimated) { Numo::DFloat[2.5, 0.0, 2, 7.2] } let(:mult_ground_truth) { Numo::DFloat[[0.5, 1], [-0.7, 1], [7, -6]] } diff --git a/spec/evaluation_measure/recall_spec.rb b/spec/evaluation_measure/recall_spec.rb index addb8440..88d16319 100644 --- a/spec/evaluation_measure/recall_spec.rb +++ b/spec/evaluation_measure/recall_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::EvaluationMeasure::Recall do +RSpec.describe Rumale::EvaluationMeasure::Recall do let(:bin_ground_truth) { Numo::Int32[1, 1, 1, 1, 1, -1, -1, -1, -1, -1] } let(:bin_predicted) { Numo::Int32[-1, -1, 1, 1, 1, -1, -1, 1, 1, 1] } let(:mult_ground_truth) { Numo::Int32[0, 1, 2, 0, 1, 2, 3, 3, 0, 0] } diff --git a/spec/kernel_approximation/rbf_spec.rb b/spec/kernel_approximation/rbf_spec.rb index 8f240354..0450910e 100644 --- a/spec/kernel_approximation/rbf_spec.rb +++ b/spec/kernel_approximation/rbf_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::KernelApproximation::RBF do +RSpec.describe Rumale::KernelApproximation::RBF do let(:n_samples) { 10 } let(:n_features) { 4 } let(:n_components) { 4096 } diff --git a/spec/kernel_machine/kernel_svc_spec.rb b/spec/kernel_machine/kernel_svc_spec.rb index 32ade94e..e58314f1 100644 --- a/spec/kernel_machine/kernel_svc_spec.rb +++ b/spec/kernel_machine/kernel_svc_spec.rb @@ -2,13 +2,13 @@ require 'spec_helper' -RSpec.describe SVMKit::KernelMachine::KernelSVC do +RSpec.describe Rumale::KernelMachine::KernelSVC do let(:x_xor) { Marshal.load(File.read(__dir__ + '/../test_samples_xor.dat')) } let(:y_xor) { Marshal.load(File.read(__dir__ + '/../test_labels_xor.dat')) } let(:x_mlt) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } let(:y_mlt) { Marshal.load(File.read(__dir__ + '/../test_labels_three_clusters.dat')) } - let(:kernel_mat_xor) { SVMKit::PairwiseMetric.rbf_kernel(x_xor, nil, 1.0) } - let(:kernel_mat_mlt) { SVMKit::PairwiseMetric.rbf_kernel(x_mlt, nil, 1.0) } + let(:kernel_mat_xor) { Rumale::PairwiseMetric.rbf_kernel(x_xor, nil, 1.0) } + let(:kernel_mat_mlt) { Rumale::PairwiseMetric.rbf_kernel(x_mlt, nil, 1.0) } let(:estimator) { described_class.new(reg_param: 1.0, max_iter: 1000, random_seed: 1) } let(:estimator_prob) { described_class.new(reg_param: 1.0, max_iter: 1000, probability: true, random_seed: 1) } diff --git a/spec/linear_model/base_linear_model_spec.rb b/spec/linear_model/base_linear_model_spec.rb index 3b8340a9..f24fa25a 100644 --- a/spec/linear_model/base_linear_model_spec.rb +++ b/spec/linear_model/base_linear_model_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::LinearModel::BaseLinearModel do +RSpec.describe Rumale::LinearModel::BaseLinearModel do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[1.0, 2.0]) } let(:estimator) { described_class.new(random_seed: 1) } @@ -17,7 +17,7 @@ expect(estimator.params[:bias_scale]).to eq(1.0) expect(estimator.params[:max_iter]).to eq(1000) expect(estimator.params[:batch_size]).to eq(10) - expect(estimator.params[:optimizer].class).to eq(SVMKit::Optimizer::Nadam) + expect(estimator.params[:optimizer].class).to eq(Rumale::Optimizer::Nadam) expect(estimator.params[:random_seed]).to eq(1) end end diff --git a/spec/linear_model/lasso_spec.rb b/spec/linear_model/lasso_spec.rb index e418c1f5..384a23d5 100644 --- a/spec/linear_model/lasso_spec.rb +++ b/spec/linear_model/lasso_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::LinearModel::Lasso do +RSpec.describe Rumale::LinearModel::Lasso do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[1.0, 2.0]) } let(:y_bias) { 0.1 + x.dot(Numo::DFloat[1.0, 2.0]) } diff --git a/spec/linear_model/linear_regression_spec.rb b/spec/linear_model/linear_regression_spec.rb index 1e6eab00..5c442b79 100644 --- a/spec/linear_model/linear_regression_spec.rb +++ b/spec/linear_model/linear_regression_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::LinearModel::LinearRegression do +RSpec.describe Rumale::LinearModel::LinearRegression do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[1.0, 2.0]) } let(:y_mult) { x.dot(Numo::DFloat[[1.0, 2.0], [2.0, 1.0]]) } diff --git a/spec/linear_model/logistic_regression_spec.rb b/spec/linear_model/logistic_regression_spec.rb index 6b4864b0..0e50a9b6 100644 --- a/spec/linear_model/logistic_regression_spec.rb +++ b/spec/linear_model/logistic_regression_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::LinearModel::LogisticRegression do +RSpec.describe Rumale::LinearModel::LogisticRegression do let(:x_bin) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y_bin) { Marshal.load(File.read(__dir__ + '/../test_labels.dat')) } let(:x_mlt) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } diff --git a/spec/linear_model/ridge_spec.rb b/spec/linear_model/ridge_spec.rb index db16c427..35252787 100644 --- a/spec/linear_model/ridge_spec.rb +++ b/spec/linear_model/ridge_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::LinearModel::Ridge do +RSpec.describe Rumale::LinearModel::Ridge do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[1.0, 2.0]) } let(:y_mult) { x.dot(Numo::DFloat[[1.0, 2.0], [2.0, 1.0]]) } diff --git a/spec/linear_model/svc_spec.rb b/spec/linear_model/svc_spec.rb index c25af6d4..1d18ae6f 100644 --- a/spec/linear_model/svc_spec.rb +++ b/spec/linear_model/svc_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::LinearModel::SVC do +RSpec.describe Rumale::LinearModel::SVC do let(:x_bin) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y_bin) { Marshal.load(File.read(__dir__ + '/../test_labels.dat')) } let(:x_mlt) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } diff --git a/spec/linear_model/svr_spec.rb b/spec/linear_model/svr_spec.rb index f4d4b8d2..94a2ee6d 100644 --- a/spec/linear_model/svr_spec.rb +++ b/spec/linear_model/svr_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::LinearModel::SVR do +RSpec.describe Rumale::LinearModel::SVR do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[1.0, 2.0]) } let(:y_mult) { x.dot(Numo::DFloat[[1.0, 2.0], [2.0, 1.0]]) } diff --git a/spec/model_selection/cross_validation_spec.rb b/spec/model_selection/cross_validation_spec.rb index 04f6b825..5b0ff686 100644 --- a/spec/model_selection/cross_validation_spec.rb +++ b/spec/model_selection/cross_validation_spec.rb @@ -2,20 +2,20 @@ require 'spec_helper' -RSpec.describe SVMKit::ModelSelection::CrossValidation do +RSpec.describe Rumale::ModelSelection::CrossValidation do let(:samples) { Marshal.load(File.read(__dir__ + '/../test_samples_xor.dat')) } let(:labels) { Marshal.load(File.read(__dir__ + '/../test_labels_xor.dat')) } let(:values) { samples.dot(Numo::DFloat[1.0, 2.0]) } - let(:kernel_mat) { SVMKit::PairwiseMetric.rbf_kernel(samples, nil, 1.0) } - let(:kernel_svc) { SVMKit::KernelMachine::KernelSVC.new(reg_param: 1.0, max_iter: 1000, random_seed: 1) } - let(:linear_svc) { SVMKit::LinearModel::SVC.new(random_seed: 1) } - let(:linear_svr) { SVMKit::LinearModel::SVR.new(random_seed: 1) } - let(:logit_reg) { SVMKit::LinearModel::LogisticRegression.new(random_seed: 1) } - let(:f_score) { SVMKit::EvaluationMeasure::FScore.new } - let(:log_loss) { SVMKit::EvaluationMeasure::LogLoss.new } + let(:kernel_mat) { Rumale::PairwiseMetric.rbf_kernel(samples, nil, 1.0) } + let(:kernel_svc) { Rumale::KernelMachine::KernelSVC.new(reg_param: 1.0, max_iter: 1000, random_seed: 1) } + let(:linear_svc) { Rumale::LinearModel::SVC.new(random_seed: 1) } + let(:linear_svr) { Rumale::LinearModel::SVR.new(random_seed: 1) } + let(:logit_reg) { Rumale::LinearModel::LogisticRegression.new(random_seed: 1) } + let(:f_score) { Rumale::EvaluationMeasure::FScore.new } + let(:log_loss) { Rumale::EvaluationMeasure::LogLoss.new } let(:n_splits) { 5 } - let(:kfold) { SVMKit::ModelSelection::KFold.new(n_splits: n_splits, shuffle: true, random_seed: 1) } - let(:skfold) { SVMKit::ModelSelection::StratifiedKFold.new(n_splits: n_splits, shuffle: true, random_seed: 1) } + let(:kfold) { Rumale::ModelSelection::KFold.new(n_splits: n_splits, shuffle: true, random_seed: 1) } + let(:skfold) { Rumale::ModelSelection::StratifiedKFold.new(n_splits: n_splits, shuffle: true, random_seed: 1) } it 'performs k-fold cross validation with linear svc.' do cv = described_class.new(estimator: linear_svc, splitter: kfold) @@ -64,7 +64,7 @@ it 'performs k-fold cross validation with kernel svc to evaluate the results using F1-score.' do cv = described_class.new(estimator: kernel_svc, splitter: kfold, evaluator: f_score, return_train_score: true) report = cv.perform(kernel_mat, labels) - expect(cv.evaluator.class).to eq(SVMKit::EvaluationMeasure::FScore) + expect(cv.evaluator.class).to eq(Rumale::EvaluationMeasure::FScore) expect(report[:test_score].size).to eq(n_splits) expect(report[:train_score].size).to eq(n_splits) expect(report[:fit_time].size).to eq(n_splits) @@ -77,7 +77,7 @@ it 'performs k-fold cross validation with logistic regression to evaluate the results using Log-loss.' do cv = described_class.new(estimator: logit_reg, splitter: kfold, evaluator: log_loss, return_train_score: true) report = cv.perform(kernel_mat, labels) - expect(cv.evaluator.class).to eq(SVMKit::EvaluationMeasure::LogLoss) + expect(cv.evaluator.class).to eq(Rumale::EvaluationMeasure::LogLoss) expect(report[:test_score].size).to eq(n_splits) expect(report[:train_score].size).to eq(n_splits) expect(report[:fit_time].size).to eq(n_splits) @@ -88,8 +88,8 @@ end describe 'private method' do - let(:ovr_kernel_svc) { SVMKit::Multiclass::OneVsRestClassifier.new(estimator: kernel_svc) } - let(:ovr_linear_svc) { SVMKit::Multiclass::OneVsRestClassifier.new(estimator: linear_svc) } + let(:ovr_kernel_svc) { Rumale::Multiclass::OneVsRestClassifier.new(estimator: kernel_svc) } + let(:ovr_linear_svc) { Rumale::Multiclass::OneVsRestClassifier.new(estimator: linear_svc) } let(:kernel_svc_cv) { described_class.new(estimator: kernel_svc, splitter: kfold) } let(:linear_svc_cv) { described_class.new(estimator: linear_svc, splitter: kfold) } let(:ovr_kernel_svc_cv) { described_class.new(estimator: ovr_kernel_svc, splitter: kfold) } diff --git a/spec/model_selection/grid_search_cv_spec.rb b/spec/model_selection/grid_search_cv_spec.rb index 47bcb685..220fe6d4 100644 --- a/spec/model_selection/grid_search_cv_spec.rb +++ b/spec/model_selection/grid_search_cv_spec.rb @@ -2,25 +2,25 @@ require 'spec_helper' -RSpec.describe SVMKit::ModelSelection::GridSearchCV do +RSpec.describe Rumale::ModelSelection::GridSearchCV do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } let(:y) { Marshal.load(File.read(__dir__ + '/../test_labels_three_clusters.dat')) } let(:x_xor) { Marshal.load(File.read(__dir__ + '/../test_samples_xor.dat')) } let(:y_xor) { Marshal.load(File.read(__dir__ + '/../test_labels_xor.dat')) } let(:x_reg) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y_reg) { x_reg[true, 0] + x_reg[true, 1]**2 } - let(:kfold) { SVMKit::ModelSelection::KFold.new(n_splits: 5, shuffle: true, random_seed: 1) } - let(:skfold) { SVMKit::ModelSelection::StratifiedKFold.new(n_splits: 5, shuffle: true, random_seed: 1) } - let(:rbf) { SVMKit::KernelApproximation::RBF.new(gamma: 0.1, random_seed: 1) } - let(:svc) { SVMKit::LinearModel::SVC.new(random_seed: 1) } - let(:scl) { SVMKit::Preprocessing::MinMaxScaler.new } - let(:nbs) { SVMKit::NaiveBayes::GaussianNB.new } - let(:rfr) { SVMKit::Ensemble::RandomForestRegressor.new(random_seed: 1) } - let(:mae) { SVMKit::EvaluationMeasure::MeanAbsoluteError.new } + let(:kfold) { Rumale::ModelSelection::KFold.new(n_splits: 5, shuffle: true, random_seed: 1) } + let(:skfold) { Rumale::ModelSelection::StratifiedKFold.new(n_splits: 5, shuffle: true, random_seed: 1) } + let(:rbf) { Rumale::KernelApproximation::RBF.new(gamma: 0.1, random_seed: 1) } + let(:svc) { Rumale::LinearModel::SVC.new(random_seed: 1) } + let(:scl) { Rumale::Preprocessing::MinMaxScaler.new } + let(:nbs) { Rumale::NaiveBayes::GaussianNB.new } + let(:rfr) { Rumale::Ensemble::RandomForestRegressor.new(random_seed: 1) } + let(:mae) { Rumale::EvaluationMeasure::MeanAbsoluteError.new } it 'searches the best parameter among array-type parameters.' do param_grid = { scl__feature_range: [[-1.0, 1.0], [0.0, 1.0]] } - pipe = SVMKit::Pipeline::Pipeline.new(steps: { scl: scl, nbs: nbs }) + pipe = Rumale::Pipeline::Pipeline.new(steps: { scl: scl, nbs: nbs }) gs = described_class.new(estimator: pipe, param_grid: param_grid, splitter: skfold) gs.fit(x, y) @@ -46,7 +46,7 @@ rbf__n_components: [4, 128], svc__reg_param: [16.0, 0.1] } - pipe = SVMKit::Pipeline::Pipeline.new(steps: { rbf: rbf, svc: svc }) + pipe = Rumale::Pipeline::Pipeline.new(steps: { rbf: rbf, svc: svc }) gs = described_class.new(estimator: pipe, param_grid: param_grid, splitter: skfold) gs.fit(x_xor, y_xor) @@ -67,7 +67,7 @@ expect(gs.best_params[:rbf__gamma]).to eq(1.0) expect(gs.best_params[:rbf__n_components]).to eq(128) expect(gs.best_params[:svc__reg_param]).to eq(0.1) - expect(gs.best_estimator).to be_a(SVMKit::Pipeline::Pipeline) + expect(gs.best_estimator).to be_a(Rumale::Pipeline::Pipeline) expect(gs.best_estimator.steps[:rbf].params[:gamma]).to eq(1.0) expect(gs.best_estimator.steps[:rbf].params[:n_components]).to eq(128) expect(gs.best_estimator.steps[:svc].params[:reg_param]).to eq(0.1) diff --git a/spec/model_selection/k_fold_spec.rb b/spec/model_selection/k_fold_spec.rb index c752f933..3548eb49 100644 --- a/spec/model_selection/k_fold_spec.rb +++ b/spec/model_selection/k_fold_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::ModelSelection::KFold do +RSpec.describe Rumale::ModelSelection::KFold do let(:n_splits) { 3 } let(:n_samples) { 9 } let(:n_features) { 3 } diff --git a/spec/model_selection/stratified_k_fold_spec.rb b/spec/model_selection/stratified_k_fold_spec.rb index 92578617..5f5fa73a 100644 --- a/spec/model_selection/stratified_k_fold_spec.rb +++ b/spec/model_selection/stratified_k_fold_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::ModelSelection::StratifiedKFold do +RSpec.describe Rumale::ModelSelection::StratifiedKFold do let(:n_splits) { 3 } let(:n_samples) { 12 } let(:n_features) { 3 } diff --git a/spec/multiclass/one_vs_rest_classifier_spec.rb b/spec/multiclass/one_vs_rest_classifier_spec.rb index c58563f8..836fbfda 100644 --- a/spec/multiclass/one_vs_rest_classifier_spec.rb +++ b/spec/multiclass/one_vs_rest_classifier_spec.rb @@ -2,11 +2,11 @@ require 'spec_helper' -RSpec.describe SVMKit::Multiclass::OneVsRestClassifier do +RSpec.describe Rumale::Multiclass::OneVsRestClassifier do let(:samples) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } let(:labels) { Marshal.load(File.read(__dir__ + '/../test_labels_three_clusters.dat')) } let(:base_estimator) do - SVMKit::LinearModel::SVC.new(reg_param: 1.0, max_iter: 100, batch_size: 20, random_seed: 1) + Rumale::LinearModel::SVC.new(reg_param: 1.0, max_iter: 100, batch_size: 20, random_seed: 1) end let(:estimator) { described_class.new(estimator: base_estimator) } diff --git a/spec/naive_bayes/bernoulli_nb_spec.rb b/spec/naive_bayes/bernoulli_nb_spec.rb index b5c47dca..45edd901 100644 --- a/spec/naive_bayes/bernoulli_nb_spec.rb +++ b/spec/naive_bayes/bernoulli_nb_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::NaiveBayes::BernoulliNB do +RSpec.describe Rumale::NaiveBayes::BernoulliNB do let(:samples) { Numo::DFloat[[4, 3, 0, 0], [4, 0, 0, 0], [4, 0, 1, 0], [0, 0, 5, 3], [0, 0, 0, 3], [0, 1, 5, 3]] } let(:labels) { Numo::Int32[1, 1, 1, -1, -1, -1] } let(:estimator) { described_class.new(smoothing_param: 1.0, bin_threshold: 0.0) } diff --git a/spec/naive_bayes/gaussian_nb_spec.rb b/spec/naive_bayes/gaussian_nb_spec.rb index c8291213..6458dcc2 100644 --- a/spec/naive_bayes/gaussian_nb_spec.rb +++ b/spec/naive_bayes/gaussian_nb_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::NaiveBayes::GaussianNB do +RSpec.describe Rumale::NaiveBayes::GaussianNB do let(:samples) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } let(:labels) { Marshal.load(File.read(__dir__ + '/../test_labels_three_clusters.dat')) } let(:estimator) { described_class.new } diff --git a/spec/naive_bayes/multinomial_nb_spec.rb b/spec/naive_bayes/multinomial_nb_spec.rb index d112f472..e2bd0f25 100644 --- a/spec/naive_bayes/multinomial_nb_spec.rb +++ b/spec/naive_bayes/multinomial_nb_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::NaiveBayes::MultinomialNB do +RSpec.describe Rumale::NaiveBayes::MultinomialNB do let(:samples) { Numo::DFloat[[4, 3, 0, 0], [4, 0, 0, 0], [4, 0, 1, 0], [0, 0, 5, 3], [0, 0, 0, 3], [0, 1, 5, 3]] } let(:labels) { Numo::Int32[1, 1, 1, -1, -1, -1] } let(:estimator) { described_class.new(smoothing_param: 1.0) } diff --git a/spec/nearest_neighbors/k_neighbors_classifier_spec.rb b/spec/nearest_neighbors/k_neighbors_classifier_spec.rb index 8f508fdf..1058582d 100644 --- a/spec/nearest_neighbors/k_neighbors_classifier_spec.rb +++ b/spec/nearest_neighbors/k_neighbors_classifier_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::NearestNeighbors::KNeighborsClassifier do +RSpec.describe Rumale::NearestNeighbors::KNeighborsClassifier do let(:samples) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } let(:labels) { Marshal.load(File.read(__dir__ + '/../test_labels_three_clusters.dat')) } let(:estimator) { described_class.new(n_neighbors: 5) } diff --git a/spec/nearest_neighbors/k_neighbors_regressor_spec.rb b/spec/nearest_neighbors/k_neighbors_regressor_spec.rb index 5b2ec781..506ee7a6 100644 --- a/spec/nearest_neighbors/k_neighbors_regressor_spec.rb +++ b/spec/nearest_neighbors/k_neighbors_regressor_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::NearestNeighbors::KNeighborsRegressor do +RSpec.describe Rumale::NearestNeighbors::KNeighborsRegressor do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x[true, 0] + x[true, 1]**2 } let(:y_mult) { x.dot(Numo::DFloat[[1.0, 2.0], [2.0, 1.0]]) } diff --git a/spec/optimizer/nadam_spec.rb b/spec/optimizer/nadam_spec.rb index a2612eec..50a88185 100644 --- a/spec/optimizer/nadam_spec.rb +++ b/spec/optimizer/nadam_spec.rb @@ -2,12 +2,12 @@ require 'spec_helper' -RSpec.describe SVMKit::Optimizer::Nadam do +RSpec.describe Rumale::Optimizer::Nadam do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[1.0, 2.0]) } let(:y_mult) { x.dot(Numo::DFloat[[1.0, 2.0], [2.0, 1.0]]) } let(:optimizer) { described_class.new(learning_rate: 0.1, momentum: 0.8, decay1: 0.8, decay2: 0.8) } - let(:estimator) { SVMKit::LinearModel::LinearRegression.new(optimizer: optimizer, max_iter: 100, random_seed: 1) } + let(:estimator) { Rumale::LinearModel::LinearRegression.new(optimizer: optimizer, max_iter: 100, random_seed: 1) } it 'learns the model for single regression problem with optimizer.' do estimator.fit(x, y) diff --git a/spec/optimizer/rmsprop_spec.rb b/spec/optimizer/rmsprop_spec.rb index ad0f1332..3e65c3b2 100644 --- a/spec/optimizer/rmsprop_spec.rb +++ b/spec/optimizer/rmsprop_spec.rb @@ -2,12 +2,12 @@ require 'spec_helper' -RSpec.describe SVMKit::Optimizer::RMSProp do +RSpec.describe Rumale::Optimizer::RMSProp do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[1.0, 2.0]) } let(:y_mult) { x.dot(Numo::DFloat[[1.0, 2.0], [2.0, 1.0]]) } let(:optimizer) { described_class.new(learning_rate: 0.1, momentum: 0.9, decay: 0.1) } - let(:estimator) { SVMKit::LinearModel::LinearRegression.new(optimizer: optimizer, max_iter: 100, random_seed: 1) } + let(:estimator) { Rumale::LinearModel::LinearRegression.new(optimizer: optimizer, max_iter: 100, random_seed: 1) } it 'learns the model for single regression problem with optimizer.' do estimator.fit(x, y) diff --git a/spec/optimizer/sgd_spec.rb b/spec/optimizer/sgd_spec.rb index fc8a4d99..67a6bdc7 100644 --- a/spec/optimizer/sgd_spec.rb +++ b/spec/optimizer/sgd_spec.rb @@ -2,12 +2,12 @@ require 'spec_helper' -RSpec.describe SVMKit::Optimizer::SGD do +RSpec.describe Rumale::Optimizer::SGD do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[1.0, 2.0]) } let(:y_mult) { x.dot(Numo::DFloat[[1.0, 2.0], [2.0, 1.0]]) } let(:optimizer) { described_class.new(learning_rate: 0.1, momentum: 0.9, decay: 0.1) } - let(:estimator) { SVMKit::LinearModel::LinearRegression.new(optimizer: optimizer, max_iter: 100, random_seed: 1) } + let(:estimator) { Rumale::LinearModel::LinearRegression.new(optimizer: optimizer, max_iter: 100, random_seed: 1) } it 'learns the model for single regression problem with optimizer.' do estimator.fit(x, y) diff --git a/spec/optimizer/yellow_fin_spec.rb b/spec/optimizer/yellow_fin_spec.rb index 1edda7b8..e71b6d8a 100644 --- a/spec/optimizer/yellow_fin_spec.rb +++ b/spec/optimizer/yellow_fin_spec.rb @@ -2,12 +2,12 @@ require 'spec_helper' -RSpec.describe SVMKit::Optimizer::YellowFin do +RSpec.describe Rumale::Optimizer::YellowFin do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[1.0, 2.0]) } let(:y_mult) { x.dot(Numo::DFloat[[1.0, 2.0], [2.0, 1.0]]) } let(:optimizer) { described_class.new(learning_rate: 0.05, momentum: 0.8, decay: 0.995, window_width: 2) } - let(:estimator) { SVMKit::LinearModel::LinearRegression.new(optimizer: optimizer, max_iter: 100, random_seed: 1) } + let(:estimator) { Rumale::LinearModel::LinearRegression.new(optimizer: optimizer, max_iter: 100, random_seed: 1) } it 'learns the model for single regression problem with optimizer.' do estimator.fit(x, y) diff --git a/spec/pairwise_metric_spec.rb b/spec/pairwise_metric_spec.rb index 12fd9c0a..5e990d83 100644 --- a/spec/pairwise_metric_spec.rb +++ b/spec/pairwise_metric_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::PairwiseMetric do +RSpec.describe Rumale::PairwiseMetric do let(:n_features) { 3 } let(:n_samples_a) { 10 } let(:n_samples_b) { 5 } diff --git a/spec/pipeline/pipeline_spec.rb b/spec/pipeline/pipeline_spec.rb index 4b84c729..2c1fc2ed 100644 --- a/spec/pipeline/pipeline_spec.rb +++ b/spec/pipeline/pipeline_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Pipeline::Pipeline do +RSpec.describe Rumale::Pipeline::Pipeline do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples_xor.dat')) } let(:y) { Marshal.load(File.read(__dir__ + '/../test_labels_xor.dat')) } let(:xc) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } @@ -11,13 +11,13 @@ let(:n_nmf_comps) { 8 } let(:n_pca_comps) { 4 } let(:n_clusters) { 3 } - let(:rbf) { SVMKit::KernelApproximation::RBF.new(gamma: 0.1, n_components: n_rbf_comps, random_seed: 1) } - let(:pca) { SVMKit::Decomposition::PCA.new(n_components: n_pca_comps, tol: 1.0e-8, random_seed: 1) } - let(:nmf) { SVMKit::Decomposition::NMF.new(n_components: n_nmf_comps, random_seed: 1) } - let(:svc) { SVMKit::LinearModel::SVC.new(random_seed: 1) } - let(:nrm) { SVMKit::Preprocessing::L2Normalizer.new } - let(:nbs) { SVMKit::NaiveBayes::GaussianNB.new } - let(:kms) { SVMKit::Clustering::KMeans.new(n_clusters: n_clusters, random_seed: 1) } + let(:rbf) { Rumale::KernelApproximation::RBF.new(gamma: 0.1, n_components: n_rbf_comps, random_seed: 1) } + let(:pca) { Rumale::Decomposition::PCA.new(n_components: n_pca_comps, tol: 1.0e-8, random_seed: 1) } + let(:nmf) { Rumale::Decomposition::NMF.new(n_components: n_nmf_comps, random_seed: 1) } + let(:svc) { Rumale::LinearModel::SVC.new(random_seed: 1) } + let(:nrm) { Rumale::Preprocessing::L2Normalizer.new } + let(:nbs) { Rumale::NaiveBayes::GaussianNB.new } + let(:kms) { Rumale::Clustering::KMeans.new(n_clusters: n_clusters, random_seed: 1) } it 'classifies xor data with Kernel approximation, PCA, and SVC.' do n_samples, n_features = x.shape diff --git a/spec/polynomial_model/base_factorization_machine_spec.rb b/spec/polynomial_model/base_factorization_machine_spec.rb index 6d5c0380..72337b50 100644 --- a/spec/polynomial_model/base_factorization_machine_spec.rb +++ b/spec/polynomial_model/base_factorization_machine_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::PolynomialModel::BaseFactorizationMachine do +RSpec.describe Rumale::PolynomialModel::BaseFactorizationMachine do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[1.0, 2.0]) } let(:estimator) { described_class.new(random_seed: 1) } @@ -18,7 +18,7 @@ expect(estimator.params[:reg_param_factor]).to eq(1.0) expect(estimator.params[:max_iter]).to eq(1000) expect(estimator.params[:batch_size]).to eq(10) - expect(estimator.params[:optimizer]).to be_a(SVMKit::Optimizer::Nadam) + expect(estimator.params[:optimizer]).to be_a(Rumale::Optimizer::Nadam) expect(estimator.params[:random_seed]).to eq(1) end end diff --git a/spec/polynomial_model/factorization_machine_classifier_spec.rb b/spec/polynomial_model/factorization_machine_classifier_spec.rb index f00b2b33..ab1fedf2 100644 --- a/spec/polynomial_model/factorization_machine_classifier_spec.rb +++ b/spec/polynomial_model/factorization_machine_classifier_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::PolynomialModel::FactorizationMachineClassifier do +RSpec.describe Rumale::PolynomialModel::FactorizationMachineClassifier do let(:x_bin) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y_bin) { Marshal.load(File.read(__dir__ + '/../test_labels.dat')) } let(:x_mlt) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } diff --git a/spec/polynomial_model/factorization_machine_regressor_spec.rb b/spec/polynomial_model/factorization_machine_regressor_spec.rb index b9041975..b7cfb32f 100644 --- a/spec/polynomial_model/factorization_machine_regressor_spec.rb +++ b/spec/polynomial_model/factorization_machine_regressor_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::PolynomialModel::FactorizationMachineRegressor do +RSpec.describe Rumale::PolynomialModel::FactorizationMachineRegressor do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x.dot(Numo::DFloat[0.8, 0.2]) } let(:y_mult) { x.dot(Numo::DFloat[[0.8, 0.82], [0.2, 0.18]]) } diff --git a/spec/preprocessing/l2_normalizer_spec.rb b/spec/preprocessing/l2_normalizer_spec.rb index c37d308c..13719e87 100644 --- a/spec/preprocessing/l2_normalizer_spec.rb +++ b/spec/preprocessing/l2_normalizer_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Preprocessing::L2Normalizer do +RSpec.describe Rumale::Preprocessing::L2Normalizer do let(:n_samples) { 10 } let(:n_features) { 4 } let(:samples) { Numo::DFloat.new(n_samples, n_features).rand } diff --git a/spec/preprocessing/label_encoder_spec.rb b/spec/preprocessing/label_encoder_spec.rb index b9087e2f..80141f6a 100644 --- a/spec/preprocessing/label_encoder_spec.rb +++ b/spec/preprocessing/label_encoder_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Preprocessing::LabelEncoder do +RSpec.describe Rumale::Preprocessing::LabelEncoder do let(:encoder) { described_class.new } let(:labels) { Numo::Int32[0, 0, 2, 3, 2, 1] } let(:int_labels) { [1, 8, 8, 15, -1] } diff --git a/spec/preprocessing/min_max_scaler_spec.rb b/spec/preprocessing/min_max_scaler_spec.rb index 5c8d7847..98538a94 100644 --- a/spec/preprocessing/min_max_scaler_spec.rb +++ b/spec/preprocessing/min_max_scaler_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Preprocessing::MinMaxScaler do +RSpec.describe Rumale::Preprocessing::MinMaxScaler do let(:n_samples) { 10 } let(:n_features) { 4 } let(:samples) { Numo::DFloat.new(n_samples, n_features).rand } diff --git a/spec/preprocessing/one_hot_encoder_spec.rb b/spec/preprocessing/one_hot_encoder_spec.rb index d22b80a3..72b40b40 100644 --- a/spec/preprocessing/one_hot_encoder_spec.rb +++ b/spec/preprocessing/one_hot_encoder_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Preprocessing::OneHotEncoder do +RSpec.describe Rumale::Preprocessing::OneHotEncoder do let(:encoder) { described_class.new } let(:labels) { Numo::Int32[0, 0, 2, 3, 2, 1] } let(:codes) { Numo::DFloat[[1, 0, 0, 0], [1, 0, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1], [0, 0, 1, 0], [0, 1, 0, 0]] } diff --git a/spec/preprocessing/standard_scaler_spec.rb b/spec/preprocessing/standard_scaler_spec.rb index 91e5aa57..f4ce119b 100644 --- a/spec/preprocessing/standard_scaler_spec.rb +++ b/spec/preprocessing/standard_scaler_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Preprocessing::StandardScaler do +RSpec.describe Rumale::Preprocessing::StandardScaler do let(:n_samples) { 10 } let(:n_features) { 4 } let(:samples) { Numo::DFloat.new(n_samples, n_features).rand } diff --git a/spec/probabilistic_output_spec.rb b/spec/probabilistic_output_spec.rb index 17d8aefb..1cedd621 100644 --- a/spec/probabilistic_output_spec.rb +++ b/spec/probabilistic_output_spec.rb @@ -2,10 +2,10 @@ require 'spec_helper' -RSpec.describe SVMKit::ProbabilisticOutput do +RSpec.describe Rumale::ProbabilisticOutput do let(:x_bin) { Marshal.load(File.read(__dir__ + '/test_samples.dat')) } let(:y_bin) { Marshal.load(File.read(__dir__ + '/test_labels.dat')) } - let(:estimator) { SVMKit::LinearModel::SVC.new(random_seed: 1) } + let(:estimator) { Rumale::LinearModel::SVC.new(random_seed: 1) } it 'calculates class probability with svc' do n_samples, = x_bin.shape diff --git a/spec/svmkit_spec.rb b/spec/rumale_spec.rb similarity index 76% rename from spec/svmkit_spec.rb rename to spec/rumale_spec.rb index b230d825..6dff3b5f 100644 --- a/spec/svmkit_spec.rb +++ b/spec/rumale_spec.rb @@ -2,11 +2,11 @@ require 'spec_helper' -RSpec.describe SVMKit do +RSpec.describe Rumale do let(:samples) { Marshal.load(File.read(__dir__ + '/test_samples_xor.dat')) } let(:labels) { Marshal.load(File.read(__dir__ + '/test_labels_xor.dat')) } - let(:estimator) { SVMKit::LinearModel::SVC.new(reg_param: 0.01, random_seed: 1) } - let(:transformer) { SVMKit::KernelApproximation::RBF.new(gamma: 1.0, n_components: 1024, random_seed: 1) } + let(:estimator) { Rumale::LinearModel::SVC.new(reg_param: 0.01, random_seed: 1) } + let(:transformer) { Rumale::KernelApproximation::RBF.new(gamma: 1.0, n_components: 1024, random_seed: 1) } it 'classifies xor data.' do new_samples = transformer.fit_transform(samples) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2c7510ba..cdd68588 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -10,7 +10,7 @@ SimpleCov.start require 'bundler/setup' -require 'svmkit' +require 'rumale' RSpec.configure do |config| # Enable flags like --only-failures and --next-failure diff --git a/spec/tree/base_decision_tree_spec.rb b/spec/tree/base_decision_tree_spec.rb index 0463d73f..aaf9fafd 100644 --- a/spec/tree/base_decision_tree_spec.rb +++ b/spec/tree/base_decision_tree_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Tree::BaseDecisionTree do +RSpec.describe Rumale::Tree::BaseDecisionTree do let(:estimator) do described_class.new(criterion: 'foo', max_depth: 5, max_leaf_nodes: 4, min_samples_leaf: 3, max_features: 2, diff --git a/spec/tree/decision_tree_classifier_spec.rb b/spec/tree/decision_tree_classifier_spec.rb index 4d0a62da..b5d285c0 100644 --- a/spec/tree/decision_tree_classifier_spec.rb +++ b/spec/tree/decision_tree_classifier_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Tree::DecisionTreeClassifier do +RSpec.describe Rumale::Tree::DecisionTreeClassifier do let(:x_bin) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y_bin) { Marshal.load(File.read(__dir__ + '/../test_labels.dat')) } let(:x_mlt) { Marshal.load(File.read(__dir__ + '/../test_samples_three_clusters.dat')) } @@ -20,7 +20,7 @@ it 'classifies two clusters data.' do _n_samples, n_features = x_bin.shape estimator.fit(x_bin, y_bin) - expect(estimator.tree.class).to eq(SVMKit::Tree::Node) + expect(estimator.tree.class).to eq(Rumale::Tree::Node) expect(estimator.classes.class).to eq(Numo::Int32) expect(estimator.classes.size).to eq(2) expect(estimator.feature_importances.class).to eq(Numo::DFloat) @@ -32,7 +32,7 @@ it 'classifies three clusters data.' do _n_samples, n_features = x_mlt.shape estimator.fit(x_mlt, y_mlt) - expect(estimator.tree.class).to eq(SVMKit::Tree::Node) + expect(estimator.tree.class).to eq(Rumale::Tree::Node) expect(estimator.classes.class).to eq(Numo::Int32) expect(estimator.classes.size).to eq(3) expect(estimator.feature_importances.class).to eq(Numo::DFloat) diff --git a/spec/tree/decision_tree_regressor_spec.rb b/spec/tree/decision_tree_regressor_spec.rb index 1dfbcb27..e4aefa58 100644 --- a/spec/tree/decision_tree_regressor_spec.rb +++ b/spec/tree/decision_tree_regressor_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Tree::DecisionTreeRegressor do +RSpec.describe Rumale::Tree::DecisionTreeRegressor do let(:x) { Marshal.load(File.read(__dir__ + '/../test_samples.dat')) } let(:y) { x[true, 0] + x[true, 1]**2 } let(:y_mult) { Numo::DFloat[x[true, 0].to_a, (x[true, 1]**2).to_a].transpose.dot(Numo::DFloat[[0.6, 0.4], [0.8, 0.2]]) } @@ -21,7 +21,7 @@ estimator.fit(x, y) - expect(estimator.tree.class).to eq(SVMKit::Tree::Node) + expect(estimator.tree.class).to eq(Rumale::Tree::Node) expect(estimator.feature_importances.class).to eq(Numo::DFloat) expect(estimator.feature_importances.shape[0]).to eq(n_features) expect(estimator.feature_importances.shape[1]).to be_nil @@ -42,7 +42,7 @@ estimator.fit(x, y_mult) - expect(estimator.tree.class).to eq(SVMKit::Tree::Node) + expect(estimator.tree.class).to eq(Rumale::Tree::Node) expect(estimator.feature_importances.class).to eq(Numo::DFloat) expect(estimator.feature_importances.shape[0]).to eq(n_features) expect(estimator.feature_importances.shape[1]).to be_nil diff --git a/spec/tree/node_spec.rb b/spec/tree/node_spec.rb index 3fcf8cf3..f5253ed4 100644 --- a/spec/tree/node_spec.rb +++ b/spec/tree/node_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Tree::Node do +RSpec.describe Rumale::Tree::Node do it 'stores properties.' do left = described_class.new right = described_class.new @@ -16,8 +16,8 @@ expect(root.leaf_id).to eq(0) expect(root.left).to_not be_nil expect(root.right).to_not be_nil - expect(root.left.class).to be(SVMKit::Tree::Node) - expect(root.right.class).to be(SVMKit::Tree::Node) + expect(root.left.class).to be(Rumale::Tree::Node) + expect(root.right.class).to be(Rumale::Tree::Node) expect(root.feature_id).to eq(2) expect(root.threshold).to eq(0.5) end diff --git a/spec/validation_spec.rb b/spec/validation_spec.rb index ce8df1f7..d794ff97 100644 --- a/spec/validation_spec.rb +++ b/spec/validation_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe SVMKit::Validation do +RSpec.describe Rumale::Validation do it 'detects invalid type array given.' do expect { described_class.check_sample_array([[1, 2, 3], [4, 5, 6]]) }.to raise_error(TypeError) expect { described_class.check_sample_array(Numo::Int32[[1, 2, 3], [4, 5, 6]]) }.to raise_error(TypeError)