ошибка кода в программе word2vec для последовательности ДНК - PullRequest
0 голосов
/ 04 июня 2019

Я пытался разработать код для чтения нуклеотида в формате fasta в виде строк (каждый вход - как одно слово), а затем использовать уже известные последовательности сайтов связывания (длиной 11 п.н.) для поиска среди нуклеотидных последовательностей с помощью модели word2vec

Файл fasta выглядит так, и все значения читаются в виде последовательностей в виде строки

`sequence:

ATCGTGACGTGACGTGACGT

CGTAGCTAGAGCTAGCGGATCGA

и привязкасайты хранятся в виде столбца в кадре данных как df ['binding']

ATGACTCAGCA

GTGACTAAGCA

ATGACTCAGCA

ATGACTCAGCA

...

Вот мой код на python:

import gensim 
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
model = gensim.models.Word2Vec(sequences, size=2, min_count=len(sequences), sg = 1)
model.train(sequences,total_examples=len(sequences),epochs=10)
w1 = df['binding']
model.wv.most_similar(positive=w1)

Я надеялся получить связь между каждым узлом привязки, но он выдает ошибку как KeyError: "word 'ATGACTCAGCA' not in vocabulary" здесь ATGACTCAGCA является первым значением вdf['binding']

Если я изменю w1 = df['binding'] to w1='A', я получу результаты как

[('T', 0.9952122569084167),
 ('G', 0.9772425889968872),
 ('C', 0.9460670351982117)]

Что нужно изменить, чтобы получить связь между двумя сайтами связывания, а не двумя / более парами оснований?

1 Ответ

0 голосов
/ 04 июня 2019

Вы должны быть уверены, что sequences - это последовательность Python, где каждый элемент представляет собой список токенов, где токены - это «слова», которые вы хотите найти (например, несколько связанных 11-символьных символов).участок связывания').Если это последовательность строк с символом «AGTC», токены будут просто A, G, T, C.

A size=2, вероятно, не будет генерировать интересные векторы, по крайней мере, для словаря из сотен или тысяч токенов.

A min_count, пока ваш полный набор примеров будетвыбросить любой токен, который не появляется, по крайней мере, так много раз.

Вам не нужно вызывать train(), если вы предоставили набор данных для инициализации класса: он уже запустил обучение автоматически.(Если вы работаете с регистрацией на уровне INFO, это будет очевидно из вывода.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...