两种方法各有优缺
链接: https://github.com/LeBron-Jian/MachineLearningNote/blob/master/LDA/idrs_lda.py
在有标签的情况下,选择LDA是比较好的
下面展示一些 内联代码片
。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets.samples_generator import make_classification
from sklearn.decomposition import PCA##导入PCA库
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis##导入LDA库
X, y = make_classification(n_samples=1000, n_features=3, n_redundant=0,
n_classes=3, n_informative=2, n_clusters_per_class=1,
class_sep=0.5, random_state=10)
fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=20, azim=20)
ax.scatter(X[:, 0], X[:, 1], X[:, 2], marker='o', c=y)
PCA
PCA没有利用类别信息,样本特征和类别的信息关联几乎完全丢失。
/pca = PCA(n_components=2)
pca.fit(X)
print("各主成分的方差值:",pca.explained_variance_)
print("各主成分的方差值与总方差之比:",pca.explained_variance_ratio_)
print("累计方差贡献率:",(pca.explained_variance_ratio_).sum())
X_new = pca.transform(X)
plt.scatter(X_new[:, 0], X_new[:, 1], marker='o', c=y)
plt.show()/ An highlighted block
var foo = 'bar';
LDA
可以看出降维后样本特征信息之间的关系得以保留。
lda = LinearDiscriminantAnalysis()
lda.fit(X, y)
X_new = lda.transform(X)
plt.scatter(X_new[:, 0], X_new[:, 1], marker='o', c=y)
plt.show()