Feb 212011
 

We will briefly explain why we would be interested in implementing exact logistic regression, then provides C++ and R codes. 1. Why exact test? Since we want to have a clear mind of how likely/unlikely the realization we observed. In the classic example of 2×2 table without covariates, especially the 2×2 table has very few […]

Feb 082011
 

利用矩阵的分解和分析图是个很有意思的话题。当我们能用这个技术来改进PCA的时候,或者降维的时候,我们有可能相信有意思的结果会蹦出来。这里主要参考了文献【1】和Pluskid的blog【2】。其中【1】给出了推导过程:目标函数是二次型的矩阵,约束同样是二次型的;还有详细的Algorithm:里面最关键的一步是Generalized eigenvector problem(wiki有非常简短的介绍),理论上可以用Golub Matrix Computation Chapter 8 的方法(我没读,差不多忘了Numerial Method课的知识了),但我并没有使用。另外【2】里的文字流畅,言简意赅,是入门的好文章。 简单来讲,当利用k-neighbor 或方法构造临街矩阵,利用Simpled minded(0 or 1)或者Heat Kernel来构建Weight矩阵后,我们的问题是求解: $$ L f = \lambda D f \quad st. \quad f^T D f = 1 \quad \mathrm{and} \quad f^T D \mathbf{1} = 0 $$ 我们已经知道D是一个对角阵,所以求解$$ D^{-1} L f = \lambda f $$即可。 考虑到约束条件,我们只需对每一个 中取最小的两个非零的特征根对应的特征向量,仿照paper,得到结果如下: 注意,这里的图案和paper不符,但我的验算,检查是否是特征值、约束条件,表明我的计算过程应该是正确的。 另外Pluskid 的Blog上的图案中,Laplacian Eigenmap的结果是一个彩带, 我认为有可能是使用了对应的特征向量。 参考: […]

Feb 052011
 

主成份(Principal Component Analysis)分析是降维(Dimension Reduction)的重要手段。每一个主成分都是数据在某一个方向上的投影,在不同的方向上这些数据方差Variance的大小由其特征值(eigenvalue)决定。一般我们会选取最大的几个特征值所在的特征向量(eigenvector),这些方向上的信息丰富,一般认为包含了更多我们所感兴趣的信息。当然,这里面有较强的假设:(1)特征根的大小决定了我们感兴趣信息的多少。即小特征根往往代表了噪声,但实际上,向小一点的特征根方向投影也有可能包括我们感兴趣的数据; (2)特征向量的方向是互相正交(orthogonal)的,这种正交性使得PCA容易受到Outlier的影响,例如在【1】中提到的例子(3)难于解释结果。例如在建立线性回归模型(Linear Regression Model)分析因变量(response)和第一个主成份的关系时,我们得到的回归系数(Coefficiency)不是某一个自变量(covariate)的贡献,而是对所有自变量的某个线性组合(Linear Combination)的贡献。 在Kernel PCA分析之中,我们同样需要这些假设,但不同的地方是我们认为原有数据有更高的维数,我们可以在更高维的空间(Hilbert Space)中做PCA分析(即在更高维空间里,把原始数据向不同的方向投影)。这样做的优点有:对于在通常线性空间难于线性分类的数据点,我们有可能再更高维度上找到合适的高维线性分类平面。我们第二部分的例子就说明了这一点。 本文写作的动机是因为作者没有找到一篇好的文章(看了wikipedia和若干google结果后)深层次介绍PCA和Kernel PCA之间的联系,以及如何以公式形式来解释如何利用Kernel PCA来做投影,特别有些图片的例子只是展示了结果和一些公式,这里面具体的过程并没有涉及。希望这篇文章能做出较好的解答。 1. Kernel Principal Component Analysis 的矩阵基础 我们从解决这几个问题入手:传统的PCA如何做?在高维空间里的PCA应该如何做?如何用Kernel Trick在高维空间做PCA?如何在主成分方向上投影?如何Centering 高维空间的数据? 1.1 传统的PCA如何做? 让我先定义如下变量: 是一个矩阵,代表输入的数据有 个,每个sample的维数是。我们做降维,就是想用维的数据来表示原始的维数据()。 当我们使用centered的数据(即)时,可定义协方差矩阵为: $$C=\frac{1}{N} x_i x_i^T = \frac{1}{N} X X^T$$ 做特征值分解,我们可以得到: $$CU = U \Lambda \Rightarrow C = U \Lambda U^T = \sum_a \lambda_a u_a u_a^T$$ 注意这里的的维数都是, 且, 。 […]

Feb 012011
 

今天在ubuntu 10.10 Linux环境中顺利使用pptpd 架设的VPN服务器。 这里把必要的步骤记录一下: 1. 建立profile 用pptpsetup命令: sudo pptpsetup –create <TUNNEL> –server <SERVER> –username <USERNAME> [–password <PASSWORD>] TUNNEL是自己起的名字,SERVER填入VPN 服务器地址,username和password按照VPN服务器设置来做。 2. 连接VPN sudo pon <TUNNEL> 这样就可以连接到VPN服务器。 可以用ifconfig命令检查是否VPN成功架设了,成功的话会出现一个ppp0的interface。 也可以用plog命令检查VPN连接的过程是否顺利。 3.更改route table sudo route add default dev ppp0 4. 更改DNS服务器 sudo vi /etc/resolv.conf 添上OpenDNS的DNS服务器地址: nameserver 208.67.222.222 nameserver 208.67.220.220 5. 检查 可以访问http://www.whatismyip.com/ 看看自己的ip是不是已经变为VPN服务器的地址了。

Jan 312011
 

为了利用OpenMP来加速C/Fortran程序,我记录一些阅读OpenMP API Version 3.0 Specification (May 2008)的经验。另外,这篇文章主要关注C语言中OpenMP的使用经验。 本文包括 摘要、经验和其他注意事项、参考 三部分。 摘要 (按照Specification的顺序) (1)第一章是Glossary, 定义了各种OpenMP使用的名词(terms),例如:construct, directive, clause, task, tied task … 这个可以在看不懂的时候返回来查询。其中有一个被多次使用的名词是sentinel,这似乎是Fortran中使用OpenMP时应该使用的名词,和C并没有关系。 (2)2.2:  _OPEN 这个macro 被定义成yyyymm形式,表示OpenMP API的版本 (3) parallel construct:表示紧挨着的程序可以parallel运行。用#pragma omp parallel 来使用,当程序遇到parallel construct之后,会用固定个数的threads形成一个team去完成work。至于有多少个threads,这不一定,可参考2.4.1中决定threads number的算法。注意,当parallel里一个thread结束的时候,其他的threads都会被结束 (If execution of a thread terminates while inside a parallel region, execution of all threads in all teams terminates. If execution of a […]

Jan 302011
 

在2011年1月份的最后一天,我非常幸运的发现BuyVM.net的每年15美元的VPS计划居然还没卖光。按耐不住的我立刻掏钱。之后就有了本文。我将分三部分介绍如何安装和调试(Optimize) LAMP, 安装及迁移WordPress 和设置VPN. 1. LAMP的安装和优化 如果像我一样用BuyVM.net 每年$15美元的计划,你可以选择Ubuntu 10.10 LAMP 系统,这样你自己就拥有了LAMP整套系统,但是这样的系统不能适应Wordpress程序——内存经常不够用。因此我们必须想办法减少Apache2和MySQL的内存消耗。 对于Apache,通过检查aptitude程序可以发现,Ubuntu安装的是Apache-prefork-mpm版本(版本号中的prefork表示的是和Apache 1.3类似的架构)。这个架构下比较关键的参数是最少和最多的apache进程的个数。如果不限制,则会很容易出现8-10个apache进程,有的进程占内存30-40M,很快你的VPS就会反应变慢,甚至crash。参考apache – How to reduce memory usage on a Unix webserver – Server Fault之后,在/etc/apache2.conf里面,我们需要这样的设定: StartServers 1 MinSpareServers 1 MaxSpareServers 5 ServerLimit 16 MaxClients 16 MaxRequestsPerChild 0 ListenBacklog 100 为了减少MySQL的内存占用,我们需要改动/etc/my.cnf,有文章(Google “MySQL reduce memory”)建议不直接使用MySQL提供的为small memory使用的配置文件(例如:考虑到Wordpress经常会同时使用多达10个表进行查询),因此给出关键部分([mysqld]部分)的我的参考配置如下: [mysqld] user = mysql port = 3306 socket = /var/run/mysqld/mysqld.sock […]

Jan 292011
 

讲解trackback/pingback的文章: http://www.optiniche.com/blog/117/wordpress-trackback-tutorial/ 讲解了如何测试对方的wordpress是否支持trackback/pingback,并且检查自己的post是否ping 了对方的post。 这是很实用的技巧。 EDIT: 刚刚发现随便乱用trackback是不礼貌的行为。所以下面的测试现在已经不起作用了。 这个用来测试matrix67 blog的trackback功能。 Trackback: http://www.matrix67.com/blog/archives/2660/trackback 用wordpress的话来说,trackback, pingback都是一个相同的目的,但后者更安全,可靠。 他们的目的(在我这个文章的例子里)是,我可以在我的blog发表comment,同时我的comment会在matrix67的blog里出现。 既然如此,那么来看看需要多久我的comment会在这个网页出现 :) http://www.matrix67.com/blog/archives/2660

Jan 282011
 

Reason: I used strtod() function in C, forgot to set errno to 0, then after calling strtod(), the value of errno is unpredictable. When found the bug: I tried to use Ptyhon ctypes module. In script mode, python pyCtypes.py always crash but in command line mode, the code becomes all right. It’s mysterious running Python […]

Jan 282011
 

I tried to show 10 pictures using NextGEN gallery gallery, as following: Another useful tag is to use “imagebrowser”, it will show bigger pictures with their titles, total picture counts. Note, there are no spaces after [ and before ]. Detail documentation: http://wordpress.org/extend/plugins/nextgen-gallery/faq/