module DNN::Iris

Constants

SETOSA

Iris-setosa

URL_CSV
VERSICOLOR

Iris-versicolor

VIRGINICA

Iris-virginica

Public Class Methods

downloads() click to toggle source
# File lib/dnn/datasets/iris.rb, line 17
def self.downloads
  return if File.exist?(url_to_file_name(URL_CSV))
  Downloader.download(URL_CSV)
end
load(shuffle = false, shuffle_seed = rand(1 << 31)) click to toggle source
# File lib/dnn/datasets/iris.rb, line 22
def self.load(shuffle = false, shuffle_seed = rand(1 << 31))
  downloads
  csv_array = CSV.read(url_to_file_name(URL_CSV)).reject(&:empty?)
  x = Numo::SFloat.zeros(csv_array.length, 4)
  y = Numo::SFloat.zeros(csv_array.length)
  csv_array.each.with_index do |(sepal_length, sepal_width, petal_length, petal_width, classes), i|
    x[i, 0] = sepal_length.to_f
    x[i, 1] = sepal_width.to_f
    x[i, 2] = petal_length.to_f
    x[i, 3] = petal_width.to_f
    y[i] = case classes
           when "Iris-setosa"
             SETOSA
           when "Iris-versicolor"
             VERSICOLOR
           when "Iris-virginica"
             VIRGINICA
           else
             raise DNN_Iris_LoadError, "Unknown class name '#{classes}' for iris"
    end
  end
  if shuffle
    orig_seed = Random::DEFAULT.seed
    srand(shuffle_seed)
    indexs = (0...csv_array.length).to_a.shuffle
    x[indexs, true] = x
    y[indexs] = y
    srand(orig_seed)
  end
  [x, y]
end

Private Class Methods

url_to_file_name(url) click to toggle source
# File lib/dnn/datasets/iris.rb, line 54
                     def self.url_to_file_name(url)
  DOWNLOADS_PATH + "/downloads/" + url.match(%r`.+/(.+)$`)[1]
end