我有一個文件包含唯一的蛋白質對,正數據集。我們稱之爲infile
。 下面有infile中內容的一個例子:Python算法從正數據集中獲取隨機化的負數據集
Q9VRA8 A1ZBB4
Q03043 Q9VX24
B6VQA0 Q7KML2
的條目是製表符分隔。 隨機數據集,我們稱之爲outfile
,必須包含各種蛋白質的組合,其方式是它們不能以任何順序與infil 的內容匹配。作爲一個例子,對於上面的第一線,隨機OUTFILE不能包含以下對:
Q9VRA8 A1ZBB4
A1ZBB4 Q9VRA8
此外,所產生的負數據集必須包含在正極集完全相同的數目蛋白對。 爲了ADRESS這個我試過如下:
# 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完全相同? 此外,我無法解決反向對訂單問題。這兩個問題有什麼想法?
在此先感謝。
你能重複一下值嗎?每個文件中每種蛋白質的總數是否必須匹配? – 2012-07-30 14:04:24
哦,對不起,錯過了這一點。是的,我可以重複個人參賽作品。但是我不能有重複的對。所有組合必須是唯一的。不,蛋白質的總數不必與每個文件匹配。雖然應該有一些平衡,或者當我使用SVM時可能會造成一些偏差。 – 2012-07-30 14:07:53
我得到的印象是,您正在爲SVM生成一個「背景」(排序爲零假設)分佈。你爲什麼否決在這個人造數據集中已經發生的對? – Dave 2012-07-30 14:20:24