机器学习(10)--PCA 和LDA

 

PCA,LDA——简述

机器学习(10)--PCA 和LDA_第1张图片

要求:原数据协方差矩阵变换成对角矩阵(非对角线数据全为零)Ps:非对角线矩阵为零是因为特征线性无关

原数据协方差矩阵不是对角矩阵是因为现在选择的基向量不好,变换后,选择好的基向量

原理:实对称矩阵一定能转换成对角阵

对角线上的值为特征值,大小决定了特征向量的重要程度(降维的关键)

机器学习(10)--PCA 和LDA_第2张图片

目标:分子越大越好(类间距越大越好),分母越小越好(同类分布越密集越好)

机器学习(10)--PCA 和LDA_第3张图片

化简为上图所示

机器学习(10)--PCA 和LDA_第4张图片

加入约束条件

λ表示特征向量的重要程度(降维的关键)

 

PCA和LDA区别:

PCA:协方差求解

LDA:拉格朗日算法求解(约束项)

共同点:都是追求类间距越大越好,同类越密集越好。

 

 

PCA和LDA降维的比较

 

PCA 主成分分析方法,LDA 线性判别分析方法,可以认为是有监督的数据降维。下面的代码分别实现了两种降维方式:

复制代码

print(__doc__)

import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

iris = datasets.load_iris()

X = iris.data
y = iris.target
target_names = iris.target_names

pca = PCA(n_components=2)
X_r = pca.fit(X).transform(X)

lda = LinearDiscriminantAnalysis(n_components=2)
X_r2 = lda.fit(X, y).transform(X)

# Percentage of variance explained for each components
print('explained variance ratio (first two components): %s'
      % str(pca.explained_variance_ratio_))

plt.figure()
for c, i, target_name in zip("rgb", [0, 1, 2], target_names):
    plt.scatter(X_r[y == i, 0], X_r[y == i, 1], c=c, label=target_name)
plt.legend()
plt.title('PCA of IRIS dataset')

plt.figure()
for c, i, target_name in zip("rgb", [0, 1, 2], target_names):
    plt.scatter(X_r2[y == i, 0], X_r2[y == i, 1], c=c, label=target_name)
plt.legend()
plt.title('LDA of IRIS dataset')

plt.show()

复制代码

结果如下

机器学习(10)--PCA 和LDA_第5张图片

你可能感兴趣的:(机器学习)