import numpy as np
from sklearn import datasets
iris = datasets.load_iris()
cov_mat = np.cov(iris.data, rowvar=False)
eignvalue, featurevector = np.linalg.eig(cov_mat)
print(cov_mat, '\n')
print(eignvalue, '\n')
print(featurevector)
#This is sklearn
from sklearn import decomposition
pca = decomposition.PCA()
pca_result = pca.fit(iris.data)
#特征向量,成分
print(pca_result.components_, '\rn')
#特征值,方差
print(pca_result.components_, '\rn')
pca_result.singular_values的值等于下方的S,是奇异值
import numpy as np
from sklearn import datasets
iris = datasets.load_iris()
mean_ = np.mean(iris.data, 0)
X = iris.data - mean_
Q,S,VT = np.linalg.svd(X)
print(S)
[25.09996044 6.01314738 3.41368064 1.88452351]
import numpy as np
from sklearn import datasets
from sklearn import decomposition
iris = datasets.load_iris()
mean_ = np.mean(iris.data, 0)
X = iris.data - mean_
cov_mat = np.cov(iris.data, rowvar=False)
print('\n', np.dot(X[:, 0], X[:, 0])/149, '\n')
eignvalue, featurevector = np.linalg.eig(cov_mat)
my_new_data = np.dot(featurevector.T, X.T).T
print(cov_mat, '\n')
print(eignvalue, '\n')
print(featurevector)
pca = decomposition.PCA(n_components=2)
# pca = decomposition.PCA()
pca_result = pca.fit(iris.data)
new_data = pca.fit_transform(iris.data)
# back = np.dot(np.linalg.inv(featurevector.T), my_new_data.T).T
#只保留两个成分的恢复结果
my_new_data[:,3:4] = 0
back = np.dot(np.linalg.inv(featurevector.T), my_new_data.T).T
参考文献: