Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. import matplotlib.pyplot as plt
  2. import numpy
  3.  
  4. def pca(datas, dim):
  5. cov_matrix = cov(transposition(datas))
  6.  
  7. evs = eigen_vectors(cov_matrix)
  8.  
  9. return [tuple(sum([a*b for a, b in zip(v,d)]) for v in evs[:dim]) for d in datas]
  10.  
  11. def eigen_vectors(matrix):
  12. eigen_values, eigen_matrix = numpy.linalg.eig(matrix)
  13.  
  14. eigens = sorted([
  15. (eigen_values[i], eigen_matrix[:, i].tolist()) for i in range(len(eigen_values))
  16. ], key=lambda x: x[0], reverse=True)
  17.  
  18. return [e[1] for e in eigens]
  19.  
  20. def transposition(datas):
  21. return [ [d[i] for d in datas] for i in range(len(datas[1])) ]
  22.  
  23. def cov(td):
  24. variance_matrix = numpy.array([
  25. [covariance(td[i], td[j]) for i in range(len(td))]
  26. for j in range(len(td))
  27. ])
  28. return variance_matrix
  29.  
  30. def average(data_series):
  31. return sum(data_series) / len(data_series)
  32.  
  33. def covariance(data_series_a, data_series_b):
  34. return sum([(d_a - average(data_series_a)) * (d_b - average(data_series_b)) for d_a, d_b in zip(data_series_a, data_series_b)]) / len(data_series_a)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement