(有监督数据降维)线性判别分析 - LDA

文章目录

    • 一,LDA的基本思想及数学分析
    • 二,如何使用LDA进行数据降维
    • 三,示例

sklearn官网 - sklearn.decomposition.LatentDirichletAllocation

一,LDA的基本思想及数学分析

参考:【机器学习】LDA线性判别分析
参考:机器学习降维算法二:LDA(Linear Discriminant Analysis)
LDA和PCA对比
LDA用于降维,和PCA有很多相同,也有很多不同的地方,因此值得好好的比较一下两者的降维异同点。

首先我们看看相同点

  • 两者均可以对数据进行降维。
  • 两者在降维时均使用了矩阵特征分解的思想。(求特征值、特征向量)
  • 两者都假设数据符合高斯分布

我们接着看看不同点

  • LDA是有监督的降维方法,而PCA是无监督的降维方法
  • LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。
  • LDA除了可以用于降维,还可以用于分类。
  • LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。

这点可以从下图形象的看出,在不同数据分布下LDA和PCA降维的优势不同。二者各有优缺。
(有监督数据降维)线性判别分析 - LDA_第1张图片
LDA算法的主要优点有:

  • 在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。
  • LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

LDA算法的主要缺点有:

  • LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。
  • LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。
  • LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。
  • LDA可能过度拟合数据.

二,如何使用LDA进行数据降维

from sklearn.datasets import load_breast_cancer

BC = load_breast_cancer()
X = BC.data
y = BC.target

样本数:569
维度:30

X.shape
>>>(569, 30)

将数据降至1维

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

LDA = LinearDiscriminantAnalysis(n_components=1)

1,先进行拟合fit(self, X[, y]),在进行转化transform(self, X)

LDA.fit(X,y)
X_proj = LDA.transform(X)
X_proj.shape
>>>(569, 1)

2,拟合后直接对自身转化fit_transform

x_pro = LDA.fit_transform(X,y)
x_pro.shape
>>>(569, 1)

三,示例

以红酒数据为例

from sklearn.datasets import load_wine
import matplotlib.pyplot as plt
import numpy as np
wine = load_wine()
X = wine.data
y = wine.target

原数据维度:3

np.unique(y)
>>>array([0, 1, 2])

通过LDA降至2维

LDA = LinearDiscriminantAnalysis(n_components=2)
LDA.fit(X,y)
X_lda = LDA.transform(X)
plt.figure()
colors = ['navy', 'turquoise', 'darkorange']
lw = 2

for color, i in zip(colors, [0, 1, 2]):
    plt.scatter(X_lda[y == i, 0], X_lda[y == i, 1], color=color,
                alpha=.8, lw=lw)
plt.show()

(有监督数据降维)线性判别分析 - LDA_第2张图片

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