任务七 特征工程 LDA

目录

LDA的思想

LDA算法流程 

LDA的python实现


LDA-原理解析_Nine-days的博客-CSDN博客_lda

机器学习算法之线性判别分析(LDA) – 标点符

(这一篇的原理讲的 比较容易懂) 

LDA的思想

LDA是一种监督学习的降维技术,也就是说它的数据集的每个样本是有类别输出的。

LDA的思想可以用一句话概括,就是“投影后类内方差最小,类间方差最大”。

也就是说,我们要将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。

降维方法思想分布监督方式投影维度目的
PCA数据降维,矩阵特征分解假设数据符合高斯分布无监督投影的坐标系都是正交的直接和特征维度相关,比如原始数据是d维,PCA之后,可以任意选取1~n维去除原始数据集中冗余的维度,让投影子空间各个维度的方差尽可能大
LDA数据降维,矩阵特征分解假设数据符合高斯分布有监督根据类别的标注关注分类能力,不保证投影到的坐标系是正交的与数据本身的维度无关,和类别个数C相关,LDA之后,在1~C-1维进行选择找到具有区分的维度,使得原始数据在这些维度上的投影能尽可能区分不同类别

举例来说,假设我们有两类数据 分别为红色和蓝色,如下图所示,这些数据特征是二维的,我们希望将这些数据投影到一维的一条直线,让每一种类别数据的投影点尽可能的接近,而红色和蓝色数据中心之间的距离尽可能的大。

LDA算法流程 

具体可以看上面引用文章的第二篇,算是看了这么多下来稍微让我能懂一点点的文章了 

LDA的python实现

在scikit-learn中, 实现LDA的类是sklearn.discriminant_analysis.LinearDiscriminantAnalysis。这既可以用于分类又可以用于降维

LinearDiscriminantAnalysis类的参数如下:

  1. solver : 即求LDA超平面特征矩阵使用的方法。可以选择的方法有奇异值分解"svd",最小二乘"lsqr"和特征分解"eigen"。一般来说特征数非常多的时候推荐使用svd,而特征数不多的时候推荐使用eigen。主要注意的是,如果使用svd,则不能指定正则化参数shrinkage进行正则化。默认值是svd。
  2. hrinkage :正则化参数,可以增强LDA分类的泛化能力。如果仅仅只是为了降维,则一般可以忽略这个参数。默认是None,即不进行正则化。可以选择"auto",让算法自己决定是否正则化。当然我们也可以选择不同的[0,1]之间的值进行交叉验证调参。注意shrinkage只在solver为最小二乘"lsqr"和特征分解"eigen"时有效。
  3. priors :类别权重,可以在做分类模型时指定不同类别的权重,进而影响分类模型建立。降维时一般不需要关注这个参数。
  4. n_components :即我们进行LDA降维时降到的维数。在降维时需要输入这个参数。注意只能为[1,类别数-1)范围之间的整数。如果我们不是用于降维,则这个值可以用默认的None。

sklearn的make_classification函数生成随机的n类分类_爱打羽毛球的小怪兽的博客-CSDN博客_make_classification是什么

python绘图基础—scatter用法_xiaobaicai4552的博客-CSDN博客_ax.scatter

#生成三类三维特征的数据
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets._samples_generator import make_classification

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)
'''
print(X)
print("----")
print(y)
'''

fig = plt.figure()
ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
plt.scatter(X[:, 0], X[:, 1], X[:, 2],marker='o',c=y)
plt.show()

#使用PCA降维到二维,注意PCA无法使用类别信息来降维
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(X)
print("两个主成分方差比:")
print(pca.explained_variance_ratio_)
print("两个主成分方差:")
print(pca.explained_variance_)
X_new = pca.transform(X)
print("PCA降维效果图:")
plt.scatter(X_new[:, 0], X_new[:, 1],marker='o',c=y)
plt.show()

#使用LDA降维到二维
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
lda.fit(X,y)
X_new = lda.transform(X)
print("LDA降维效果图:")
plt.scatter(X_new[:, 0], X_new[:, 1],marker='o',c=y)
plt.show()

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值