Fenrier Lab

Java 中的分代垃圾收集思想

程序员总是喜欢把繁琐的事情交给机器去自动执行,特别是具有固定模式的任务,大家都不愿意亲历亲为。而对于那些一眼看上去不存在什么通用特征的事情,就会努力去在更高的层次上去寻找它们的泛性。所以对于初学者来说,很多知识看起来抽象得不行,就是因为还没有从底层开始逐渐构造这些概念。 程序内存资源的管理逻辑很简单,一句话就是:不用的资源请释放出来。但是却很繁琐,对于程序员来讲,那么多代码,他怎么记得住自己在什么时候申请了多少内存?哪些资源以后还可能要用?哪些内存根本就不必回收?如果自己来手动管理内存,不知要浪费多少脑细胞,所以垃圾回收器这时候就帮了大忙了。 但是自动垃圾回收不可能像人的判断那样准确,所以它的宽容度其实是要高很多的。另一个特征是自动垃圾回收过程其实是独立于程序执行的,它不像把释放资...
点我阅读更多...

MKL 向量统计库 VSL 中的数据存储与索引风格的应用

由于 MKL 支持两种数据存储方式,在使用 VSL 进行统计计算的时候,可以使用参数 VSL_SS_MATRIX_STORAGE_ROWS 和 VSL_SS_MATRIX_STORAGE_COLS 来指定我们传入的数据布局为行存储或者列存储。但是我们一般习惯的是类 C 语言的行索引风格,所以这篇文章就来讨论一下如何使用 VSL 这两种风格的适当组合来适配计算矩阵的统计量。 一些约定 在写这篇文章的时候我发现很多概念模棱两可,如果不提前做好约定,不仅会让读者不知所云,也让我的思路很乱。这里我先把之后要用到的数据拿出来 这是著名的鸢尾花数据集,为了简便起见,我就只取了前三个样本。当我们要把这堆数据放到程序中的时候,自然会考虑用二维数组来存储 \[\left[ \begin{al...
点我阅读更多...

条件高斯分布

最初,均值为 \(\mu\) ,协方差矩阵为 \(\Sigma\) 的多元高斯分布具有如下形式 \[p(\mathbf{x}) = \frac{1}{\sqrt{(2\pi)^d |\Sigma|}} \exp\left( -\frac 1 2 (\mathbf{x} - \mu)^T \Sigma^{-1} (\mathbf{x} - \mu) \right)\] 为了讨论简单起见,我们先考虑变量为 \(x, y\) 的二元高斯分布,此时均值和协方差矩阵分别为 \[\mu^T = (\mu_1\quad \mu_2)^T\\ \Sigma = \left[ \begin{aligned} \sigma_{11} &\quad \sigma_{12}\\\sigma_{2...
点我阅读更多...

理解主成分分析(1)——最大方差投影与数据重建

一方面,高维数据的存储和计算对计算机的性能提出了更高的要求,另一方面,对于人来讲,高维数据提供的信息不太直观,所以如何对数据进行降维一直是一项很有意义的话题。 最大方差投影与主成分 让我们先从一个二维数据集开始,设 \[S = \{x_i\mid x_i \in R^2 , i=1,2,,,n\}\] 把上述点集画到平面上,假设产生了下面的图像 现在我们想要为每个点赋予一个具有代表性的值来替代它的坐标,从而降低该数据集的维度,并且这个被赋予的值应该在最大程度上表现出被它替代的点的特征。那什么是点的特征呢?对于一个点来讲,与其他点的不同就是它所拥有的特征,所以如果它的替代值能尽可能地与其他点的替代值相异,那么这种替换就是有意义的。当然,这种降维方式损失了不少信息,但我们先不...
点我阅读更多...

Fisher 线性判别分析

设有属于两个类别的 n 个 d 维样本 \(\{x_i\mid \, i \in \{1,2,,n\}\}\),如果它们线性可分,那么一般可以将它们映射到一维空间,并且同样可识别,类似于下图所示的意思 由圆形和三角形标识的两类图形被投影到了直线上,它们的位置是分开的,可以成为判别的依据。所以这就对我们产生了启发,能不能找到这样的直线,使得样本集投影到上面之后能够很轻易地对它们进行分类? 直观的想一下,只要两类样本是可分的,就一定能找得到这样的直线,但是如果像上图这样的投影直线,要识别点在直线上的投影位置,需要一个直线上的参考点,以便计算距离。另一种更方便的方法是投影到另一个方向的直线上 虽然这种方式的投影点没有明显地分开,但是仔细观察会发现样本点到直线的距离是明显分隔成两...
点我阅读更多...