ruby-svd 0.5.0 → 0.5.1
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/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
|
-
|