from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inline
iris = datasets.load_iris()
x = iris.data
y = iris.target
print("降维前样本数量和维度:",x.shape)
px = PCA(n_components=3)
X_pca = px.fit_transform(x)
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
ax.scatter(X_pca[:, 0], X_pca[:, 1], X_pca[:, 2], marker='o', c=iris_y)
plt.show()
px = PCA(n_components=2)
x_p = px.fit_transform(x)
plt.scatter(x_p[:,0].reshape((-1)),x_p[:,1].reshape((-1)),c=y)
plt.show()
print(px.score(x,y))
print("PCA降维后各主成分方向:",px.components_)
print("PCA降维后各主成分的方差值:",px.explained_variance_)
print("降维后各主成分的方差值与总方差之比:",px.explained_variance_ratio_)
print("降维后主成分数:",px.n_components_)
print("PCA降维后样本数量和维度:",x_p.shape)
print("----------------------------------------")
lda = LinearDiscriminantAnalysis(n_components=2)
x_lda = lda.fit(x,y).transform(x)
plt.scatter(x_lda[:,0], x_lda[:,1],c=y)
plt.show()
#这个有问题 不知道为啥
#print("LDA降维后各成分方差与总方差之比",lda.explained_variance_ratio_)
总结一下。
PCA目前还只知道可以做降维。 没怎么太了解。
LDA则是可以分类也可以降维。 降维最多不超过类别-1
以后有机会补充。
第一个图是PCA的3维图。
第二个图是PCA降到2维的图
第三个是LDA降到2维得图
都用的奇异值分解。