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的更多相关文章

  1. zoj Simple Equation 数论

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5176 AX+BY = XY  => (X-B)*(Y-A)= ...

  2. Python机器学习笔记 使用scikit-learn工具进行PCA降维

    之前总结过关于PCA的知识:深入学习主成分分析(PCA)算法原理.这里打算再写一篇笔记,总结一下如何使用scikit-learn工具来进行PCA降维. 在数据处理中,经常会遇到特征维度比样本数量多得多 ...

  3. OtterTune源码解析

    为了方便后面对ottertune进行魔(hu)改(gao),需要先搞清楚它的源码结构和pipeline OtterTune分为两大部分: server side: 包括一个MySQL数据库(用于存储调 ...

随机推荐

  1. SDcms1.8代码审计

    由于工作原因,分析了很多的cms也都写过文章,不过觉得好像没什么骚操作都是网上的基本操作,所以也就没发表在网站上,都保存在本地.最近突然发现自己博客中实战的东西太少了,决定将以前写的一些文章搬过来,由 ...

  2. lumen生成key

    在Lumen控制台运行php artisan key:generate提示: $ php artisan key:generate [Symfony\Component\Console\Excepti ...

  3. Python基础Day6

    一.代码块 一个模块(模块就是py文件),一个函数,一个类,一个文件都是一个代码块,一个整体是一个代码块. 交互模式的每一行都是一个代码块(交互模式:命令提示符),相当于每行都在不同的文件 二.id ...

  4. Linux安装java环境和maven

    安装OpenJDK软件包: apt-get install openjdk-8-jdk 查看版本信息java -version 则代表安装成功 安装maven可以使用自己本机下载好的mavan使用Xf ...

  5. Stages — 研发过程可视化建模和管理平台

    Stages 是德国Method park公司的产品,用于帮助企业定义.管理.发布.控制.优化其研发过程,同时使其研发过程符合CMMI.ASPICE.ISO26262等标准.Stages的核心理念是把 ...

  6. Thrift使用入门---RPC服务

    https://blog.csdn.net/zkp_java/article/details/81879577 RPC基本原理 大部分的RPC框架都遵循如下三个开发步骤: RPC通信过程如下图所示 通 ...

  7. python中函数的定义、返回值以及参数的简要介绍

    一. 1.函数 定义:def关键字开头,空格之后接函数名称和圆括号(),后面紧跟‘:”. 函数是对功能的封装 语法: def 函数名(形参列表): 函数体(代码块,return) 调用: 函数名(实参 ...

  8. JAVA API连接HDFS HA集群

    使用JAVA API连接HDFS时我们需要使用NameNode的地址,开启HA后,两个NameNode可能会主备切换,如果连接的那台主机NameNode挂掉了,连接就会失败. HDFS提供了names ...

  9. 优化你的HTTPS(下),你需要这么做

    本篇文章是接着上篇文章来说,这篇介绍三种方法分别是多路复用 ,请求优先级,服务器推送. 多路复用 请求优先级 服务器推送 多路复用 在HTTP1.1中,浏览器客户端在同一时间,针对同一域名下的请求有一 ...

  10. shell 学习笔记2

    shell的常用处理:https://github.com/dylanaraps/pure-bash-bible -d作为分隔符:read xargs -t作为分隔符:sort -F作为分隔符:awk ...