ruby-svd 0.5.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +36 -0
- data/lib/lsa.rb +4 -0
- data/lib/svd_matrix.rb +2 -1
- metadata +8 -16
- data/README +0 -6
data/README.markdown
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
Ruby SVD
|
2
|
+
========
|
3
|
+
Singular Value Decomposition for Ruby with no dependency on GSL or LAPACK.
|
4
|
+
|
5
|
+
About
|
6
|
+
-----
|
7
|
+
Ruby SVD provides an interface to the Numerical Recipies C implementation of an SVD matrix decomposer. It also includes an extension to the native Ruby Matrix class with a simple LSA
|
8
|
+
method (decomposes the matrix, transposes matrix V, diagonalises the S array into a matrix, then removes all but the two leading terms in S to compress the original matrix to two dimensions).
|
9
|
+
|
10
|
+
Sample Usage
|
11
|
+
------------
|
12
|
+
```ruby
|
13
|
+
require 'ruby-svd'
|
14
|
+
|
15
|
+
tdm = SVDMatrix.new(4, 2)
|
16
|
+
tdm.set_row(0, [1,0])
|
17
|
+
tdm.set_row(1, [1,0])
|
18
|
+
tdm.set_row(2, [0,1])
|
19
|
+
tdm.set_row(3, [0,1])
|
20
|
+
|
21
|
+
puts "== Term document matrix:"
|
22
|
+
p tdm
|
23
|
+
|
24
|
+
puts "\n== Decomposing matrix:"
|
25
|
+
lsa = LSA.new(tdm)
|
26
|
+
p lsa
|
27
|
+
|
28
|
+
puts "\n== Classifying new column vector: [1, 0.5, 0, 0.5]"
|
29
|
+
puts "Format is [column, similarity]"
|
30
|
+
ranks = lsa.classify_vector([1,0.5,0,0.5])
|
31
|
+
p ranks
|
32
|
+
|
33
|
+
sorted_ranks = ranks.sort_by(&:last).reverse
|
34
|
+
puts "\n== Vector most similar to column #{sorted_ranks.first[0]}"
|
35
|
+
p tdm.column(sorted_ranks.first[0])
|
36
|
+
```
|
data/lib/lsa.rb
CHANGED
@@ -7,6 +7,10 @@ class LSA
|
|
7
7
|
@u, @s, @v = matrix.decompose(2)
|
8
8
|
end
|
9
9
|
|
10
|
+
def inspect
|
11
|
+
"U:\n#{@u.inspect}\n\nS:\n#{@s.inspect}\n\nV:\n#{@v.inspect}"
|
12
|
+
end
|
13
|
+
|
10
14
|
# Return a distance (cosine similarity) between a new vector,
|
11
15
|
# and all the clusters (columns) used in the original matrix.
|
12
16
|
# Returns a sorted list of indexes and distances,
|
data/lib/svd_matrix.rb
CHANGED
@@ -7,6 +7,7 @@ class SVDMatrix < Matrix
|
|
7
7
|
# Create a new SVD Matrix with m rows, n columns
|
8
8
|
def initialize(m, n)
|
9
9
|
@rows = Array.new(m)
|
10
|
+
@column_size = n
|
10
11
|
m.times {|i| @rows[i] = Array.new(n)}
|
11
12
|
end
|
12
13
|
|
@@ -22,7 +23,7 @@ class SVDMatrix < Matrix
|
|
22
23
|
|
23
24
|
# Nicely formatted inspect string for the matrix
|
24
25
|
def inspect
|
25
|
-
@rows.collect {|row|
|
26
|
+
@rows.collect {|row| row.inspect}.join("\n")
|
26
27
|
end
|
27
28
|
|
28
29
|
# Perform SVD and decompose the matrix into three matrices:
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-svd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 5
|
8
|
-
- 0
|
9
|
-
version: 0.5.0
|
4
|
+
prerelease:
|
5
|
+
version: 0.5.1
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Will Cannings
|
@@ -14,7 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date:
|
13
|
+
date: 2011-05-30 00:00:00 +10:00
|
18
14
|
default_executable:
|
19
15
|
dependencies: []
|
20
16
|
|
@@ -26,7 +22,7 @@ extensions:
|
|
26
22
|
- ext/extconf.rb
|
27
23
|
extra_rdoc_files:
|
28
24
|
- LICENSE
|
29
|
-
- README
|
25
|
+
- README.markdown
|
30
26
|
files:
|
31
27
|
- ext/extconf.rb
|
32
28
|
- ext/nrutil.h
|
@@ -36,14 +32,14 @@ files:
|
|
36
32
|
- lib/ruby-svd.rb
|
37
33
|
- lib/svd_matrix.rb
|
38
34
|
- LICENSE
|
39
|
-
- README
|
35
|
+
- README.markdown
|
40
36
|
has_rdoc: true
|
41
37
|
homepage: http://github.com/willcannings/ruby-svd
|
42
38
|
licenses: []
|
43
39
|
|
44
40
|
post_install_message:
|
45
|
-
rdoc_options:
|
46
|
-
|
41
|
+
rdoc_options: []
|
42
|
+
|
47
43
|
require_paths:
|
48
44
|
- lib
|
49
45
|
- ext
|
@@ -52,21 +48,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
52
48
|
requirements:
|
53
49
|
- - ">="
|
54
50
|
- !ruby/object:Gem::Version
|
55
|
-
segments:
|
56
|
-
- 0
|
57
51
|
version: "0"
|
58
52
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
53
|
none: false
|
60
54
|
requirements:
|
61
55
|
- - ">="
|
62
56
|
- !ruby/object:Gem::Version
|
63
|
-
segments:
|
64
|
-
- 0
|
65
57
|
version: "0"
|
66
58
|
requirements: []
|
67
59
|
|
68
60
|
rubyforge_project:
|
69
|
-
rubygems_version: 1.
|
61
|
+
rubygems_version: 1.6.2
|
70
62
|
signing_key:
|
71
63
|
specification_version: 3
|
72
64
|
summary: SVD for Ruby
|
data/README
DELETED
@@ -1,6 +0,0 @@
|
|
1
|
-
Singular Value Decomposition for Ruby with no dependency on GSL or LAPACK. Uses a C extension
|
2
|
-
to the Numerical Recipies C implementation of an SVD matrix decomposer. Also includes an
|
3
|
-
extension to the native Ruby Matrix class with a simple LSA method (decomposes the matrix,
|
4
|
-
transposes matrix V, diagonalises the S array into a matrix, then removes all but the two
|
5
|
-
leading terms in S to compress the original matrix to two dimensions).
|
6
|
-
|