Python算法从正数据集中获取随机负数据集
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python算法从正数据集中获取随机负数据集,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1744字,纯文字阅读大概需要3分钟。
内容图文
![Python算法从正数据集中获取随机负数据集](/upload/InfoBanner/zyjiaocheng/784/e40ac06e3adf4c8fac14128787e33627.jpg)
我有一个包含独特蛋白质对的文件,即阳性数据集.我们称之为infile.
下面是一个infile内容的例子:
Q9VRA8 A1ZBB4
Q03043 Q9VX24
B6VQA0 Q7KML2
条目以制表符分隔.
随机数据集,我们称之为outfile,必须包含单个蛋白质的组合,其方式是它们无法以任何顺序匹配infile的内容.例如,对于上面的第一行,随机化的outfile不能包含以下对:
Q9VRA8 A1ZBB4
A1ZBB4 Q9VRA8
此外,生成的负数据集必须包含正数据集中完全相同数量的蛋白质对.
为了解决这个问题,我尝试了以下方法:
# Read original file
data = list(infile.readlines())
ltotal = len(data)
lwritten = 0
# Split original file in words
with open (infilename, 'rt') as infile:
pairs = set(frozenset(line.split()) for line in infile)
words = list(itertools.chain.from_iterable(pairs))
random.shuffle(words)
# Obtain pairs of words
with open(outfilename, 'wt') as outfile:
for pair in itertools.izip(*[iter(words)] * 2):
if frozenset(pair) not in pairs and lwritten != ltotal:
outfile.write("%s\t%s\n" % pair)
lwritten += 1
这有效.然而,infile总共有856471行,outfile获得不同范围的蛋白质对,最小值为713000.
我该如何解决这个问题,因此产生的对数与infile完全相同?
另外,我无法解决反向对订单问题.这两个问题都有想法吗?
提前致谢.
解决方法:
要排除独立于订单的对,我只需将两个订单放入我的对列表中:
即我将:line.split()和line.split()[:: – 1]添加到对的集合中.
要生成更多对,而不是遍历单词列表,只需选择随机对(可能使用random.choice?)然后根据无效对列表对它们进行否决(您可能还需要考虑生成配对“A1ZBB4 A1ZBB4”并采取相应的行动).只要你愿意,你就可以继续这样做.由于您需要确保输出仅包含唯一元素,因此可以在生成输出项时将输出项添加到否决列表(或作为单独的否决列表进行维护).
如果要减少内存占用,可以设置:
>对是否决对的集合,但每对都在内部排序,即如果您读取“Q9VRA8 A1ZBB4”,则将其存储为“A1ZBB4,Q9VRA8”对.
>您生成上面的随机对,检查该对的排序版本是否在您的否决列表中,如果是,请忽略它.
内容总结
以上是互联网集市为您收集整理的Python算法从正数据集中获取随机负数据集全部内容,希望文章能够帮你解决Python算法从正数据集中获取随机负数据集所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。