Factor_Analysis
Factor_Analysis(因子分析)
Factor Analysis 简书:较好理解的解释,其中公式有一定的推导(仅展现关键步骤,细节大多需要自行补充),基本为结论式。
感性层面理解:首先,明确FA和PCA的区别。PCA做的是对某个样本,试图寻找到一组方差尽量大的线性表示(基向量),以便降维;FA做的是,假想存在一些隐变量,它们影响着我们的观测结果(即我们得到的数据样本),我们试图找到两者的联系:$x = \Lambda z + \mu + \epsilon$,在简书中有说明其MLE函数形式,不难看出它的MLE形式难以求解,故采用EM(机器学习之最大期望(EM)算法,讲得不错)迭代以求最优解。此外,FA通常用于$m<<n$的庆幸
心路历程:首先,我去推了一下EM,发现自己之前学的时候,由于是在GMM求解的时候需要的,所以并没有很仔细地推导,所以就再去推导了一次推了我一页草稿纸。其次,没有找到:$\mu_{x_1|x_2} = \mu_1 + \Sigma_{12} \Sigma_{22}^{-1} (x_2 - \mu_2)$ 以及 $\Sigma_{1|2} = \Sigma_{11} - \Sigma_{12} \Sigma_{22}^{-1} \Sigma_{21}$ 的公式名称,如果看官知晓其名称,望告知不才,感激不尽。最后,还是忘记了矩阵求导,又去查了一下,而我也尚未进行公式回带和化简整合。自闭了,一大堆
疑问:简书作者在开头提到:由于存在隐变量,同时不能由MLE得到close form。(close form:即闭式解,通俗解释就是$\nabla f(x) = 0$的$x$表达式),这里不理解为何没有闭式解,目前推的结果(MLE式子),大概猜测是因为$m<<n$的缘故,这样带来的结果就是$\left| \Sigma \right| = 0$(其实本身$\left| \Sigma \right|$是不等于0的,但是由于$m<<n$,所以它等于0,其实就是由于样本数量不足,或者说难以得到如此高维并且充足的样本)。显然,$\left| \Sigma \right| = 0$会在后续中遇到诸多麻烦,最容易想的就是$\Sigma$是不可逆的,这显然很难进行接下来的计算,虽然我算的不多,但是$\Sigma^{-1}$几乎都是需要的。然而,可以引入伪逆,所以肯定还有我没有想到的原因,或者说伪逆会带来较差的表现等等。
备注:由于博客园写推导公式较为麻烦,所以没有在博客上进行推导,不过建议看官如果并未学习过上述知识,还是手推几次以便加强理解和记忆(当然也有一些少年仅仅看就能得到很好理解,并且运用巧妙)。比如在EM算法中,求解lower_bound之前,分子分母同乘一个量以便之后用Jensen不等式化简(orz)等等(好像其他的操作就比较平凡了)。最近闲来无事的时候,发现很多学习过的算法,特别是需要一定数学式子或者思维来求解的(我竟然想去求LCM解烤鸡??),似乎都忘了需要求解的表达式(嘴上讲讲天花乱坠,手里推推苦思冥想),虽然求解过程都不难,但是对于我来说,其中一些技巧还是需要理解的有些计算量也是大啊。
Factor_Analysis的更多相关文章
- zoj Simple Equation 数论
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5176 AX+BY = XY => (X-B)*(Y-A)= ...
- Python机器学习笔记 使用scikit-learn工具进行PCA降维
之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-learn工具来进行PCA降维. 在数据处理中,经常会遇到特征维度比样本数量多得多 ...
- OtterTune源码解析
为了方便后面对ottertune进行魔(hu)改(gao),需要先搞清楚它的源码结构和pipeline OtterTune分为两大部分: server side: 包括一个MySQL数据库(用于存储调 ...
随机推荐
- 利用EasyUI 数据网格(DataGrid)的loader属性实现后端分页
该属性在easyui官方文档中并没有详细阐述,通过简单的资料查询和摸索,实现了easyUI数据网格的后端分页功能. 在官网文档中这样阐述loader属性: 定义如何从远程服务器加载数据.返回false ...
- 开源框架---tensorflow c++ API中./configure步骤细节
u@u160406:~/tf1.13/tensorflow$ git checkout r1.13 分支 r1.13 设置为跟踪来自 origin 的远程分支 r1.13.切换到一个新分支 'r1.1 ...
- querySelector和getElementById方法的区别
一.querySelector() 的定义 querySelector() 方法选择指定 CSS 选择器的第一个元素 querySelectorAll() 方法选择指定的所有元素 二.与 getEle ...
- node中的npm的使用
1.node中npm的使用 nodejs软件 1.安装nodejs 自带了npm npm install Bootstrap 好比python自带pip pip3 install requests ...
- JDBC课程3--通过ResultSet执行查询操作
内容: ResultSet 结果集,封装了使用JDBC 进行查询;JDBCTools.release(rs,st, conn); 这个模块进行了更新, 同时结束的时候也关闭ResultSet,结束该 ...
- 大数据之路week06--day07(Hadoop生态圈的介绍)
Hadoop 基本概念 一.Hadoop出现的前提环境 随着数据量的增大带来了以下的问题 (1)如何存储大量的数据? (2)怎么处理这些数据? (3)怎样的高效的分析这些数据? (4)在数据增长的情况 ...
- Selenium常用API的使用java语言之13-多表单切换
在 Web 应用中经常会遇到 frame/iframe 表单嵌套页面的应用, WebDriver 只能在一个页面上对元素识别与 定位, 对于 frame/iframe 表单内嵌页面上的元素无法直接定位 ...
- Selenium常用API的使用java语言之10-获取断言信息
不管是在做功能测试还是自动化测试,最后一步需要拿实际结果与预期进行比较.这个比较的称之为断言. 我们通常可以通过获取title .URL和text等信息进行断言.text方法在前面已经讲过,它用于获取 ...
- BZOJ1209 最佳包裹 (三维凸包 增量法)
题意 求三维凸包的表面积. N≤100N\le100N≤100 题解 暴力往当前的凸包里加点.O(n2)O(n^2)O(n2).题解详见大佬博客 扰动函数shakeshakeshake是为了避免四点共 ...
- Learning Spark (Python版) 学习笔记(一)----RDD 基本概念与命令
<Learning Spark>这本书算是Spark入门的必读书了,中文版是<Spark快速大数据分析>,不过豆瓣书评很有意思的是,英文原版评分7.4,评论都说入门而已深入不足 ...