arroz 0.0.4
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/arroz.rb +5 -0
- data/lib/arroz/distances/euclidean.rb +12 -0
- data/lib/arroz/ensemble.rb +35 -0
- data/lib/arroz/knn.rb +39 -0
- data/lib/arroz/version.rb +3 -0
- metadata +66 -0
data/lib/arroz.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
module Arroz
|
2
|
+
|
3
|
+
class Ensemble
|
4
|
+
|
5
|
+
attr_accessor :classifiers
|
6
|
+
|
7
|
+
def initialize(classifiers)
|
8
|
+
@classifiers = classifiers
|
9
|
+
end
|
10
|
+
|
11
|
+
def classify(element)
|
12
|
+
guesses = classifiers.map { |c| c.classify(element) }
|
13
|
+
|
14
|
+
plurality_vote(guesses)
|
15
|
+
end
|
16
|
+
|
17
|
+
def classify_projections(projections)
|
18
|
+
raise ArgumentError.new("Wrong number of projections") if projections.size != classifiers.size
|
19
|
+
|
20
|
+
guesses = classifiers.zip(projections).
|
21
|
+
map { |classifier, projection| classifier.classify(projection) }
|
22
|
+
|
23
|
+
plurality_vote(guesses)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def plurality_vote(guesses)
|
29
|
+
uniq_guesses = guesses.uniq
|
30
|
+
|
31
|
+
uniq_guesses.map { |g| guesses.count(g) }.zip(uniq_guesses).
|
32
|
+
sort.last.last
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/arroz/knn.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Arroz
|
2
|
+
class KNN
|
3
|
+
|
4
|
+
attr_reader :data, :k
|
5
|
+
|
6
|
+
# The label attribute in the data array must be in the first position
|
7
|
+
def initialize(data, k=1)
|
8
|
+
@data = data
|
9
|
+
@k = k
|
10
|
+
end
|
11
|
+
|
12
|
+
## Returns the predicted class of the element passed
|
13
|
+
def classify(element)
|
14
|
+
neighbors = nearest_neighbors(element)
|
15
|
+
|
16
|
+
neighbor_classes = neighbors.map(&:last)
|
17
|
+
classes = neighbor_classes.uniq
|
18
|
+
|
19
|
+
classes.zip(classes.map { |c| neighbor_classes.count(c) }).
|
20
|
+
sort_by(&:last).last.first
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def nearest_neighbors(element)
|
26
|
+
distances = []
|
27
|
+
|
28
|
+
@data.each do |datum|
|
29
|
+
distances << [distance(element, datum[1..-1]), datum.first]
|
30
|
+
end
|
31
|
+
|
32
|
+
distances.sort.take(k)
|
33
|
+
end
|
34
|
+
|
35
|
+
def distance(e1, e2)
|
36
|
+
raise NotImplementedError
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: arroz
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Guilherme Carvalho
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-13 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
description: Simple attempt to build an IA framework in Ruby
|
31
|
+
email:
|
32
|
+
- guilherme@guava.com.br
|
33
|
+
executables: []
|
34
|
+
extensions: []
|
35
|
+
extra_rdoc_files: []
|
36
|
+
files:
|
37
|
+
- lib/arroz/distances/euclidean.rb
|
38
|
+
- lib/arroz/ensemble.rb
|
39
|
+
- lib/arroz/knn.rb
|
40
|
+
- lib/arroz/version.rb
|
41
|
+
- lib/arroz.rb
|
42
|
+
homepage: http://github.com/gvc/arroz
|
43
|
+
licenses: []
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 1.3.6
|
60
|
+
requirements: []
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 1.8.24
|
63
|
+
signing_key:
|
64
|
+
specification_version: 3
|
65
|
+
summary: Simple attempt to build an IA framework in Ruby
|
66
|
+
test_files: []
|