特征工程 | LDA降维

喜欢就点击上面↑蓝色字体关注我们!

判别分析是一种分类算法,并且也可作为降维技术使用。判别方法有距离判别、贝叶斯判别、Fisher判别等。而Fisher判别是最常用的方法,其基本思想是将p维数据投影到某一方向,使得组之间的投影尽可能的分开。

Fisher判别算法

假设有k个总体

,数据维度为p,k个总体的样本大小分别为

,总样本大小为

,样本如下:

令a为任一p维非零向量,其作为投影的方向,则将x向a方向投影后的结果为

。那么上述样本按照方向a投影后可得:

投影后的数据变为一维数据,借用方差分析的思想,使组间偏差/组内偏差最大化的a方向即为投影方向。

组间偏差平方和:

组内偏差平方和:

即求下列优化问题:

求解证明过程:

判别规则:

LDA降维

从上面判别函数的求解过程可以看出,最终得到的判别函数是将最大特征值对应的特征向量作为判别函数的系数,此判别函数的判别效力最优,亦称为第一判别函数,根据特征值的大小,依次可以得到第二判别函数,...,第p判别函数,且判别效力依次降低。和PCA同理,保留前几个判别函数作为投影方向,可以实现降维的效果,所不同的是PCA是无监督方法,而LDA是有监督方法。

以iris数据集为例,简单看看python如何使用判别分析构建新特征,更详细用法可以参考官方文档。

from sklearn.datasets import load_iris
import numpy as np

# 加载数据集
iris = load_iris()
iris_X, iris_y = iris.data, iris.target

# 线性判别
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=2)
lda.fit(iris_X, iris_y) # 拟合
lda.scalings_ # 列是特征向量,即变换系数
# Out[1]: 
# array([[-0.81926852,  0.03285975],
#        [-1.5478732 ,  2.15471106],
#        [ 2.18494056, -0.93024679],
#        [ 2.85385002,  2.8060046 ]])

# 数据转换,生成新特征
iris_trans = np.dot(iris_X, lda.scalings_)

# 查看变换后的新特征的相关性:新特征之间相关系数为0
np.corrcoef(iris_trans.T)
# Out[2]: 
# array([[1.00000000e+00, 2.32995697e-17],
#        [2.32995697e-17, 1.00000000e+00]])

# 新特征解释原数据信息的比例:第一个新特征解释了原数据99.15%的信息
lda.explained_variance_ratio_
# Out[2]: array([0.99147248, 0.00852752])

本文分享自微信公众号 - 大数据建模的一点一滴(bigdatamodeling),作者:小石头

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python实现KS

    Python和R有很多相似处,本篇KS实现就是将上篇R语言方法转成Python,代码封装在函数PlotKS里,函数的逻辑可以参考上篇R语言的实现。

    小石头
  • WOE(证据权重)为何这样计算?

    先简单回顾一下WOE的含义。假设x是类别变量或分箱处理过的连续变量,含R个类别或分段,取值为{C1, ..., Cr, ..., CR};y是目标变...

    小石头
  • 闲扯 | 信贷场景中数据使用的那点事

    本文聊聊信贷场景中数据使用的一些问题。对于持牌机构,除了查询人行征信,也会查询某些外部数据以补充人行征信覆盖不到的信息;而对于非持牌无人行征信查询资质的公...

    小石头
  • MySQL去重distinct

    在MySQL中需要查询表中不重复的记录时,可以使用distinct关键字过滤重复记录。

    Python之道
  • 软件的复杂性正在杀死我们

    然而事与愿违。虽然并非是故意的,但是随着时间的推移,我们会因为软件构建中难以预料的复杂性而陷入困境,然后训练自己去寻找边缘案例,分析差距,以及单点要求所带来的所...

    哲洛不闹
  • 利用局部正确性设计完美仿真算法

    摘要:考虑一种随机算法,该算法使用递归从分布中精确地绘制样本。这种算法被称为完美模拟,这里建立各种用于构建这种算法的方法都源自相同的结果:完美模拟的基本定理(F...

    罗大琦
  • HDUOJ---汉洛塔IX

    汉诺塔IX Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav...

    Gxjun
  • 全面了解 Android 热修复技术

    走马观花地看一遍各家的热修复方案并不能找到答案,所以写下本文,希望从一个不同的角度来了解热修复技术,权当抛砖引玉,如有不足,欢迎指正。

    WeTest质量开放平台团队
  • 全面了解Android热修复技术

    热修复技术在近年来飞速发展,尤其是在InstantRun方案推出之后,各种热修复技术竞相涌现。国内大部分成熟的主流APP都拥有自己的热修复技术,像手淘、支付宝、...

    WeTest质量开放平台团队
  • Cocos Creator 出新版本啦, 2.1.2 圆形Shader终于可以完美解决了!

    自 Cocos Creator 2.1.0 发布以来,经过半年时间更新迭代,版本现已趋于稳定,目前 2.1 的新增用户已经占据主流。因此我们计划减少 2.0 版...

    张晓衡

扫码关注云+社区

领取腾讯云代金券