Отбор дескрипторов - что не так? #хемоинформатика #QSAR #машинноеобучение #отбордескрипторов Друзья, приехал с конференции для молодых ученых Менделеев2021 в Санкт-Петербурге. Было очень интересно. Там даже есть "наша" секция по хемоинформатике и компьютерной химии, поэтому рекомендую принимать участие. Спасибо Михаилу Полынскому и Александру Новикову, и за приглашение, и за прекрасную организацию. Так вот, я с удивлением для себя увидел, что достаточно часто в работах ребята отбирают дескрипторы, за что я покритиковал их немного (надеюсь, они не обиделись - это для их блага). Я обещал им написать об этом специальный пост в группе с тщательным описанием и рекомендациями. Выполняю обещание. Осторожно, получился лонгрид. Отбирать дескрипторы для моделирования - штука в общем-то заманчивая. С одной стороны, мы как бы интерпретируем модель - находим самые важные дескрипторы, можем проанализировать эту модель и, когда ты имеешь мало параметров, это легче сделать вручную. С другой стороны - мы вроде как уменьшаем шанс случайных корреляций. Если наша модель хороша на 2-3 дескрипторах, то есть надежда, что мы нашли универсальную закономерность. Но у меня есть большая убежденность, что отбор дескрипторов - очень трючная штука и зачастую ненужная. Причин тому несколько: - на самом деле, при отборе дескрипторов вы не уменьшаете шанс найти случайную корреляцию, а сильно увеличиваете его! Эта проблема называется Descriptor Selection Bias. Когда вы отбираете дескрипторы, возникает большое число вариантов, как это сделать. Если выбирать наборы, содержащие от 1 до D дескрипторов, из D дескрипторов, то возникает огромное количество комбинаций, а именно 2**D (откуда формула: каждый дескриптор или включен, или выключен). То есть имея 100 дескрипторов - мы имеем примерно астрономические 10**30 комбинаций! Когда у вас есть ограниченное количество данных, например, выборка из, положим, сотни объектов, какой шанс, что при переборе такого количества найдется такая комбинация дескрипторов, которая будут прекрасно вписывать данные? Большой. Выборка ограничена, а вариантов перебора много. Вы скажете, а если я буду отбирать на основе кросс-валидации? Тоже большой. Просто теперь будут оставаться модели, в которых случайная корреляция наблюдается не только на обучающей выборке, а также и на тестовой. Это даже еще хуже, потому что вы при отборе дескрипторов вы вносите информацию о тестовой выборке. Это все равно что отобрать дескрипторы на всех данных, а потом показывать, какая идеальная у вас модель на кросс-валидации. Логично, что проблема достаточно быстро уходит с увеличением выборки и уменьшением числа дескрипторов, из которых мы отбираем. Но все же шанс всегда остается. Каких-то рекомендаций на этот счет я не видел. - в общем-то, как правило, отбор дескрипторов не нужен: а) если вы отбираете дескрипторы для того, чтобы найти самые важные и как-то проанализировать, что оказывает влияние на интересующее свойство - у вас есть море способов это сделать. Например, в Random Forest или методах бустинга есть встроенный метод feature importance. Есть методы типа SHAP (https://christophm.github.io/interpretable-ml-book/shap.html), которые применимы для всех методов машинного обучения. Подробнее о методах интерпретации моделей рекомендую почитать в обзоре Паши Полищука: https://pubs.acs.org/doi/abs/10.1021/acs.jcim.7b00274. Может, как-нибудь еще поговорим об интерпретации. б) есть очень много методов машинного обучения, которые не чувствительны к числу и качеству дескрипторов. Они так сконструированы, что им не нужно, чтоб дескрипторов было сильно меньше, чем число объектов. SVM, нейронки, Random Forest, Ridge Regression, алгоритмы бустинга (GBM, XGBoost и прочие), PLS, регрессия на главных компонентах, деревья принятия решений - все они устойчивы к наличию достаточно большого количества нерелевантных дескрипторов и даже случайных чисел в них (правда, часто нужно дескрипторы шкалировать!). Кому это реально нужно из популярных методов машинного обучения - линейной регрессии (без регуляризации) и методу ближайших соседей. Все! Зачем тогда отбирать дескрипторы, если метод за это вам спасибо не скажет, а описанная выше проблема останется? Очень подозрительно, когда авторы исследования отбирают дескрипторы, а потом используют метод машинного обучения, которому это не нужно. У рецензента возникают опасения, что без отбора модель не работала, а отсюда возникает подозрение, что имелась проблема Descriptor Selection Bias и авторы хотят схитрить (или добросовестно заблуждаются). в) есть методы машинного обучения, которые САМИ отбирают дескрипторы без перебора всех возможных вариантов, и описанная выше проблема Descriptor Selection Bias для них не возникает. Общий подход использует L2 или L1 регуляризацию, используется в нейронках или в сочетании с линейной регрессией. Суть проста, как все гениальное: мы штрафуем модель не только за то, что она плохо описывает данные, но также за величину коэффициентов линейной регрессии. При использовании L2 регуляризации штраф растет как сумма квадратов коэффициентов линейной регрессии, L1 - как сумма их абсолютных значений. Чтобы уменьшить штраф, модель вынуждена как можно большему числу дескрипторов ставить коэффициент 0 и при этом максимально хорошо описать данные. Из-за того, что парабола имеет только один минимум и сумма парабол тоже имеет строго один минимум, то квадратичный штраф за плохое описание данных (принцип наименьших квадратов) плюс квадратичный штраф за коэффициенты (L2 регуляризация) также имеет единственный минимум! Значит модель не перебирает дескрипторы, когда находит лучшую комбинацию. Она спускается в ЕДИНСТВЕННОЕ верное решение для заданной величины коэффициента регуляризации. Если вам нужно выбрать минимальное число дескрипторов - почему бы отсюда не взять? Зачем использовать методы комбинаторной оптимизации, для которых есть высокий шанс Descriptor Selection Bias и которые при этом значительно дольше работают? А если все же от вас требуют дескрипторы отобрать? Попытайтесь объяснить все, что описано выше. Но если не убедили, то есть способ отбирать дескрипторы, чтоб не вызвать Descriptor Selection Bias. Надо отбирать не дескрипторы, а способ отбора дескрипторов! То есть вы берете обучающую выборку и на ней используете разные методы отбора дескрипторов (или один и тот же метод с разными параметрами). А потом на тестовой выборке смотрите, какой метод отбора дескрипторов дал модель, которая лучше всего работает. Тестовую выборку можно использовать только в самом конце, когда вы перебрали много разных комбинаций дескрипторов и на основании каких-то критериев уже отобрали дескрипторы и построили окончательную модель! Признаться честно, когда я был рецензентом в статьях, я не пропустил еще ни одной статьи, где использовался отбор дескрипторов (таких было около 5), потому что во всех из них делают это неправильно или было большое подозрение в недобросовестности. Ну и, наконец, вот прекрасный тьюториал, в котором показаны проблемы отбора дескрипторов и предложены решения, написал Игорь Баскин: https://onlinelibrary.wiley.com/doi/10.1002/9781119161110.ch10 Тьюториал использует программу Weka для машинного обучения, ибо это все было сделано до того, как Python стал мейнстримом. Но Weka все еще доступна. Когда я его проходил, все работало. Как сейчас - не знаю... Постарайтесь найти ту версию, которая упоминается в тьюториале. Минус - книжка платная. У кого нет доступа, вот ссылка на текст ранней версии этого тьюториала, который читался на Strasbourg Summer School: http://infochim.u-strasbg.fr/CS3/program/Tutorials/Tutorial2b.pdf Если кто-то хочет сам руками пробежаться по нему - пишите в личку, пришлю требуемые файлы. А если хотите в Python: в прикрепе - наш мини-тьюториал по отбору дескрипторов на Python с входным файлом. В нем приведен показан пример в котором кажется, что модель работает (при том что дескрипторы были случайными числами!), а на внешней выборке оказывается, что нет. Собственно использованный в в тьюториале способ посмотреть качество отбора - и есть правильный способ выбирать дескрипторы. Еще раз напоминаю, что надо хорошо подумать нужно ли оно вам вообще? Мне кажется, что отбор дескрипторов - это анахронизм, идущий со времен увлечения линейными моделями (Grammatica любила этот метод) или kNN (Тропша). Но так как все "лучшие практики" идут от этих групп, и их успели вписать в OECD принципы построения QSAR-моделей (тут должен быть фейспалм), то и возникает ощущение принципиальной необходимости отбора дескрипторов.