【问题标题】:Counting different letter K-mers with scikit learn用 scikit learn 计算不同的字母 K-mers
【发布时间】:2014-05-11 01:01:55
【问题描述】:

我正在努力从蛋白质序列中提取不同氨基酸字母的频率。 我还在研究字母表的不同“简化”表示(即,我想让一些字母等效于 [K]、[R] -> [KR] 等,而不是 20 个字母)。

什么是有效的方法:1)从蛋白质序列中提取不同 k-mers 的频率计数(即,序列中长度为 1、2、3 的字母的重叠计数),最好使用内置的 scikit学习工具(比如countvectorizer之类的)? (我可以自己生成可能的组合并从字符串中计数,但这效率很低,我不想在我的管道中使用 scikit learn 的工具,但这些工具是用于单词的,而不是单个长单词中的多个字母..)

2) 有没有一种有效的方法来获取 k-mer 字母计数/频率,使用 scikit 的 countVectorizer 等,用于不同的字母? (即,将翻译表提供给该方法,并直接获取缩减库的 2-mer 频率,而不是低效地重新计算每个序列的可能组合及其频率)。

订单等的维护也很重要,因为我还需要在最后获取特征“名称”(用于作为特征列的名称附加到输出)。 非常感谢!

【问题讨论】:

  • 我知道 CountVectorizer 可用于获取 n-gram,但我想要重叠计数..(并且我需要计数的特征/k-mers 在不同样本之间保持一致)。
  • 您能发布到目前为止您尝试过的内容吗?我不确定我是否理解这个问题,没有任何代码很难说。如果您可以过去输入、所需输出和您当前的代码,我可以试一试。
  • 我使用 itertools 实现它以获取所有可能的组合,并使用 defaultdict 以重叠方式迭代序列/字符串。
  • 也许有人可以提高你代码的效率,而不是从头开始考虑一切......

标签: python scikit-learn bioinformatics biopython feature-extraction


【解决方案1】:

您想要一个包含蛋白质中每个“单词”的列表/字典。假设您有以下蛋白质:

prot_1 = "mklfgsmhee"
prot_2 = "heelyiggis"

您想要一个返回所有长度为 n 的单词的函数,如下所示:

>>> words_prot_1 = wording(prot_1, 3)
>>> print words_prot_1
["mkl", "klf", "lfg", "fgs", "gsm", "smh", "mhe", "hee"]
>>> words_prot_2 = wording(prot_1, 3)
>>> print words_prot_2
["hee", "eel", "ely", "lyi", "yig", "igg", "ggi", "gis"]

循环浏览您的蛋白质以创建一个字典或这样的列表:

kmers_3 = ["mkl", "klf", "lfg", "fgs", "gsm", "smh", "mhe", "hee",
           "eel", "ely", "lyi", "yig", "igg", "ggi", "gis"]

(请注意,重复的术语“hee”只有一次,这很容易通过set(list) 或在字典中插入键来完成)。现在可以将相同的word_prot_1 提供给CountVectorizer伪造带有str.join() 的文本。比如:

cv = CountVectorizer(vocabulary=kmers_3)
cv.fit_transform(" ".join(words_prot_1)).toarray()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2017-08-01
    • 2017-06-16
    • 2021-11-04
    • 2018-03-26
    • 2013-10-12
    • 2017-04-06
    相关资源
    最近更新 更多