Module: Liblinear

Included in:
Model, Parameter, Problem
Defined in:
lib/liblinear.rb,
lib/liblinear/error.rb,
lib/liblinear/model.rb,
lib/liblinear/problem.rb,
lib/liblinear/version.rb,
lib/liblinear/parameter.rb

Defined Under Namespace

Classes: InvalidParameter, Model, Parameter, Problem

Constant Summary collapse

L2R_LR =
Liblinearswig::L2R_LR
L2R_L2LOSS_SVC_DUAL =
Liblinearswig::L2R_L2LOSS_SVC_DUAL
L2R_L2LOSS_SVC =
Liblinearswig::L2R_L2LOSS_SVC
L2R_L1LOSS_SVC_DUAL =
Liblinearswig::L2R_L1LOSS_SVC_DUAL
MCSVM_CS =
Liblinearswig::MCSVM_CS
L1R_L2LOSS_SVC =
Liblinearswig::L1R_L2LOSS_SVC
L1R_LR =
Liblinearswig::L1R_LR
L2R_LR_DUAL =
Liblinearswig::L2R_LR_DUAL
L2R_L2LOSS_SVR =
Liblinearswig::L2R_L2LOSS_SVR
L2R_L2LOSS_SVR_DUAL =
Liblinearswig::L2R_L2LOSS_SVR_DUAL
L2R_L1LOSS_SVR_DUAL =
Liblinearswig::L2R_L1LOSS_SVR_DUAL
VERSION =
'0.0.5'

Instance Method Summary collapse

Instance Method Details

#array_to_hash(array) ⇒ Hash

Parameters:

  • array (Array)

Returns:

  • (Hash)

Raises:

  • (ArgumentError)

83
84
85
86
87
88
89
90
91
92
# File 'lib/liblinear.rb', line 83

def array_to_hash(array)
  raise ArgumentError unless array.is_a?(Array)
  hash = {}
  key = 1
  array.each do |value|
    hash[key] = value
    key += 1
  end
  hash
end

#convert_to_feature_node_array(example, max_value_index, bias = -1)) ⇒ Liblinearswig::Feature_node

Parameters:

  • example (Hash, Array)
  • max_value_index (Integer)
  • bias (Double) (defaults to: -1))

Returns:

  • (Liblinearswig::Feature_node)

98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/liblinear.rb', line 98

def convert_to_feature_node_array(example, max_value_index, bias = -1)
  example = array_to_hash(example) if example.is_a?(Array)

  example_indexes = []
  example.each_key do |key|
    example_indexes << key
  end
  example_indexes.sort!

  if bias >= 0
    feature_nodes = Liblinearswig.feature_node_array(example_indexes.size + 2)
    Liblinearswig.feature_node_array_set(feature_nodes, example_indexes.size, max_value_index + 1, bias)
    Liblinearswig.feature_node_array_set(feature_nodes, example_indexes.size + 1, -1, 0)
  else
    feature_nodes = Liblinearswig.feature_node_array(example_indexes.size + 1)
    Liblinearswig.feature_node_array_set(feature_nodes, example_indexes.size, -1, 0)
  end

  f_index = 0
  example_indexes.each do |e_index|
    Liblinearswig.feature_node_array_set(feature_nodes, f_index, e_index, example[e_index])
    f_index += 1
  end
  feature_nodes
end

#double_array_c_to_ruby(c_array, size) ⇒ Array <Double>

Parameters:

  • c_array (SWIG::TYPE_p_double)
  • size (Integer)

Returns:

  • (Array <Double>)

63
64
65
# File 'lib/liblinear.rb', line 63

def double_array_c_to_ruby(c_array, size)
  size.times.map {|index| double_getitem(c_array, index)}
end

#free_double_array(c_array) ⇒ Object

Parameters:

  • c_array (SWIG::TYPE_p_double)

49
50
51
# File 'lib/liblinear.rb', line 49

def free_double_array(c_array)
  delete_double(c_array) unless c_array.nil?
end

#free_int_array(c_array) ⇒ Object

Parameters:

  • c_array (SWIG::TYPE_p_int)

34
35
36
# File 'lib/liblinear.rb', line 34

def free_int_array(c_array)
  delete_int(c_array) unless c_array.nil?
end

#int_array_c_to_ruby(c_array, size) ⇒ Array<Integer>

Parameters:

  • c_array (SWIG::TYPE_p_int)
  • size (Integer)

Returns:

  • (Array<Integer>)

56
57
58
# File 'lib/liblinear.rb', line 56

def int_array_c_to_ruby(c_array, size)
  size.times.map {|index| int_getitem(c_array, index)}
end

#max_index(examples) ⇒ Integer

Parameters:

  • examples (Array <Hash, Array>)

Returns:

  • (Integer)

69
70
71
72
73
74
75
76
77
78
79
# File 'lib/liblinear.rb', line 69

def max_index(examples)
  max_index = 0
  examples.each do |example|
    if example.is_a?(Hash)
      max_index = [max_index, example.keys.max].max if example.size > 0
    else
      max_index = [max_index, example.size].max
    end
  end
  max_index
end

#new_double_array(ruby_array) ⇒ SWIG::TYPE_p_double

Parameters:

  • ruby_array (Array <Double>)

Returns:

  • (SWIG::TYPE_p_double)

40
41
42
43
44
45
46
# File 'lib/liblinear.rb', line 40

def new_double_array(ruby_array)
  c_double_array = Liblinearswig.new_double(ruby_array.size)
  ruby_array.size.times do |index|
    Liblinearswig.double_setitem(c_double_array, index, ruby_array[index])
  end
  c_double_array
end

#new_int_array(ruby_array) ⇒ SWIG::TYPE_p_int

Parameters:

  • ruby_array (Array <Integer>)

Returns:

  • (SWIG::TYPE_p_int)

25
26
27
28
29
30
31
# File 'lib/liblinear.rb', line 25

def new_int_array(ruby_array)
  c_int_array = Liblinearswig.new_int(ruby_array.size)
  ruby_array.size.times do |index|
    Liblinearswig.int_setitem(c_int_array, index, ruby_array[index])
  end
  c_int_array
end