【无标题】

LDA(思路和代码)

LDA的思路

LDA就是投影之后,类内的方差最小,但是不同类之间的方差最大。它是一种监督学习的降维技术。
LDA算法主要流程如下:
  输入:数据集 𝐷={(𝑥1,𝑦1),(𝑥2,𝑦2),…,((𝑥𝑚,𝑦𝑚))}, 其中任意样本 𝑥𝑖 为n维向量,𝑦𝑖∈{𝐶1,𝐶2,…,𝐶𝑘}, 降维到的维度d。

输出:降维后的样本集𝐷′
  1) 计算类内散度矩阵 𝑆𝑤
  2) 计算类间散度矩阵 𝑆𝑏
  3) 计算矩阵 𝑆−1𝑤𝑆𝑏
  4) 计算 𝑆−1𝑤𝑆𝑏 的最大的d个特征值和对应的d个特征向量 (𝑤1,𝑤2,…𝑤𝑑), 得到投影矩阵𝑊
  5) 对样本集中的每一个样本特征 𝑥𝑖,转化为新的样本 𝑧𝑖=𝑊𝑇𝑥𝑖
  6) 得到输出样本集 𝐷′={(𝑧1,𝑦1),(𝑧2,𝑦2),…,((𝑧𝑚,𝑦𝑚))}
LDA算法的主要优点有:

1)在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。

2)LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。

LDA算法的主要缺点有:

1)LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。

2)LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。

3)LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。

4)LDA可能过度拟合数据。

代码

首先生成三维三类的数据

# 导入相关包
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets import *

# 生成三类三维特征的数据
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=30, azim=20)
ax.scatter(X[:, 0], X[:, 1], X[:, 2],marker='o',c=y)

把数据降维 降维到二维

# 导入相关包
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# 使用LDA降维
lda = LinearDiscriminantAnalysis(n_components=2)
lda.fit(X,y)
X_new = lda.transform(X)

# 降维数据可视化
plt.scatter(X_new[:, 0], X_new[:, 1],marker='o',c=y)
plt.show()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值