理论--降维LDA笔记

以下内容笔记出自‘跟着迪哥学python数据分析与机器学习实战’,外加个人整理添加,仅供个人复习使用。


若数据集特征十分庞大,可能会使计算任务变得繁重,在数据特征有问题时,可能会对结果造成不利影响。
因此可以用降维算法,通过某种映射方法,将原始高维空间中的数据点映射到低纬度的空间中。这里介绍LDA(有监督学习算法)。

线性判别分析(Linear Discriminant Analysis,LDA),也叫作Fisher线性判别,最开始用于分类任务,但由于其对数据特征进行了降维投影,成为一种经典的降维方法。

1. 降维原理

降维任务是找到合适的投影方向,使得原始数据更容易被计算机理解并利用。
实例说明如下:
在这里插入图片描述
如上图,正,散点是原始数据,即原始数据是二维特征,现在想降到一维,就需要找一个合适的投影方向,把这些数据点全部映射过去。
(a)图中,数据点投影后,有一部分还是重合的,(b)图中,投影后数据点能够明显区别开,那么我们会选第二种降维方式。
由此可见,降维不仅要压缩数据特征,还要寻找最合适的方向,使得压缩后的数据更有利用价值。

我们的目标:

  1. 对于不同类别的数据点,希望经过投影后的能离得越远越好,区别地越开越好;
  2. 对于同类别的数据点,希望投影后能更集中,离组织的中心越近越好。
    接下来围绕上面的目标进行。

2. 优化目标

2.1 如何衡量不同类别数据点投影后越远越好

用矩阵变换表示数据操作,将数据映射到合适的方向上,就是投影。
在这里插入图片描述
x表示原始数据所在空间,y表示降维后数据,目标就是求解最合适的参数W,这些参数能够保证一个最合适的投影方向。

要使得距离越远越好,我们用数据点均值表示中心位置,不同类别的中心点距离表示类别间距离。
中心点计算:
在这里插入图片描述
投影后中心点计算:
在这里插入图片描述
(因此LDA是有监督问题,需要知道类别标签,才能计算类别中心点)

不同类别的中间点距离计算:
在这里插入图片描述
函数J(w) 越大,表示类别间区分的越开。

2.2 如何衡量相同类别投影后越集中越好

上面我们得到了不同类别距离的计算,但如果只将上一项作为目标是否可行呢?
在这里插入图片描述
看图说话,上图两类数据点,假设现有两个投影方向,分别为X1,X2.
可以看到,在X1投影方向上,投影后不同类别中心点的距离要大于X2投影方向,X1投影方向的J(w)表现更好。
但X1上,投影后两类数据点依旧有很多重合在一起,但X2投影方向上,投影后数据重合比较少,这个层面上,X2的投影方向更优。

因此就涉及到第二个优化目标,同类别数据点越集中越好。
可以使用另一个度量指标——散列值(scatter)宝石同类别数据点的离散程度:
在这里插入图片描述
其中,y表示投影后数据点,散列值表示密集程度,值越大,越分散。(类似于方差的含义)。

3. 判别分析求解

将上文中提到的两个目标整合:
在这里插入图片描述
上式中,分子表不同类别数据投影后距离,越大越好;分母表示同类别数据投影后密集程度,越小越好,最终J(w)值越大越好,求解其极大值即可。

3.1 化简

首先分母部分:
将散列值(求方差)的式子化简:
在这里插入图片描述
令:
在这里插入图片描述
类内散布矩阵:
在这里插入图片描述
那么有:
在这里插入图片描述
然后分子部分:
在这里插入图片描述
其中,Sb为类间散布矩阵。

最终目标函数:
在这里插入图片描述
对于散列矩阵Sb和Sw,只要有数据和标签即可求解,但如何得最终结果?若同时求解,就会有无数多解,通用方案是先固定分母,经放缩变换后,限定为1,即:
在这里插入图片描述
在这个条件下,用拉格朗日乘子法求解分子:
在这里插入图片描述
目标是求解w,上式左右两边同时乘以Sw的逆矩阵:
在这里插入图片描述
观察上式,与线代里面求特征向量有点像,如果把左式的
在这里插入图片描述
部分作为整体,那么w就是其特征向量。

因此,线性判别分析求解的过程,就是得到类内和类间散布矩阵,然后求其特征向量,就可以得到投影方向了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于TF-IDF模型和LDA模型是两种不同的文本处理模型,它们的表示方式也不同,因此需要将它们组合起来表示文本的特征。 下面是一个示例代码,展示如何使用Python中的gensim库实现TF-IDF模型和LDA模型的组合表示: ``` import gensim from gensim import corpora, models # 构建语料库 documents = [ "This is a sample document.", "Another sample document.", "This is the third sample document.", "And this is the fourth sample document." ] # 将文本转化为词袋表示 texts = [[word for word in document.lower().split()] for document in documents] # 构建词典 dictionary = corpora.Dictionary(texts) # 构建TF-IDF模型 corpus = [dictionary.doc2bow(text) for text in texts] tfidf = models.TfidfModel(corpus) # 构建LDA模型 lda = models.LdaModel(corpus, num_topics=2, id2word=dictionary) # 组合表示 for i in range(len(documents)): document = documents[i] text = texts[i] bow = dictionary.doc2bow(text) tfidf_vec = tfidf[bow] lda_vec = lda[bow] print("Document:", document) print("TF-IDF vector:", tfidf_vec) print("LDA vector:", lda_vec) print("Combined vector:", tfidf_vec + lda_vec) ``` 上述代码中,首先将文本转化为词袋表示,并构建词典。然后使用词典和词袋表示构建TF-IDF模型和LDA模型。最后,将每个文本的词袋表示通过TF-IDF模型和LDA模型转化为向量表示,并将它们组合起来表示为一个文本的特征向量。 需要注意的是,TF-IDF模型和LDA模型的向量表示的维度是不同的,因此在组合表示时需要对它们进行合并。一种常见的方法是将它们拼接成一个长向量。在上述示例代码中,我们简单地将它们相加作为组合表示。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值