【4.3】变量筛选和聚类分析的操作
寻找变量的方法分为3类,完全搜索,启发式搜索,随机搜索。这里往下介绍启发式搜索以及序列后向搜索的应用。启发式算法的基本原则是对每一步的运算进行评估,选择最优的进行一下的运算。序列前向选择(SFS),即变量集从空集开始,每次选择一个变量加入,使得评价上获得最优解。简单来说就是,每次都选择一个使得评价函数的取值达到最优的变量加入,其实就是一种简单的贪心算法,这里的解可能是局部最优的。序列后向选择(SBS)则是从全集开始,其余和向前选择完全一样。前向搜索的问题是不能删除变量,会容易引起变量之间的信息的重复。后向选择的问题和前向选择正好相反。这两种算法同时非常容易陷入局部最优。双向搜索使用序列前向选择(SFS)从空集开始,同时使用序列后向选择(SBS)从全集开始搜索,当两者搜索到一个相同的变量子集C时停止搜索。双向选择的结果来说并没有解决之前的问题,但是节约了时间,同时可能导致选择出来的前向和后向的结果不一样,从而达不到最优解。
增L去R选择算法(LRS)和之前的方法本质上是一样的,就是每次训练时增加L个变量,同时删去R个变量,这两个值是固定的。而且选取的L和R会很大程度的影响结果,但是可以避卖弄一些变量信息的重复选取。
序列浮动选择是由增L去R选择算法(LRS)发展来的,与增L去R选择算法(LRS)的区别是每次增加和除去的变量不是一个定值。
SVM方法进行机器学习的时候,进行变量筛选的流程,如下是一个后向筛选的流程。里面有三个脚本,添加一个变量,删除一个变量,单独将一个变量选出来。因为是后向选择的过程,所以用到嚄的只有删除变量。这里的10个features就是我们原始的具有10个features的文件。
- 第一步,将10个features中的第一个进行删除,然后将其存储在1miss文件夹里的1mis1文件中 perl del_col.pl 10features 1>1miss/1mis1 然后这个1miss文件夹中有我们已经删除好的10个变量,就是每个删除一个变量得到的一堆文件。
- 执行grid.py文件,这个文件就是去选择最优的C值和G值,C值和G值是SVM训练的时候取的一个最优的解 ./grid.py 1miss/1mis1
- 假定我们得到了最优的C值和G值,然后进行一下变量的训练,选择之前的1mis1文件,进行一下训练。 ./svm-train -c 6240 -q 0.075 1miss/1mis1 我们将得到一个1mis1的模型,这个模型就是接下来进行预测的时候使用的一个模型。
- 将选择好的模型进行一下预测 ./svm-predict 1miss/1mis1 1mis1.model 1mis1.predict 得到1mis1.predict的文件
- 然后我们将删除ORF type之后的9features文件,选择第一个进行删除,将其存储在2miss 2mis1这个文件夹里, perl del_col.pl 9features 1 >2miss/2mis1
……重复之前的过程
聚类分析
聚类就是把像是的分到一类中,然后一并进行研究的过程。利用聚类的手段可以缩小研究范围或对象,将一个变成一群,从而提升效率。类似,我们在生物学研究中往往把相似的蛋白或基因分成同一家族一样。
聚类的方法有很多,这里主要介绍基于距离的方法以及系统聚类法。先介绍一下关于距离的知识,数据在最初获得的时候并不是表示二者之间的距离的,而是二者的数值,因此我们需要建立函数来将其转换为数值的关系。
前四个是在标准的欧氏空间中计算二点的距离。其中第三个是标注化的形式,而前两个是其特殊形式。第一个被称为绝对距离,即两点坐标差值的绝对值。第二个是欧氏距离,也就是我们通常所说的距离。第三个距离是前两个的一般化形式。第四个是当第三个中的q趋近于无穷大的时候得到的。第五个是俗称的马氏距离,和欧式距离不同的是,马氏距离是协方差距离,表示这两者的趋势是否接近。最下面的是兰氏距离,有点在于可以克服量纲的影响。
这里介绍R计算距离的方法,dist函数就是用来计算距离的函数。X表示所使用的数据,method是选择使用的方法,默认为欧式距离,后面跟的值是表中的数据使用的方法,接下来分别表示是否输出对角线上的额距离和是否输出上三角矩阵的值。p表示距离阶数,既然是欧式距离,那这里就是2.然后将数据聚类之后,需要考虑的是聚类之后的簇和其他的类之间的距离,需哟啊考虑的是距离的转换方法。
这里的K和L是合并前的两点,M是合并后的结果,J是簇外面计算距离的点。前两种方法就是考虑K和L中与J点距离最小的点或者最大的点作为新节点M和J的距离。第三种方法将KL两点的重点作为M点来和J点计算距离。第四种方法就是将所有样本对之间的平均距离作为计算的值。第5种则取K和L的重心来计算距离。第六种方法是离差平均和法,是假定簇类的距离相对较短,而簇外的大,因此依据重心计算离差平方和,然后再根据离差平法和来计算距离,最后得到的式子就是上式。Hclust是R中用来进行聚类的命令。
参考资料
北大高歌老师的讲课内容
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn