class LinearRegression::GD

Public Class Methods

new(num_iter: 100, alpha: 0.01) click to toggle source
# File lib/linear_regressions.rb, line 59
def initialize(num_iter: 100, alpha: 0.01)
    @num_iter = num_iter
    @alpha = alpha
end

Public Instance Methods

train(entries) { |i,beta,loss| ... } click to toggle source
# File lib/linear_regressions.rb, line 64
def train(entries, &block)
    label = entries.map{|e| e[:label] }
    features = entries.map{|e| e[:features] }.map{|e| e+[1]}

    @dimension = features[0].size

    y = Matrix[label].t
    x = Matrix[*features]

    @beta = Matrix[@dimension.times.map{|x|1}].t

    @num_iter.times do |i|
        y_bar = x * @beta
        loss = y_bar - y
        gradient = (x.t * loss)/ entries.size
        @beta = @beta - (@alpha * gradient)
        yield i,@beta,loss if block!=nil
    end
end