pca 0.2.0 → 0.3.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.
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