Class: PCA

Inherits:
Object
  • Object
show all
Defined in:
lib/principal-components-analysis.rb

Instance Method Summary collapse

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

#eigenObject



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