Актуальный рецепт решения представленной проблемы (одно из возможных решений)
Решить эту проблему довольно просто, используя мой любимый инструмент машинного обучения, vowpal wabbit, который поддерживает квадратичные (перекрестные) функции с помощью опции -q .
vowpal ваббит фон
Прежде чем перейти к деталям использования. vowpal wabbit - это быстрое и масштабируемое онлайн-программное обеспечение для машинного обучения, предназначенное для классификации и регрессии Я получаю скорость обучения (обучения) около 5 миллионов функций в секунду на своем рабочем столе без ограничения размера данных (количество примеров), поскольку в качестве онлайн-инструмента обучения он не требует загрузки полных данных в память. У него много других привлекательных функций: поддержка различных алгоритмов обучения, функций множественных потерь, разреженных функций, смешанных типов объектов и т. Д., Которые выходят за рамки этого вопроса.
Вот 3 шага к решению проблемы с комментарием:
Шаг 0: Загрузите и соберите vowpal wabbit с github (см. Примечание внизу о поддерживаемых средах)
Шаг 1: Подготовьте обучающий набор, где каждая строка выглядит следующим образом:
1.0 protein1/protein2|A p1_feature1 p1_feature2 ... |B p2_feature1 ...
...
объяснение формата обучающего набора:
Крайнее левое число, 1.0 , является меткой (сила взаимодействия, которая может быть любым числовым значением), вторая строка ' protein1 / protein2 ' является меткой, чтобы придать линии идентичность, IOW: «эта строка представляет взаимодействие между protein1 и protein2" ; Это необязательно, и вы можете думать об этом как о комментарии. Эта строка тега также отражена в прогнозах моделей, чтобы определить, какой прогноз относится к какому примеру, но здесь мы не прогнозируем, мы просто моделируем и изучаем нашу модель. Далее идет пространство имен входной функции для protein1 |A
(нам нужно определить пространство имен, чтобы мы могли переходить между различными пространствами имен, это не обязательно должно бытьA
, может быть любым словом на самом деле, но первая буква должна отличаться между пространствами имен, чтобы мы могли их пересечь в вызове команды), а затем список функций ввода для protein1 p1_...
. Последним идет пространство имен для protein2: |B
за ним следуют именные признаки protein2 p2_...
.
Одна из прелестей vowpal wabbit заключается в том, что вы можете использовать произвольные строки для имен объектов (они будут хэшироваться внутри, но вам все равно). Единственные специальные символы в тренировочном наборе:
- пробелы (очевидно)
|
, для префикса входных объектов и пространств имен, и
:
отделить имена объектов от их значений
Здесь :
не используется, потому что мы предполагаем, что каждое имя свойства белка представляет логическое значение (существование), поэтому их значения по умолчанию равны 1
и им не нужны явные значения.
Теперь вы можете запустить vowpal_wabbit (имя исполняемого файла vw
) с, -q AB
чтобы автоматически создавать перекрестные элементы (иначе говоря, термины взаимодействия) между всеми возможными парами объектов, где один объект выбран из protein1 (пространство имен начинается с A
), а другой - protein2 ( пространство имен, начинающееся с B
). vowpal_wabbit прочитает данные, изучит и создаст модель с весами для каждой комбинации признаков, что приведет к некоторому взаимодействию между парой белков. Здесь, вместо того, чтобы работать vw
напрямую, мы запустим его через vw-varinfo
утилиту-оболочку, которая поставляется с vowpal wabbit, как наш последний шаг. vw-varinfo
запускается vw
для создания модели и выводит ее в удобочитаемом виде.
Шаг 3: вызовите vw-varinfo следующим образом:
vw-varinfo -q AB -c --passes 20 your_data_set_file
vw-varinfo передаст все параметры ( -q ... -c --passes ...
) как есть vw
. -q AB
Необходим только для пересечения двух пространств имен объектов. Я добавил еще одну опцию выше (запустить несколько проходов), которая, я считаю, даст лучшие результаты.
Эта команда вызовет vowpal wabbit ( vw
) для обучения набора данных и напечатает вывод, который, я полагаю, вы ищете: все взаимодействия элементов в порядке силы и их относительные веса.
Пример ввода и вывода
Предположим, что ваш вклад prot.dat
включает трехстороннее взаимодействие между 3 белками:
1.0 protein1/protein2|A a b |B k m
0.6 protein2/protein3|A k m |B b c d
2.2 protein1/protein3|A a b |B b c d
Это намеренно очень минималистичный пример. vw
у меня не должно быть проблем с гораздо большими наборами данных (например, миллионами строк, сотнями функций), также я варьировал метки силы взаимодействия в примерах. Если в вашем случае взаимодействие - это логическое «да» или «нет», просто используйте 0
(нет взаимодействия) или 1
(взаимодействие существует) в качестве 1-го поля в каждой строке.
Бег:
vw-varinfo -q AB -c --passes 20 prot.dat
Приведет все возможные взаимодействия (игнорировать пространства имен A
и B
в выходных данных) и их веса:
FeatureName HashVal MinVal MaxVal Weight RelScore
A^k 220268 0.00 1.00 +0.3804 100.00%
A^k^B^k 254241 0.00 0.00 +0.3804 100.00%
A^k^B^m 93047 0.00 0.00 +0.3804 100.00%
B^k 178789 0.00 1.00 +0.1011 26.58%
B^m 17595 0.00 1.00 +0.1011 26.58%
[... trimmed for brevity ...]
A^m^B^m 141879 0.00 0.00 +0.0000 0.00%
Constant 116060 0.00 0.00 +0.1515 0.00%
A^b 139167 0.00 1.00 -0.0641 -16.86%
A^b^B^k 204424 0.00 0.00 -0.1233 -32.43%
A^b^B^m 43230 0.00 0.00 -0.1233 -32.43%
Показывая, что в этих данных самыми сильными участниками любых взаимодействий в целом являются: 1) простое наличие k
признака, 2) k
признак, взаимодействующий с самим собой (при условии, что он есть у обоих белков), и 3) k
взаимодействующий с ним m
. в то время как самые слабые (отрицательный вклад во взаимодействие с белками) являются b
признаком в сочетании с m
признаком
Вот страница HOWTO на vw-varinfo
vowpal wabbit собирается из исходного кода (см. ссылку выше) и работает в Linux (и, возможно, в других Unixes), Mac OS-X и Windows.
НТН