pca 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/pca.rb +19 -5
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 437676549bb33931b4565d105e4a73d5acfc1f35
4
- data.tar.gz: da5c93ae3bcee85fa79a7aab62dc14d6da729856
3
+ metadata.gz: b99f1b6d4bf1ccc3afe06b8c9ba4d4e2ec9f2fc1
4
+ data.tar.gz: 05e82f5c93569697933ea9ed13f801bae97b5bca
5
5
  SHA512:
6
- metadata.gz: bce79847afa2af0cba8305a5eeeccaae29ae651dd9c26a9cef9154971e0680225e61801e179b769dd893544bc4b145b0fea8456cc159984ad882690665a08b13
7
- data.tar.gz: a5b103e1813788e5235c04b7cc90cbee3141d9ec49bfb342a2ba0a7e1019307464b1ea65914b1254b70f274d9021aeb0980b7933323f0f9bf6ec4e2e163b4f2f
6
+ metadata.gz: 0ea21685a8c8376ff1ef31bed9d2d7fb1cc9b8d7cf42b8963746e728566a2fe30e8c1a1915e23720d64e2a6e6b296048d91c25223f72454c150a97817a43ee3a
7
+ data.tar.gz: 1a05a814d570eddeac92990dfae8efb4392a3cf54ce858d305733f594829e51118e530b10da43b745de7e336675556efaec377e6258db1a9cd5225b57077c93b
data/lib/pca.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  require 'gsl'
2
2
 
3
3
  class PCA
4
- attr_reader :components, :singular_values, :mean, :std, :explained_variance, :explained_variance_ratio
4
+ attr_reader :components, :singular_values, :explained_variance, :explained_variance_ratio
5
+ attr_accessor :mean, :std
5
6
 
6
7
  def initialize opts = {}
7
8
  @n_components = opts[:components]
@@ -27,10 +28,15 @@ class PCA
27
28
 
28
29
  def inverse_transform x
29
30
  x = ensure_matrix x
30
- out = x * @components
31
- out.size2.times {|col| out.col(col).mul! @std[col] } if @scale_data
32
- out.size2.times {|col| out.col(col).add! @mean[col] }
33
- out
31
+ xit = x * @components
32
+ undo_scale(xit) if @scale_data
33
+ undo_mean_normalize xit
34
+ xit
35
+ end
36
+
37
+ def components= c
38
+ c = ensure_matrix(c)
39
+ @components = slice_n(c.transpose).transpose
34
40
  end
35
41
 
36
42
  private
@@ -77,6 +83,10 @@ class PCA
77
83
  x.size2.times {|col| x.col(col).sub! @mean[col] }
78
84
  end
79
85
 
86
+ def undo_mean_normalize x
87
+ x.size2.times {|col| x.col(col).add! @mean[col] }
88
+ end
89
+
80
90
  def calculate_std x
81
91
  x.size2.times.map {|col| x.col(col).sd }
82
92
  end
@@ -85,6 +95,10 @@ class PCA
85
95
  x.size2.times {|col| x.col(col).div! @std[col] }
86
96
  end
87
97
 
98
+ def undo_scale x
99
+ x.size2.times {|col| x.col(col).mul! @std[col] }
100
+ end
101
+
88
102
  def slice_n x
89
103
  return x unless @n_components
90
104
  case x
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pca
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geoff Buesing
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-01 00:00:00.000000000 Z
11
+ date: 2015-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rb-gsl