svmlab 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/README +219 -0
- data/lib/arraymethods.rb +87 -0
- data/lib/irb.history +100 -0
- data/lib/libsvmdata.rb +122 -0
- data/lib/svmfeature.rb +337 -0
- data/lib/svmfeature2.rb +98 -0
- data/lib/svmlab-config.rb +215 -0
- data/lib/svmlab-irb.rb +98 -0
- data/lib/svmlab-optim.rb +556 -0
- data/lib/svmlab-plot.rb +170 -0
- data/lib/svmlab.rb +365 -0
- data/lib/svmprediction.rb +176 -0
- data/lib/test.cfg +12 -0
- data/lib/test.rb +5 -0
- data/lib/testdata +3 -0
- data/lib/texput.log +20 -0
- data/lib/tmp.irb.rc +81 -0
- data/lib/v6.cfg +124 -0
- metadata +102 -0
@@ -0,0 +1,176 @@
|
|
1
|
+
require 'arraymethods.rb'
|
2
|
+
|
3
|
+
class SVMPrediction < Hash
|
4
|
+
|
5
|
+
# --- difficultFeature ---
|
6
|
+
def difficultFeature(features)
|
7
|
+
if !features.is_a? SVMFeature
|
8
|
+
raise "Please give a SVMFeature object as argument."
|
9
|
+
end
|
10
|
+
keys = self.keys
|
11
|
+
names = (1...features.dim).map do |i|
|
12
|
+
features.featname(i)
|
13
|
+
end
|
14
|
+
maxlen = names.map{|n| n.size}.max
|
15
|
+
correlations = (1...features.dim).map do |i|
|
16
|
+
predmiss = keys.map { |k|
|
17
|
+
(self[k]['truth'] - self[k]['pred']).abs }
|
18
|
+
feat = keys.map { |k| features[k][i] }
|
19
|
+
"#{names[i-1].rjust(maxlen)} %.2f"%correlation(predmiss, feat)
|
20
|
+
end
|
21
|
+
correlations.sort_by{|line| line.split.last.to_f.abs}.reverse
|
22
|
+
end
|
23
|
+
|
24
|
+
# --- [] ---
|
25
|
+
# If indexing with a regular expression, a new SVMPrediction object is created
|
26
|
+
# containing all elements with matching keys.
|
27
|
+
def [](expr)
|
28
|
+
if expr.is_a? Regexp
|
29
|
+
subs = SVMPrediction.new
|
30
|
+
self.find_all { |(k,v)| k =~ expr }.each do |i|
|
31
|
+
subs[i[0]] = i[1]
|
32
|
+
end
|
33
|
+
subs
|
34
|
+
else
|
35
|
+
super(expr)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# --- (minus) ---
|
40
|
+
# Removes all predictions in arg that is found in self.
|
41
|
+
def -(arg)
|
42
|
+
self.inject(SVMPrediction.new) do |subs, (k,v)|
|
43
|
+
if !arg[k]
|
44
|
+
subs[k] = v if !arg[k]
|
45
|
+
end
|
46
|
+
subs
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Each should be an array giving more than one plot
|
51
|
+
def genericplot(plotdata, file, title='Plot', xtitle='X', ytitle='Y')
|
52
|
+
Gnuplot.open do |gp| # This could be either a file or the gnuplot process that we pipe to
|
53
|
+
Gnuplot::Plot.new( gp ) do |plot|
|
54
|
+
plot.title title
|
55
|
+
plot.xlabel xtitle
|
56
|
+
plot.ylabel ytitle
|
57
|
+
plot.set "grid"
|
58
|
+
if file =~ /(png)|(ps)$/
|
59
|
+
plot.terminal "png size 1024,800 font '/usr/share/fonts/truetype/ttf-bitstream-vera/VeraBd.ttf' 20" if file =~ /png$/
|
60
|
+
plot.terminal "postscript eps color" if file =~ /ps$/
|
61
|
+
plot.output file
|
62
|
+
end
|
63
|
+
plot.data = plotdata
|
64
|
+
end
|
65
|
+
end
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
|
69
|
+
# --- plot ---
|
70
|
+
# Plots true value on the X axis vs. predicted value on the Y axis.
|
71
|
+
def plot(legends = [], title = 'SVM Prediction', err = nil, file = '')
|
72
|
+
# For historical reasons
|
73
|
+
predarr = [ self ]
|
74
|
+
# Set up dataarr
|
75
|
+
dataarr = predarr.map do |predictions|
|
76
|
+
x, y = predictions.inject([[],[]]) { |data,(example,val)|
|
77
|
+
data[0].push(val['truth'])
|
78
|
+
data[1].push(val['pred'])
|
79
|
+
data }
|
80
|
+
end
|
81
|
+
|
82
|
+
from = dataarr.inject(dataarr[0][0][0]) { |m,a|
|
83
|
+
[m, a[0].min, a[1].min].min }.floor
|
84
|
+
to = dataarr.inject(dataarr[0][0][0]) { |m,a|
|
85
|
+
[m, a[0].max, a[1].max].max }.ceil
|
86
|
+
sampleindex = 0
|
87
|
+
# Fiddling with legends
|
88
|
+
legends = dataarr.map{|d| "Sample #{sampleindex+=1}"} if legends.size==0
|
89
|
+
err = ['rmsd','cc'] if !err # Default behaviour
|
90
|
+
err = [err] if err.is_a? String
|
91
|
+
if err
|
92
|
+
legends = legends.map { |legend|
|
93
|
+
legend + ' (' +
|
94
|
+
err.map { |e|
|
95
|
+
begin
|
96
|
+
args = if e.split(/,/).size==1 then nil
|
97
|
+
else '(' + (e.split(/,/)[1..-1]).join(',') + ')' end
|
98
|
+
"#{e} = ".upcase + "%.2f"%eval("self.#{e.split(/,/).first.downcase}#{args}")
|
99
|
+
rescue
|
100
|
+
$!
|
101
|
+
end
|
102
|
+
}.join(', ') + ')'
|
103
|
+
}
|
104
|
+
end
|
105
|
+
# Setting plotdata
|
106
|
+
plotdata = [ Gnuplot::DataSet.new( [[from,to], [from,to]] ) { |ds|
|
107
|
+
ds.using = '1:2'
|
108
|
+
ds.with = "lines"
|
109
|
+
ds.title = "Correct diagonal"
|
110
|
+
ds.linewidth = 1
|
111
|
+
ds.matrix = nil } ] +
|
112
|
+
dataarr.zip(legends).inject([]) { |arr,((x,y),legend)|
|
113
|
+
arr.push(Gnuplot::DataSet.new( [x,y] ) { |ds|
|
114
|
+
ds.using = '1:2'
|
115
|
+
ds.with = "points"
|
116
|
+
ds.title = legend
|
117
|
+
ds.linewidth = 2
|
118
|
+
ds.matrix = nil }) }
|
119
|
+
genericplot(plotdata, file, title, 'Experimental value', 'Predicted value')
|
120
|
+
end
|
121
|
+
|
122
|
+
# --- rmsd ---
|
123
|
+
# Root mean square deviation
|
124
|
+
def rmsd
|
125
|
+
a = [] # Don't initialize in one line : x=y=[]
|
126
|
+
b = [] # If doing that, they will both refer to the same array
|
127
|
+
self.each { |example,val|
|
128
|
+
a.push(val['truth'].to_f)
|
129
|
+
b.push(val['pred'].to_f)
|
130
|
+
}
|
131
|
+
if (x = a.zip(b).inject(0) {|sd, (d, q)| sd + (d - q)**2 }.to_f / a.length) > 0
|
132
|
+
Math.sqrt(x)
|
133
|
+
else
|
134
|
+
0
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
# --- cc ---
|
139
|
+
# Correlation coefficient
|
140
|
+
def cc
|
141
|
+
a = [] # Don't initialize in one line : x=y=[]
|
142
|
+
b = [] # If doing that, they will both refer to the same array
|
143
|
+
self.each { |example,val|
|
144
|
+
a.push(val['truth'].to_f)
|
145
|
+
b.push(val['pred'].to_f)
|
146
|
+
}
|
147
|
+
amean = a.inject(0) {|sum,i| sum + i} / a.size.to_f
|
148
|
+
bmean = b.inject(0) {|sum,i| sum + i} / b.size.to_f
|
149
|
+
ssa = a.inject(0.0) {|ss,i| ss + (i-amean)**2}
|
150
|
+
ssb = b.inject(0) {|ss,i| ss + (i-bmean)**2}
|
151
|
+
ssab = a.zip(b).inject(0) {|ss,(ai,bi)| ss + (ai-amean) * (bi-bmean)}
|
152
|
+
if ssab > 0
|
153
|
+
Math::sqrt(ssab**2 / (ssa * ssb))
|
154
|
+
else
|
155
|
+
0
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
# --- f1 ---
|
160
|
+
# Precision Recall measure
|
161
|
+
def f1( border = 0)
|
162
|
+
tp = self.select { |k,v| v['truth'] >= border and v['pred'] >= border}.size.to_f
|
163
|
+
fp = self.select { |k,v| v['truth'] < border and v['pred'] >= border}.size.to_f
|
164
|
+
fn = self.select { |k,v| v['truth'] >= border and v['pred'] < border}.size.to_f
|
165
|
+
precision = if (denom=tp+fp) > 0 then tp / denom
|
166
|
+
else 0 end
|
167
|
+
recall = if (denom=tp+fn) > 0 then tp / denom
|
168
|
+
else 0 end
|
169
|
+
if (denom = precision + recall) > 0
|
170
|
+
2 * precision * recall / denom
|
171
|
+
else
|
172
|
+
0
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
data/lib/test.cfg
ADDED
data/lib/test.rb
ADDED
data/lib/testdata
ADDED
data/lib/texput.log
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
This is pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6) (format=latex 2008.11.29) 16 MAR 2009 10:48
|
2
|
+
entering extended mode
|
3
|
+
%&-line parsing enabled.
|
4
|
+
**main.tex
|
5
|
+
|
6
|
+
! Emergency stop.
|
7
|
+
<*> main.tex
|
8
|
+
|
9
|
+
*** (job aborted, file error in nonstop mode)
|
10
|
+
|
11
|
+
|
12
|
+
Here is how much of TeX's memory you used:
|
13
|
+
3 strings out of 94102
|
14
|
+
111 string characters out of 1165832
|
15
|
+
47703 words of memory out of 1500000
|
16
|
+
3383 multiletter control sequences out of 10000+50000
|
17
|
+
3640 words of font info for 14 fonts, out of 1200000 for 2000
|
18
|
+
637 hyphenation exceptions out of 8191
|
19
|
+
0i,0n,0p,1b,6s stack positions out of 5000i,500n,6000p,200000b,5000s
|
20
|
+
No pages of output.
|
data/lib/tmp.irb.rc
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'irb/completion'
|
2
|
+
require 'svmlab'
|
3
|
+
|
4
|
+
IRB.conf[:PROMPT][:SVMLab] = { # name of prompt mode
|
5
|
+
:PROMPT_I => "SVMLab:%03n:%i> ", # normal prompt
|
6
|
+
:PROMPT_S => "SVMLab:%03n:%i%l ", # prompt for continuing strings
|
7
|
+
:PROMPT_C => "SVMLab:%03n:%i* ", # prompt for continuing statement
|
8
|
+
:RETURN => " ==>%s\n" # format to return value
|
9
|
+
}
|
10
|
+
|
11
|
+
IRB.conf[:PROMPT_MODE] = :SVMLab
|
12
|
+
|
13
|
+
|
14
|
+
# Sebastian Delmont
|
15
|
+
# Pretty print methods
|
16
|
+
ANSI_BOLD = "\033[1m"
|
17
|
+
ANSI_RESET = "\033[0m"
|
18
|
+
ANSI_LGRAY = "\033[0;37m"
|
19
|
+
ANSI_GRAY = "\033[1;30m"
|
20
|
+
|
21
|
+
def pm(obj, *options) # Print methods
|
22
|
+
methods = obj.methods
|
23
|
+
methods -= Object.methods unless options.include? :more
|
24
|
+
filter = options.select {|opt| opt.kind_of? Regexp}.first
|
25
|
+
methods = methods.select {|name| name =~ filter} if filter
|
26
|
+
|
27
|
+
data = methods.sort.collect do |name|
|
28
|
+
method = obj.method(name)
|
29
|
+
if method.arity == 0
|
30
|
+
args = "()"
|
31
|
+
elsif method.arity > 0
|
32
|
+
n = method.arity
|
33
|
+
args = "(#{(1..n).collect {|i| "arg#{i}"}.join(", ")})"
|
34
|
+
elsif method.arity < 0
|
35
|
+
n = -method.arity
|
36
|
+
args = "(#{(1..n).collect {|i| "arg#{i}"}.join(", ")}, ...)"
|
37
|
+
end
|
38
|
+
klass = $1 if method.inspect =~ /Method: (.*?)#/
|
39
|
+
[name, args, klass]
|
40
|
+
end
|
41
|
+
max_name = data.collect {|item| item[0].size}.max
|
42
|
+
max_args = data.collect {|item| item[1].size}.max
|
43
|
+
data.each do |item|
|
44
|
+
print " #{ANSI_BOLD}#{item[0].rjust(max_name)}#{ANSI_RESET}"
|
45
|
+
print "#{ANSI_GRAY}#{item[1].ljust(max_args)}#{ANSI_RESET}"
|
46
|
+
print " #{ANSI_LGRAY}#{item[2]}#{ANSI_RESET}\n"
|
47
|
+
end
|
48
|
+
data.size
|
49
|
+
end
|
50
|
+
|
51
|
+
# To enable history saving between sessions
|
52
|
+
IRB.conf[:SAVE_HISTORY] = 100
|
53
|
+
|
54
|
+
# Stian Haklev / Joel VanderWerf
|
55
|
+
# To reduce lengthy output
|
56
|
+
class IRB::Context
|
57
|
+
attr_accessor :max_output_size
|
58
|
+
|
59
|
+
alias initialize_before_max_output_size initialize
|
60
|
+
def initialize(*args)
|
61
|
+
initialize_before_max_output_size(*args)
|
62
|
+
@max_output_size = IRB.conf[:MAX_OUTPUT_SIZE] || 80
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class IRB::Irb
|
67
|
+
def output_value
|
68
|
+
text =
|
69
|
+
if @context.inspect?
|
70
|
+
sprintf @context.return_format, @context.last_value.inspect
|
71
|
+
else
|
72
|
+
sprintf @context.return_format, @context.last_value
|
73
|
+
end
|
74
|
+
max = @context.max_output_size
|
75
|
+
if text.size < max
|
76
|
+
puts text
|
77
|
+
else
|
78
|
+
puts text[0..max-1] + "..." + text[-2..-1]
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/lib/v6.cfg
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
---
|
2
|
+
#------------------------------------------------------------
|
3
|
+
# CONFIGURATION OF SVM PARAMETERS
|
4
|
+
#------------------------------------------------------------
|
5
|
+
SVM:
|
6
|
+
C: 1 step exp1.0
|
7
|
+
e: 0.3 step exp1.0
|
8
|
+
g: 0.04 step exp1.0
|
9
|
+
#C: 1 #step exp1.0
|
10
|
+
#e: 0.17 #step exp1.0
|
11
|
+
#g: 0.4 #step exp1.0
|
12
|
+
Optimization:
|
13
|
+
Method: "patternsearch"
|
14
|
+
Nhalf: 3
|
15
|
+
Scale:
|
16
|
+
ddG:
|
17
|
+
- max #step exp0.1
|
18
|
+
KFCprop:
|
19
|
+
- max #step exp0.1 # size
|
20
|
+
- max #step exp0.1 # chemical properties
|
21
|
+
- max #step exp0.1
|
22
|
+
- max #step exp0.1
|
23
|
+
KFCN:
|
24
|
+
- max #step exp0.1
|
25
|
+
- max #step exp0.1
|
26
|
+
- max #step exp0.1
|
27
|
+
- max #step exp0.1
|
28
|
+
- max #step exp0.1
|
29
|
+
- max #step exp0.1
|
30
|
+
- max #step exp0.1
|
31
|
+
- max #step exp0.1
|
32
|
+
- max #step exp0.1
|
33
|
+
- max #step exp0.1
|
34
|
+
KFCS:
|
35
|
+
- max #step exp0.1
|
36
|
+
- max #step exp0.1
|
37
|
+
- max #step exp0.1
|
38
|
+
- max #step exp0.1
|
39
|
+
- max #step exp0.1
|
40
|
+
- max #step exp0.1
|
41
|
+
- max #step exp0.1
|
42
|
+
- max #step exp0.1
|
43
|
+
- max #step exp0.1
|
44
|
+
- max #step exp0.1
|
45
|
+
KFCPolarBonds:
|
46
|
+
- max
|
47
|
+
KFCGenericBonds:
|
48
|
+
- max
|
49
|
+
KFCHbonds:
|
50
|
+
- max #step exp0.1
|
51
|
+
HBPlusBonds:
|
52
|
+
- max
|
53
|
+
zdscore:
|
54
|
+
- max
|
55
|
+
- max
|
56
|
+
- max
|
57
|
+
#------------------------------------------------------------
|
58
|
+
# CONFIGURATION OF FEATURE PARAMETERS
|
59
|
+
#------------------------------------------------------------
|
60
|
+
Feature:
|
61
|
+
#PosClassFrom: 2.0
|
62
|
+
# Features is a list of all features used
|
63
|
+
# Each feature need to have its configuration given
|
64
|
+
Features:
|
65
|
+
- ddG
|
66
|
+
- KFCN
|
67
|
+
- KFCS
|
68
|
+
- KFCPolarBonds
|
69
|
+
- KFCGenericBonds
|
70
|
+
- KFCHbonds
|
71
|
+
- KFCprop
|
72
|
+
#- HBPlusBonds
|
73
|
+
#- zdscore
|
74
|
+
# "BaseDir" is the directory from which all paths are derived
|
75
|
+
BaseDir: /home/fred/DeltaDeltaG/Features/
|
76
|
+
# "DataSet" is the file (relative to BaseDir or absolute)
|
77
|
+
# that holds names of examples
|
78
|
+
DataSet: KFCdatasettest
|
79
|
+
# "Methods" is the .rb file that holds all feature methods
|
80
|
+
Methods:
|
81
|
+
- KFCfeatures.rb
|
82
|
+
- fredrik-hbplus.rb
|
83
|
+
- /home/fred/DeltaDeltaG/ZDOCK-Features/zdock-svm.rb
|
84
|
+
Groups: (0..3)
|
85
|
+
#---SEPARATE FEATURE CONFIGURATIONS FROM HERE--------------
|
86
|
+
#---------------------------ddG----------------------------
|
87
|
+
ddG:
|
88
|
+
Dimensions: 1
|
89
|
+
# "HomeDir" is optional. If not given, it will be set to <BaseDir>/<Feature name>
|
90
|
+
HomeDir: ddG/
|
91
|
+
# "Method" is mandatory and is the name of the method calculating the feature
|
92
|
+
Method: kfc_ddG
|
93
|
+
#----------------------------KFCprop-----------------------
|
94
|
+
KFCprop:
|
95
|
+
Dimensions: 4
|
96
|
+
Method: kfcProperties
|
97
|
+
#----------------------------KFCN--------------------------
|
98
|
+
KFCN:
|
99
|
+
Dimensions: 10
|
100
|
+
Method: kfcN
|
101
|
+
#----------------------------KFCS--------------------------
|
102
|
+
KFCS:
|
103
|
+
Dimensions: 10
|
104
|
+
Method: kfcS
|
105
|
+
#----------------------------KFCPolarBonds-----------------
|
106
|
+
KFCPolarBonds:
|
107
|
+
Method: kfcPolarBonds
|
108
|
+
#----------------------------KFCGenericBonds---------------
|
109
|
+
KFCGenericBonds:
|
110
|
+
Method: kfcGenericBonds
|
111
|
+
#----------------------------KFCHbonds---------------------
|
112
|
+
KFCHbonds:
|
113
|
+
Method: kfcHbonds
|
114
|
+
#----------------------------HBPlusBonds-------------------
|
115
|
+
HBPlusBonds:
|
116
|
+
Dimensions: 1
|
117
|
+
Method: hbonds
|
118
|
+
MaxH2O: 2
|
119
|
+
OnlySideChain: yes
|
120
|
+
#----------------------------zdscore-----------------------
|
121
|
+
zdscore:
|
122
|
+
Dimensions: 3
|
123
|
+
Method: zdscoreSimple
|
124
|
+
HomeDir: /home/fred/DeltaDeltaG/ZDOCK-Features/zdscoreSimple/
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: svmlab
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 1
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
version: 1.0.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Fredrik Johansson
|
13
|
+
autorequire: svmlab
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-26 00:00:00 +09:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: forkoff
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
- !ruby/object:Gem::Dependency
|
33
|
+
name: gnuplot
|
34
|
+
prerelease: false
|
35
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
segments:
|
40
|
+
- 0
|
41
|
+
version: "0"
|
42
|
+
type: :runtime
|
43
|
+
version_requirements: *id002
|
44
|
+
description:
|
45
|
+
email: fredjoha@gmail.com
|
46
|
+
executables: []
|
47
|
+
|
48
|
+
extensions: []
|
49
|
+
|
50
|
+
extra_rdoc_files: []
|
51
|
+
|
52
|
+
files:
|
53
|
+
- lib/svmlab-optim.rb
|
54
|
+
- lib/v6.cfg
|
55
|
+
- lib/tmp.irb.rc
|
56
|
+
- lib/libsvmdata.rb
|
57
|
+
- lib/testdata
|
58
|
+
- lib/test.cfg
|
59
|
+
- lib/svmfeature2.rb
|
60
|
+
- lib/test.rb
|
61
|
+
- lib/svmlab-config.rb
|
62
|
+
- lib/svmlab-plot.rb
|
63
|
+
- lib/svmlab.rb
|
64
|
+
- lib/irb.history
|
65
|
+
- lib/arraymethods.rb
|
66
|
+
- lib/svmfeature.rb
|
67
|
+
- lib/svmlab-irb.rb
|
68
|
+
- lib/texput.log
|
69
|
+
- lib/svmprediction.rb
|
70
|
+
- lib/README
|
71
|
+
has_rdoc: true
|
72
|
+
homepage: http://ediacara.bmr.kyushu-u.ac.jp/fredrik
|
73
|
+
licenses: []
|
74
|
+
|
75
|
+
post_install_message:
|
76
|
+
rdoc_options: []
|
77
|
+
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
segments:
|
85
|
+
- 0
|
86
|
+
version: "0"
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
segments:
|
92
|
+
- 0
|
93
|
+
version: "0"
|
94
|
+
requirements: []
|
95
|
+
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 1.3.6
|
98
|
+
signing_key:
|
99
|
+
specification_version: 3
|
100
|
+
summary: A tool for experimenting with Support Vector Machines.
|
101
|
+
test_files: []
|
102
|
+
|