4月9日

Task Description:

1.原先的数据集暂时不用,自己制作数据集。
制作方式:随机在2万多个gene序列中选出一个,在2千多个rna序列中选择一个,标签在0或1中选一个。
想要n组训练数据,以上过程就重复n次。生成的数据作为模型的训练数据。
2.因为特征提取方式有多种,结合同一种模型,那就相当于得到了好几种不同的模型。
在超参固定的前提下,使用不同的模型跑一下观察结果。
3.调优

Progress Description:

1.数据集制作了5000条,其中标签为0的数据和标签为1的数据的比例为1:1。
确保训练数据不会有歧义现象,比方说训练数据数据中存在2组数据,一组是A和B相互作用,另一组是A和B不相互作用。
2.设置Batch_size=8 使用四个模型跑了代码,得到以下结果↓
3.模型调优。(还没做)

Gene序列的特征提取方式大体可以分为:
1.Gene2vec(借鉴其他论文)、
2.Dna2vec(借鉴其他论文)、
3.以及myGene2vec(自己用两万余条现有Gene序列信息训练的word2vec模型),
4.普通Embedding。
Rna序列的特征提取方式大体可以分为:
1.myRna2vec(自己用两千余条现有Gene序列信息训练的word2vec模型)、
2.普通Embedding

以上为目前所有的特征提取方式,本质上大都是word2vec模型。
word2vec该模型是可以调节k-mers大小的,已经尝试过k=3,4,6的情况。
根据读过的一篇他人论文的推荐,rna2vec的k-mers推荐设为4。
而gene2vec的k-mers,目前已尝试过了3,4,6,

四种特征提取方式下的模型对比图:
Batch_size=8
gene使用embeding————rna使用embeding 预计训练100轮 main.py
gene使用dna2vec-6—————rna使用myRna2vec-4预计训练100轮 main6.py
gene使用Gene2vec————-rna使用myRna2vec-4预计训练100轮 main2.py
gene使用myGene2vec-4———rna使用myRna2vec-4预计训练100轮 main4.py

特征提取方式不同时,loss变化趋势图.jpg
特征提取方式不同时,PRC评分变化趋势图.jpg特征提取方式不同时,AUC评分变化趋势图.jpg
模型在训练过程中,loss都有下降迹象。训练集每跑一个epoch,就跑一遍验证集。
验证集表现最好的模型是当使用Dna2vec_6和myRna2vec_4 这两个特征提取方式时
在训练大概40轮左右,AUC评分能到0.55左右,PRC能到0.54左右。

改变Dna2vec的k-mers大小,做对比图:
Batch_size=8
gene使用dna2vec-6—————rna使用myRna2vec-4预计训练100轮 main6.py
gene使用Dna2vec-4————rna使用myRna2vec-4预计训练100轮 main5.py
gene使用Dna2vec-3—————rna使用myRna2vec-4预计训练100轮 main3.py
Dna2vec-k-mers不同时,loss变化趋势图.jpg
Dna2vec-k-mers不同时,PRC变化趋势图.jpgDna2vec-k-mers不同时,AUC变化趋势图.jpg
在保持两种特征提取方式不变的情况下,改变k-mers的大小(因为两个提取方式本质上都是word2vec)
当Dna2vec的k-mers设为6 myRna2vec的k-mers设为4,在训练大概40轮左右,有较好的结果。

4月13日

WeChat_link:https://mp.weixin.qq.com/s/XT9L6TFc80zSZqPsrB1ECg
本链接主要讲了,在进行机器学习时遇到数据量不够的情况下的三个解决技巧(已对代码进行了运行复现)
(这三个小技巧是从简单到复杂的)

1.Faker模块

可以用来生成伪数据,包含了city_name,person_name,color_name,address,country_name,phone_number等在内的常见数据。
此模块没有输入只要调用固定的方法,就会产生输出。
比如:fake.address() 或 fake.color_name()就会有一个输出

2.Synthetic Data Vault(SDV)

此模块可以根据已有的真实数据生成符合一定规律的伪数据,实现对整体数据集的扩充。
此模块以当前的真实数据作为输入,通过Fit(训练)得到一个模型,然后用此模型进行伪数据的生成。
比如:model =GaussianCopula() ; model.fit(realData) fakeData = model.sample()

使用sdv.evaluation中的evaluate方法来评估新生成的伪数据与真实数据之前的相似性几何:evaluate(fakeData,realdata) 得到一个位于(0,1)之间的值,0表示最差的结果,1表示最理想的结果
通过改变生成的伪数据的数量发现:生成的伪数据数量越多,相应的伪数据与真实数据之间的上述分数越差。

3.Conditional Tabular Generative Adversarial Networks(CTGAN)

是通过生成对抗网络GAN来建立和完善合成的数据表。
此模块的输入为现有的真实数据以及若干个超参数,输出是一个训练好的模型,该模型可以用来生成伪数据。
比如:
model = CTGANSynthesizer(batch_size = 50,epoch = 5,verbose = False)
model.fit(realData,colums) ##其中columns是数据表的行标题列表
fakeData = model.sample(200)
通过改变生成的伪数据的数量发现:生成的伪数据数量越多,相应的伪数据与真实数据之间的相似性几何关系分数没有明显下降。
对于CTGAN中超参数改变对生成数据的影响,暂时还没进行实验求证。
CTGAN的不足:https://3g.163.com/dy/article/GOH0U7G80531D9VR.html

4月19日

1.检索到了多篇关于RPI(RNA与蛋白质相互作用)的论文。其中一篇硕士论文说到了对RNA使用GAN进行数据增强。
2.找到了一个国外的《miRNA与基因互作数据库》网站miRactDB 网址:https://ccsm.uth.edu/miRactDB
其中查询功能,可以查询miRNA和gene的在多个方向的相互作用结果(内容较为复杂,与我的数据集出入很大,是不是没脱敏等各种原因),并且其没有标明当前miRNA是从前体的5’端臂还是3’端臂加工而来。
3.miRna的命名图.jpg
通过对miRNA命名规则的分析。发现序号相同的miRNA跟同一gene相互作用,所产生的结果是一致的。所以在gene范围不变的情况下,把miRNA的范围泛化到了全部miRNA上。

hsa-miR-146a-5p UGAGAACUGAAUUCCAUGGGUU
hsa-miR-146b-5p UGAGAACUGAAUUCCAUAGGCUG

新生成了881条较为可靠的新的训练数据。当前训练总数据量为1619。
4.下一步打算先不进行数据增强,看看这1673条数据在模型的上的表现。然后再考虑用GAN进行数据增强。

4月20日

这1619条数据通过训练在验证集上表现不错,验证集上AUC和PRC得分均为0.9以上。
尝试对竞赛官网给的测试集进行预测,并提交到原数据所在的竞赛地址oj平台。
得分0.76(官网baseline得分为0.82)。
同样还是使用我的这1619条数据,用竞赛官网给的baseline代码,验证集集本地得分0.88
提交到原数据所在的竞赛地址oj平台。得分0.83(官网baseline得分为0.82)。
接下来考虑利用GAN进行数据增强,看增强后的效果如何。并针对性的进行调优。

4月21日

利用之前得到的1619条数据的Train.csv,传入到CTGAN中生成3000条伪数据。
合并之前的1619和新生成的3000条数据,并对合并后的数据进行去重降噪点等数据处理最后得到4504条数据。
ps:训练模型的过程也是寻找规律的过程,利用CTGAN新生成的数据,属于伪数据,所以我感觉肯定有一部分有误数据会对模型的训练有消极影响。
于是,利用数据集出处竞赛官网的baseline代码,使用这4504条数据做训练,对官方给的测试集做测试,将预测结果上传到竞赛oj平台,
得分:0.8218(比使用初始的738条数据分数高了0.001)
所以感觉利用CTGAN做数据增强生成的“伪数据”作为训练集可行。

利用4504条数据(1400条为不相互作用 3104为相互作用)
gene和miRNA均采用自己训练的word2vec模型做特征提取。
batch_size设置为8.在训练到第56轮时得到的最好结果为:AUC=0.65 PRC=0.77

接下来就是参考师姐论文中调优的方式,对超参数进行适当的调节,并运行观察模型表现。
同时去谷歌学术查找我这个方向的有关论文。

4月22日

实验
参数:
网络深度:3
网络宽度:64
dropout:0.1
batchsize:8
一维卷积的宽度:7
前馈神经网络隐藏单元:256
学习率:1e-4
学习率衰减:1(5个epoch衰减一次)

控制变量法

其他参数不变,batchsize从8改为16:
改变前:AUC=0.65 PRC=0.77
改变后:AUC=0.62 PRC=0.75(收敛较慢)

其他参数不变,dropout从0.1改为0.2:
改变前: AUC=0.65 PRC=0.77
改变后: AUC=0.63 PRC=0.75

控制其他参数不变,拓宽网络
拓宽前:AUC=0.65 PRC=0.77
拓宽后:AUC=0.62 PRC=0.75

改变学习率:从1e-4改到0.001 衰减为每5个epoch衰减一半:
改变前: AUC=0.65 PRC=0.77
改变后: AUC=0.64 PRC=0.76

学习率这一块尝试了多种调节方式。效果一直不好。都不如原代码中把学习率定死在0.0001时效果好。┭┮﹏┭┮
相同的数据在baseline机器学习上表现就还不错,在现在的深度学习模型上就不行了。是不是模型架构有问题呢

4月24日

找到了两个用于gene和rna相互作用预测的数据集网站。
https://dianalab.e-ce.uth.gr/html/diana/web/index.php?r=tarbasev8 TarBase v.8数据集
https://zhuanlan.zhihu.com/p/83228514:mirtarbase数据集网站

1 前者可以通过输入miRNA和gene的名字来获得两者的相互作用关系数据
(涵盖高通量测序和低通量测序)
想要获取整个数据集需要跟开发团队进行申请,申请的表单提交出现了服务器无响应的表现。根据网站下方开发者预留的邮箱,已经给他发了邮件寻求数据集,暂时没有得到回复。
2 后者是在一个生信领域的知乎博主的博文中发现的,网址直接打不开

4月26日

成功下载到了tarbase数据集的前一个版本v7(有64万条数据)经过初步清洗有(25万多条),虽然数据集相对于之前的竞赛官网的数据集虽然更多,但是有些数据有歧义,我原本数据集(738条)中不相互作用的51条,在tarbase变成相互作用了。

4月27日组会

1.从AUC、PRC、baseline评分等多个评价指标来衡量一下模型表现。
采用同一种评价指标才能知道模型的好坏。(自己编个代码算一下评分)
看一下我的数据代码扩充对评分增加是否有帮助

2.增加一下数据量,比例尽量达到1:1
2.先保留v7数据集,看v8是否可以获取到

3.抛弃GAN,人为找一下规律对数据集进行扩展到四千多条,并放到我的现有模型里看一下他的评分。假如模型表现效果还不错,就可以不需要找情感分类代码了。
image.png

4.查找用Transformer做情感分类的开源代码(GitHub或微信链接或百度)目的是学习情感分类代码的特征提取方式,解决特征提取过大的问题。
我的gene数据序列的长度区间分布统计。
image.png
统计一下找到的开源情感分类代码中的数据集长度区间分布。概率密度分布。
之前做过参考师姐画的图)
将我自己的数据集放进情感分类模型代码中,看一下结果如何,找老师汇报。
假如情感分类的数据集跟我数据集差距过大,可以找老师讨论。

4月28日

我找到了竞赛官网数据集的出处,并把原始数据集下载到了本地命名为has_MIT。
在不采用认识机器学习算法的前提下,利用官网提供的测试集为条件,去has_MIT检索两者的相互作用结果。然后提交到竞赛官网进行评测。测试集评分1.0,结果完全正确。(这就证明此处确实为数据集出处)
https://mirtarbase.cuhk.edu.cn/~miRTarBase/miRTarBase_2022/php/download.php
所以我感觉数据问题基本解决(不用再想着如何找规律扩充数据集)
下面就是以hsa_MIT数据为依据,搞一些训练数据数据出来。

经过数据的各种处理,数据从55万余条缩减到29万余条。
其中:

Functional MTI 6338条
Functional MTI (Weak) 290311条
Non-Functional MTI 288条
Non-Functional MTI (Weak) 91条

其中包不包含weak的含义是gene和miRNA互作对的标签的可信度:
带weak的是:没有强有力的实验依据就得出的结论
而且其中好多rna不是智人的rna。计算是智人rna也是在不同的实验场景下进行的(不同的细胞中)
并且,不相互作用的互作对太少,样本极不均衡。

所以说,这些数据可用性不高。能用的仍然还是竞赛官方数据集给的那些数据。还是得自己找规律扩充数据集。

do:
1.利用rna的命名规则,尝试进一步扩大数据。最终得到2078条训练集

2.在1901条的Non-Functional MTI标签数据中寻找规律,利用概率方式生成不相互作用的数据。
3.利用CTGAN 使用扩大后的数据生成6000条数据,跟hsa数据集做比较进行更正。hsa中没有的数据设置为Non-Functional MTI。并进行特征提取并进行实验。

4.找利用Transformer进行情感分类的代码,学习他的特征提取方式。(顺便看下模型是够可以借鉴)画出他的数据长度分布和我的数据长度概率分布图。

Workaround
1,。为了解决出现的数据训练量过大导致的特征文件过大的问题,所以不能一次性提取出来。打算一边跑一遍提取。利用dataloader加载数据。定好batch_size。试验过后效果很好。内存占用下降。理论上不用再担心因为训练数据量过大导致的内存问题。

idea
对于寻找规律来扩充数据集是比较困难的,并且找到规律扩充了数据集。自己找得到规律,模型不一定理解。

所以我想与其找规律倒不如,让机器去找规律,让gene和miRNA互作对服从这个规律。

因此。
由于使用官方baseline实例代码(基于随机森林)利用738条训练数据的表现是不错的。
所以我想利用官方的给的baseline代码,以我现在的所有训练数据(738+165+根据rna命名自己找到的规律+第三方数据集的若干个不相互作用的互作对)进行训练,得到一个随机森林的机器学习模型。让这个模型当裁判

我利用随机选择抽取的方式制作5万条gene和miRNA的互作对,但不赋予标签。
让之前训练的机器学习模型去给你赋予标签(就假设这个标签是正确的)。

换句话说:对于未知的genemiRNA互作对,我传入到此模型,我将此模型的输出作为未知的互作对的标签。

这样生成的互作对就满足了一定的规律(这个规律可能是随机森林模型学到的规律,但利用深度学习的强大拟合能力应该是能拟合出来的)。
利用此方式,理论上能产生几万条样本均衡的数据。

经过100个epoch的训练实验:
使用5000条数据进行训练auc分数能到0.86左右
使用1万条数据进行训练auc分数会下降大概0.85左右
暂时还没考虑进行加深网络和拓宽网络等调参方式

以下为使用1万条数据训练时各个指标的变化图:
loss持续下降。auc评分和PRC评分在第40轮后就开始在0.84~0.85波动。
F1评分在第40轮后在0,76~0,79之间波动较大
acc评分在第40轮后在0,76~0,79之间波动较小
image.png
image.pngimage.png
image.pngimage.png

疑问:
方式是否可行。
假如此方式可行,那在论文中用何种方式描述自己做的这部分的数据增强。

因为不同于传统的机器翻译等nlp任务,我这个预测两者相互作用的模型做数据增强好像挺难的。
关于老师所发送的关于NLP数据增强的微信链接。
大体看了一下其中都是大多都是针对语言类数据,比如机器翻译而言的。
其中提到的有增加数据噪声等方式不适用于我的现有数据集。
因为我现在的每个gene序列短则几百,长则一万。都是不可分的,一个gene对应一条序列,不能破坏其结构。


5月2日

针对老师发的CTGAN生成数据的方式,和使用机器学习模型生成数据的方式,进行异同点总结。
找一下利用Transformer模型进行情感分类的代码

5月3日

我发现了一个autoML的第三方库autogluon
该第三方库能,自行调参,自动特征提取,自动尝试各种机器算法模型,最终自动选择最佳模型,并能输出各个评价指标得分。据说还可以通过预训练调参嵌入Transformer等众多流行深度学习模型(自行嵌入这块很难理解,我只用到了简单的调参调用)
现在我只能对其进行简单使用,而且特征也是我自己提取的。
传入模型,花几分钟进行训练,模型就会给出多个模型的表现结果。
效果最好的模型是0.82左右。
这一块是不是可以写论文做对比用?
image.png

5月4日

老师发的GAN模型生成数据,和机器学习模型生成数据的区别

1.Conditional Tabular Generative Adversarial Networks(CTGAN)

是通过生成对抗网络GAN来建立和完善合成的数据表,表格数据生成
此模块的输入为现有的表格数据以及若干个超参数,输出是一个训练好的模型,该模型可以用来生成伪数据。
实例:
model = CTGANSynthesizer(batch_size = 50,epoch = 5,verbose = False)
model.fit(realData,colums) ##其中columns是数据表的行标题列表
fakeData = model.sample(200)

CTGAN学会生成与训练数据相似的分布。
虽然CTGANs可以了解训练数据的分布,但有时他们可能会错过这些数据和其他重要方面之间的相关性。
尽管他们很好地捕捉到了每个变量分布的一般形状,但他们未能捕捉到它们之间共享的大量信息。
对于CTGAN中超参数改变对生成数据的影响,暂时还没进行实验求证。
CTGAN的不足:https://3g.163.com/dy/article/GOH0U7G80531D9VR.html

2.数据竞赛所在官方提供的baseline的随机森林模型

对于一串miRNA序列和一串gene序列。对其进行滑动窗口的特征统计。
例:miRNA序列:AUCCGUACUACUGGCUAUCG
AUCC UCCG CCGU ……………….. 利用map字段统计子串出现的次数 得到字典A

gene序列:TCGAGCTTTTACCCTTTGAGAGAGCT
TCGA CGAG GAGC ……………….. 利用map字段统计子串出现的次数 得到字典B

合并字典A和字典B,合并后作为特征进行随机森林训练

5月6日

关于老师所发送的关于NLP数据增强的微信链接。
其中都是大多都是针对语言类数据,比如机器翻译而言的。
其中提到的有增加数据噪声等方式不适用于我的现有数据集。
因为我现在的每个gene序列短则几百,长则一万。都是不可分的,一个gene对应一条序列,我认为不能破坏其结构。

5.7

1.1万条数据epoch扩大到200进行训练,2万条数据epoch扩大到200进行训练。看下增大数据集结果是否会有改变。
2.仔细阅读,总结下微信链接的数据增强方法,我的方法是不是可以往上靠。总结下下次进行汇报。
3.开始写小论文,写的过程中通过看微信链接思考创新点。

5.16组会

找一下Self-training中文论文,总结下他们的叙述,摘录下他们的语言。以后可以用。

明确要画的图中需要哪些东西,然后去跑实验。先用纸笔把大体需求画出来。

关于数据方面的描述。可以描述数据集来自公开数据库和竞赛地址数据。

关于创新点的问题,需要摘出一部分自己的数据,用创新点的代码做实验,先运行起来。然后看可行性。
需要有具体的数值对比。根据数值看是否可行。
若创新点确实可行,然后再考虑代码集成。
ployloss可以用较少的epoch看下相较于之前的损失函数是否有改进。

明确下小论文的架构。
细化下算法设计部分的架构。
看一下老师群里发的大小论文写作要求pdf。

下面的任务:

1.找一下Self-training中文论文,总结下他们的叙述,摘录下他们的语言。以后可以用。(√)
2.跑实验
3.列小论文框架写初稿,创新点的位置留着。
4.对创新点进行实验。

问题:
1.当前我的模型图结构上跟师姐的模型以及师姐参考的模型相似性很高,会不会有影响(可能免不了一些相同相似的语言论述)。算法一致没问题,只要加上作者就可以。
2.我可不可以跟师姐采用相同的实验方法进行实验:改变batchsize 拓宽网络 加深网络

6.9组会任务

1.考虑loss部分作一阶差分二阶差分
2.考虑改进一维卷积和改进门控部分以及归一化部分,尝试下图神经网络
3.先写大论文中的算法设计和实验部分,然后从大论文里摘出一部分作为小论文。
4.把大论文的算法设计和实验部分写完(不包含创新点),并把创新点想法跟老师讨论。

下一步安排:
1.跑实验:
batchsize调节为16和32跑200个epoch√
固定batchsize为32 加深网络和拓宽网络√
2.写大论文中的算法设计和实验和部分(算法设计部分简约版大体写完了,实验部分写了一部分)
3.去找创新点(看到一篇加快attention运算的FastAttention微信推文,还没深入看)
4.找老师讨论

问题:
利用门控卷积层代替了原Transformer的self-attention层,是因为self-attention层虽然可以存储整个序列的全部上下文信息,但计算量大呈平方级,其庞大的计算量跟基因序列长度是成正比的。而且对于处理基因序列而言不必关注基因序列的全部上下文信息,卷积层所捕捉到的上下文信息是足够的。
??基因序列是否存在长期依赖关系??(这个不大确定)

1.实验环境方面:写自己电脑配置还是服务器的配置,写服务器的配置的话需要提一嘴用的什么服务器平台嘛
2.在数据增强方面,需要对增强前的数据训练200个epoch,然后和增强后的1万和两万条数据做对比(数据增强前的数据样本极不均衡,暂时不知道训练过程中会有怎样的结果)

microRNA 基因 数据增强前 数据增强后
作用对 有调控关系 无调控关系 作用对 有调控关系 无调控关系
2656 16127 7073 6770 303 20042 10298 9744

3.模型图用ppt模板画还是用viso画。
4.批尺寸大小和改变网络结构的实验跟预想不一样
5.实验部分dropout和学习率的改变还需要训练200轮画评价指标的变化曲线嘛,是不是可以少训练几轮只出数值做个对比就行。
6.大论文数据增强部分摘抄的微信链接
7.大论文中viso图可以用师姐的嘛
8.创新点没找到合适的,单纯字符串序列不存在空间结构,图神经网络不大好用上,还得再看看。

还需要跑几次实验
实验安排:
分别采用不同的dropout训练60轮
采用不同的学习率训练100轮
调整一维卷积的kenel_size大小