Что не так с моим PCA?

Мой код:

from numpy import *

def pca(orig_data):
    data = array(orig_data)
    data = (data - data.mean(axis=0)) / data.std(axis=0)
    u, s, v = linalg.svd(data)
    print s #should be s**2 instead!
    print v

def load_iris(path):
    lines = []
    with open(path) as input_file:
        lines = input_file.readlines()
    data = []
    for line in lines:
        cur_line = line.rstrip().split(',')
        cur_line = cur_line[:-1]
        cur_line = [float(elem) for elem in cur_line]
        data.append(array(cur_line))
    return array(data)

if __name__ == '__main__':
    data = load_iris('iris.data')
    pca(data)

Набор данных iris: http: // archive. ics.uci.edu/ml/machine-learning-databases/iris/iris.data[123 sizesOutput :

[ 20.89551896  11.75513248   4.7013819    1.75816839]
[[ 0.52237162 -0.26335492  0.58125401  0.56561105]
 [-0.37231836 -0.92555649 -0.02109478 -0.06541577]
 [ 0.72101681 -0.24203288 -0.14089226 -0.6338014 ]
 [ 0.26199559 -0.12413481 -0.80115427  0.52354627]]

Желаемый результат:
Собственные значения - [2,9108 0,9212 0,1474 0,0206]
Основные компоненты - То же, что и я, но транспонировано , так что хорошо, я думаю

Кроме того, что с выводом функции linalg.eig? Согласно описанию PCA в википедии, я должен сделать следующее:

cov_mat = cov(orig_data)
val, vec = linalg.eig(cov_mat)
print val

Но на самом деле это не соответствует выводам в учебных пособиях, которые я нашел в Интернете. Кроме того, если у меня 4 измерения, я думал, что у меня должно быть 4 собственных значения, а не 150, как дает мне eig. Я что-то делаю не так?

edit : Я заметил, что значения отличаются на 150, то есть на количество элементов в наборе данных. Кроме того, собственные значения должны складываться так, чтобы они были равны количеству измерений, в данном случае 4. Я не понимаю, почему возникает такая разница. Если бы я просто разделил собственные значения на len (data) , я мог бы получить желаемый результат, но не понимаю почему. В любом случае пропорция собственных значений не меняется, но они важны для меня, поэтому я хотел бы понять, что происходит.

9
задан Steve Tjoa 26 January 2011 в 06:07
поделиться