Class: PCA
- Inherits:
-
Object
- Object
- PCA
- Defined in:
- lib/principal-components-analysis.rb
Instance Method Summary collapse
- #eigen ⇒ Object
-
#initialize(entries) ⇒ PCA
constructor
A new instance of PCA.
- #reduce(reducing_dimension = 1) ⇒ Object
Constructor Details
#initialize(entries) ⇒ PCA
Returns a new instance of PCA.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/principal-components-analysis.rb', line 6 def initialize(entries) @dimension = entries[0].size @entries = Matrix[*entries] conv_m = @entries.covariance_matrix # p conv_m eigen_vectors, eigen_values, v_inv = conv_m.eigensystem @eigen = [] @total_eigenvalue = 0.0 @dimension.times do |i| @eigen << { value: eigen_values[i,i], vector: eigen_vectors.row(i).to_a } @total_eigenvalue += eigen_values[i,i] end @eigen.sort_by!{|v| -v[:value]} end |
Instance Method Details
#eigen ⇒ Object
22 23 24 |
# File 'lib/principal-components-analysis.rb', line 22 def eigen @eigen end |
#reduce(reducing_dimension = 1) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/principal-components-analysis.rb', line 26 def reduce(reducing_dimension=1) factor_array = [] sum_eigenvalue = 0.0 reducing_dimension.times.each do |i| factor_array << @eigen[i][:vector]#.map{|v| v * @eigen[i][:value] } sum_eigenvalue += @eigen[i][:value] end factor = Matrix[ *factor_array ] reduced_matrix = @entries * factor.t distortion_rate = 1 - (sum_eigenvalue/@total_eigenvalue) return reduced_matrix,distortion_rate end |