分析思路:
先導(dǎo)入pandas、numpy包;
定義一個(gè)myPCA,傳入data及n_components參數(shù),并設(shè)置components為1000000維;
①先求每個(gè)屬性的平均值,即按列求平均值,并將結(jié)果賦予mean_vals;
②將每列數(shù)據(jù)減去該列平均數(shù),得到新的data,并賦予mid;
③求mid的協(xié)方差矩陣,將結(jié)果賦予cov_mat;
④引入scipy的linalg包;
⑤通過linalg.eig求協(xié)方差矩陣cov_mat的特征值和特征向量,并將結(jié)果賦予eig_vals,eig_vects;
⑥求最大特征值。先將特征值通過np.argsort進(jìn)行排序,然后取最大特征值,并將結(jié)果賦予eig_val_index;
⑦求最大特征值特征向量,將結(jié)果賦給eig_vects;
⑧用mid乘以特征向量eig_vects,得到轉(zhuǎn)換后的矩陣low_dim_mat;
⑨返回降維后的矩陣和特征值。
代碼實(shí)現(xiàn)如下:

返回結(jié)果為:
(array([[-0.82797019],
???????[ 1.77758033],
???????[-0.99219749],
???????[-0.27421042],
???????[-1.67580142],
???????[-0.9129491 ],
???????[ 0.09910944],
???????[ 1.14457216],
???????[ 0.43804614],
???????[ 1.22382056]]), array([0.0490834 +0.j, 1.28402771+0.j]))