Sha256: 5eb98390f77e9dcb0e8d0fcde14a00071ce11d02e9804e6d349f8164158cef24

Contents?: true

Size: 1.64 KB

Versions: 15

Compression:

Stored size: 1.64 KB

Contents

# frozen_string_literal: true

require 'svmkit/validation'
require 'svmkit/base/base_estimator'
require 'svmkit/base/transformer'

module SVMKit
  # This module consists of the classes that perform preprocessings.
  module Preprocessing
    # Normalize samples to unit L2-norm.
    #
    # @example
    #   normalizer = SVMKit::Preprocessing::StandardScaler.new
    #   new_samples = normalizer.fit_transform(samples)
    class L2Normalizer
      include Base::BaseEstimator
      include Base::Transformer

      # Return the vector consists of L2-norm for each sample.
      # @return [Numo::DFloat] (shape: [n_samples])
      attr_reader :norm_vec # :nodoc:

      # Create a new normalizer for normaliing to unit L2-norm.
      def initialize
        @params = {}
        @norm_vec = nil
      end

      # Calculate L2-norms of each sample.
      #
      # @overload fit(x) -> L2Normalizer
      #
      # @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to calculate L2-norms.
      # @return [L2Normalizer]
      def fit(x, _y = nil)
        SVMKit::Validation.check_sample_array(x)
        @norm_vec = Numo::NMath.sqrt((x**2).sum(1))
        self
      end

      # Calculate L2-norms of each sample, and then normalize samples to unit L2-norm.
      #
      # @overload fit_transform(x) -> Numo::DFloat
      #
      # @param x [Numo::DFloat] (shape: [n_samples, n_features]) The samples to calculate L2-norms.
      # @return [Numo::DFloat] The normalized samples.
      def fit_transform(x, _y = nil)
        SVMKit::Validation.check_sample_array(x)
        fit(x)
        x / @norm_vec.tile(x.shape[1], 1).transpose
      end
    end
  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
svmkit-0.7.1 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.7.0 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.6.3 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.6.2 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.6.1 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.6.0 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.5.2 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.5.1 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.5.0 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.4.1 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.4.0 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.3.3 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.3.2 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.3.1 lib/svmkit/preprocessing/l2_normalizer.rb
svmkit-0.3.0 lib/svmkit/preprocessing/l2_normalizer.rb