lda+pca通过sklearn实现

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  

以后有机会补充。

lda+pca通过sklearn实现_第1张图片

第一个图是PCA的3维图。

第二个图是PCA降到2维的图

第三个是LDA降到2维得图

都用的奇异值分解。

 

你可能感兴趣的:(mathematical,model)