博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目二:使用机器学习(SVM)进行基因预测
阅读量:4561 次
发布时间:2019-06-08

本文共 2525 字,大约阅读时间需要 8 分钟。

SVM软件包

(本项目所用到的SVM包)(目前最新版:libsvm-3.21,2016年7月8日)

C-SVC(C-support vector classification), nu-SVC(nu-support vector classification), one-class SVM(distribution estimation), epsilon-SVR(epsilon-support vector regression), nu-SVR(nu-support vector regression).

官网学习资料:

  • (guide.pdf)(官网有配套练手数据)
  • 官网程序压缩包里的帮助文档   程序 README 文档(核心); 以及 FAQ.html(常见问题){每个单独模块都有 README 文档}
  • (有时首页的下载链接打不开)

(文库,全面,是对上面博客的总结)

(文库繁体)

  • (Linux)

 

练手项目(百度libsvm项目):

 

(转载)

本项目中需要用到预测的概率,所以在训练和预测时,均要加上-b参数。

>svm-train.exe -b 1 scaled_1 scaled_1_model>svm-predict.exe -b 1 test_1 scaled_1_model scaled_1_output_file

我们还更改了流程化脚本easy.py和grid.py:

主要为了解决交叉检验的效率,参数选优的效率(内存和并行),以及概率输出。

我做的工作:

曹老师给了我原始数据(正负训练集,测试集),我首先写perl脚本,进行格式转换;转化为libsvm可用的格式;

其次搞懂libsvm的使用,主要是scale、train、predict,比较简单;其中scale必须保证缩放规则相同,-s,-r;train选c-svc,内核选RBF,-b概率输出;predict就是-b概率预测就好了;整个流程都被写在easy.py脚本里了,看懂脚本,对命令做简单的修改,就可以一步执行了;其中参数选优最为耗时,需适当修改grid.py脚本。

最后,我还做了one-class的建模和预测;这个没有参数寻优的脚本,也不支持概率输出,所以我就选了几个参数试了试;其中-n非常重要。

后续工作:

accuracy、sensitivity、specificity等统计指标的分析

用coreset来限制训练集,建立模型,来预测训练集中其他的部分;

 

 

SVM基础知识

(全) (分3章,文章末尾有很多SVM的学习资料)

Coursera的ML视频:

深入理解参数选优时交叉检验的作用:(讲得很好)

 

 

基因注释概念

  注释四部分:重复序列;非编码RNA;基因结构;功能注释。

- 可移动的遗传因子, 一段DNA顺序可以从原位上单独复制或断裂下来,环化后插入另一位点,并对其后的基因起调控作用,此过程称转座。

coreset

 

数据前处理

注意:

  • 去掉此列95_IsLongerGeneCover(这个特征值会影响预测结果,不需要它,所以除去,很简单一个last搞定)
  • 训练集正负样本有严重的数量差距,这也会影响训练和预测的结果的准确度。测试发现:pos = 29778, neg = 2238.

1.我拿到的数据有两种,一个是用于二分类的数据;一个是用于4分类的数据。

2.二分类的数据曹老师已经帮我提取好了,我只需要处理成libsvm的输入格式就行;四分类的数据则需要我自己处理,曹老师只给了我总表,已经相应的基因序列号,我需要单独提取处理出来,转成libsvm所需的格式。(里面有5个数据,一个总表,另外四种类型的基因数据。总表中,刚刚说的,前5列不用考虑,然后把非数值型转成数值型再做。如果结果 不好的话,将四种训练集中的样本数目降成相当的数目,以免引起偏差。)
3.数据格式处理?这个需要详细说明
    首先,明确libsvm的格式要求,+1 1:0.708333 2:1 3:1 4:-0.320755 5:-0.105023 6:-1 7:1 8:-0.419847 9:-1 10:-0.225806 12:1 13:-1 (行末尾有空格);
    其次,我们的表格数据里的哪些数据是无用的?非数值列如何转换为数值型数据?如何合理制作标签?数据按列进行处理;前5列:1_Chrom    2_GeneID    3_Start    4_End    5_Strand是无用的,因为它们只是基因的基本信息,需要去掉;最后一列是预测目标,需要提到第一列;其他的列数值化比较简单。
    麻烦的是6_Evidence列的处理,根据曹老师要求,根据优先级进行分类,凡是有PROTEIN的归一类;否则,凡是有cDNA归一类;否则,凡是有oest的归一类;否则,凡是有EST的归一类;其他的归为最后一类(可能不存在这一类,因为都有证据)。
perl脚本得出的第6列(共15种):
PROTEIN|cDNA|oest AND EST|PROTEIN|cDNA AND PROTEIN|cDNA AND EST|PROTEIN AND EST|PROTEIN|oest AND EST|PROTEIN|cDNA|oest AND PROTEIN AND PROTEIN|oest = 1
EST|cDNA AND cDNA AND cDNA|oest AND EST|cDNA|oest = 2
oest AND EST|oest = 3
EST = 4

perl脚本得出的第8列(共5种):

protein_coding_partial = 1
protein_coding = 2
untranslated = 3
pseudogene = 4
protein_coding_short = 5

参考:

总结经验

数据版本的控制,很大的问题,有时候只对数据做很小的修改,然后重新跑,改多了,对数据版本的控制的需求就来了,否则时间一久,根本就不知道自己当初每次都做了啥。(重在项目记录)

转载于:https://www.cnblogs.com/leezx/p/5632264.html

你可能感兴趣的文章
Vue的简单入门
查看>>
urllib 中的异常处理
查看>>
通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?
查看>>
WIFI密码破解全攻略
查看>>
gulp
查看>>
pgsql查询优化之模糊查询
查看>>
不变模式
查看>>
20181227 新的目标
查看>>
androidtab
查看>>
php 事件驱动 消息机制 共享内存
查看>>
剑指offer 二叉树的bfs
查看>>
LeetCode Maximum Subarray
查看>>
让我们再聊聊浏览器资源加载优化
查看>>
underscore demo
查看>>
CSS hack
查看>>
C# Enum Name String Description之间的相互转换
查看>>
PHP wamp server问题
查看>>
Spring Data Redis学习
查看>>
js闭包理解案例-解决for循环为元素注册事件的问题
查看>>
2015.04.23,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 33
查看>>