Найти в Дзене
Николай Лазарев

Машинное обучение в материаловедении. Прогнозируем модуль упругости.

Оглавление

Мой первый ML проект в сфере материаловедения. В предыдущей статье анализировал перспективы применения ML инструментов в данном направлении.

GPT генерит шикарные картинки по теме проекта)
GPT генерит шикарные картинки по теме проекта)

Скажу сразу, что сходу въезжать в специфику науки о материалах достаточно непросто. Несмотря на применение классических ML инструментов, в данном проекте присутствует специфическая терминология. Но если поставить перед собой цель, во всём со временем можно разобраться. И в химии, и в сопромате, и даже, не побоюсь этого слова, в квантовой механике. Дорогу осилит идущий! Поехали)

Описание цели проекта

Прогнозирование одной из характеристик - это одна из самых простых задач. Итак, нам нужно спрогнозировать модуль упругости. Это своего рода пристрелочная, пробная задача. С чего-то нужно начинать.

Но моей целью было познакомиться с этой сферой применения, и понять нюансы, а их оказалось немало.

Для выполнения задачи, нам необходимо познакомиться с базой данных Materials Project, самостоятельно подобрать признаки, и выгрузить необходимый датасет.

Выбор прогнозируемой величины (target features)

Поскольку модули упругости могут быть разные, пришлось сделать выбор. В базе данных представлены следующие величины — bulk_modulus_voigt, bulk_modulus_reuss, bulk_modulus_vrh. И нужно учитывать, что эти три характеристики связаны с одним и тем же физическим понятием — модулем объемной упругости, но получены разными методами:

bulk_modulus_voigt — модуль объемной упругости, рассчитанный по методу Фойгта, который предполагает, что деформация в кристаллическом материале распределена равномерно. Это оптимистичный (или верхний) предел для модуля.

bulk_modulus_reuss — модуль объемной упругости, рассчитанный по методу Ройса, который предполагает, что напряжение в материале распределено равномерно. Это пессимистичный (или нижний) предел для модуля.

bulk_modulus_vrh — среднее значение между модулями Фойгта и Ройса, известное как метод Воигта-Ройса-Хилла (VRH). Это взвешенное среднее значение, которое часто считается более реалистичным и точным для оценки модулей упругости материалов, поскольку оно сочетает два подхода.

bulk_modulus_vrh является лучшим выбором для целевого признака, так как он представляет собой сбалансированное значение и чаще всего используется для обобщенной оценки упругих свойств материалов.

Загрузка данных из базы Materials Project

Для начала необходимо зарегистрироваться на сайте базы данных и получить ключ API.

Из базы данных Materials Project выгружены данные для 5000 материалов.

Датасет содержит следующие поля:

- bulk_modulus_vrh — средневзвешенный объемный модуль упругости по правилу Voigt-Reuss-Hill (целевой признак - прогнозируемая величина).

- composition — химический состав материала.

- formula — упрощенная химическая формула.

- e_above_hull — энергия выше кривой устойчивости (мера термодинамической нестабильности).

- structure — полное описание кристаллической структуры материала.

- density — плотность материала.

- volume — объем ячейки кристалла (не всегда данная ячейка является элементарной).

- nelements - количество элементов в формуле.

- elements - обозначение элементов.

- symmetry - информация о симметрии, очень важный признак.

Пример работы с базой Materials Project
Пример работы с базой Materials Project

Для дальнейшего анализа отобраны 1000 материалов, у которых были доступны все необходимые данные, включая рассчитанный объемный модуль упругости bulk_modulus.

Формирование признаков кристаллической структуры

После загрузки нужно сформировать датафрейм, записать каждое поле в отдельности.

Пример начала формирования датафрейма
Пример начала формирования датафрейма

Для прогнозирования модуля упругости (например, модуля Юнга или объемного модуля) из кристаллической структуры целесообразно оставить те параметры, которые могут напрямую или косвенно влиять на механические свойства материала. Эти параметры описывают геометрию кристаллической решетки, межатомные расстояния и природу атомов в структуре.

Ниже перечислены мои начальные предположения по признакам. По итогу углубления в проект не все признаки окажутся полезными. Для датасаентиста это нормально, т.е. часто приходится работать даже с обезличенными признаками. Но для материаловеда разумно будет в самом начале оценить полезность признаков, понимая их смысл. Так что потихоньку вникаем в специфику материаловедческого направления, заранее не пугаемся).

Только из данных по структуре удалось создать 59 новых признаков,

Элементы, которые можно включить в DataFrame:

a, b, c — длины векторов решетки.

alpha, beta, gamma — углы между векторами решетки.

volume — объем элементарной ячейки.

pbc — периодические граничные условия.

composition — химический состав (формула материала).

atomic positions — атомные позиции (дробные координаты атомов в решетке)

Отдельные признаки структуры:

'lattice_a', 'lattice_b', 'lattice_c' — длины векторов решетки.

'angle_alpha', 'angle_beta', 'angle_gamma'  — углы между векторами решетки.

'cell_volume' — объем элементарной ячейки.

'pbc_a', 'pbc_b', 'pbc_c' — периодические граничные условия.

'count_atoms' — количество атомов в структуре.

При использовании абсолютных координат образовано несколько групп признаков.

Признаки агрегации атомных позиций:

'atom_coord_cart_mean_x',

'atom_coord_cart_mean_y', 'atom_coord_cart_mean_z',

'atom_coord_cart_std_x', 'atom_coord_cart_std_y',

'atom_coord_cart_std_z', 'atom_coord_cart_min_x',

'atom_coord_cart_min_y', 'atom_coord_cart_min_z',

'atom_coord_cart_max_x', 'atom_coord_cart_max_y',

'atom_coord_cart_max_z',

Когда количество атомов в структуре может варьироваться (в нашем датасете вплоть до 80 атомов), важно грамотно структурировать данные для модели машинного обучения. Поскольку модели машинного обучения обычно требуют фиксированного количества фичей, а количество атомов в структурах варьируется, нужно искать способ обобщить атомные позиции, сохранив при этом ключевую информацию о структуре.

Применим несколько стратегий, как можно разбить данные о атомных позициях для модели машинного обучения, когда количество атомов в структуре может быть разным:

1. Агрегация атомных позиций (статистические показатели)

Один из подходов заключается в том, чтобы агрегировать атомные позиции и извлечь полезные статистические признаки.

Пример фичей:

Среднее значение координат по каждому направлению:

mean_x, mean_y, mean_z — средние координаты атомов по каждой оси.

Стандартное отклонение координат:

std_x, std_y, std_z — стандартные отклонения координат атомов по осям x, y, z.

Минимальные и максимальные значения координат:

min_x, max_x, min_y, max_y, min_z, max_z — минимальные и максимальные координаты атомов по каждой оси.

Среднее межатомное расстояние: Среднее расстояние между атомами.

Метод агрегации атомных позиций в виде расчета статистических показателей (среднее значение, стандартное отклонение и т.д.) не подходит напрямую для дробных координат, потому что дробные координаты атомов зависят от параметров решетки, которые могут варьироваться между разными структурами. Дробные координаты представляют атомы в относительных единицах внутри элементарной ячейки, а не в абсолютных единицах расстояния.

Почему дробные координаты не подходят для агрегации:

Дробные координаты (x frac, y frac​ ,z frac) указывают положение атома в долях векторов решетки a, b, и c, но не дают информации об абсолютных расстояниях между атомами.

Дробные координаты могут быть полезны для описания симметрии внутри элементарной ячейки, но для корректного расчета таких характеристик, как межатомные расстояния или плотность распределения атомов, их нужно преобразовать в картезианские координаты (абсолютные координаты в ангстремах).

Почему важны абсолютные координаты:

В абсолютных координатах атомные позиции представлены в абсолютных единицах (например, в ангстремах), и можно проводить агрегацию (например, вычисление среднего, стандартного отклонения, минимальных и максимальных координат) для всех атомов.

Абсолютные координаты позволяют правильно вычислять геометрические характеристики структуры, такие как межатомные расстояния, среднюю плотность атомов и объем структуры.

Признаки межатомных расстояний:

'interatomic_distance_avg',

'interatomic_distance_std', 'interatomic_distance_min',

'interatomic_distance_max', 'atom_coord_relative_mean_x',

Описание последовательности расчёта

1. positions[:, np.newaxis] и positions[np.newaxis, :]

positions — это массив, представляющий собой координаты атомов. Размерность этого массива обычно (n_atoms, 3), где n_atoms — количество атомов в структуре, а 3 — это три координаты x, y, z для каждого атома.

positions[:, np.newaxis] — добавление новой оси в массив с координатами. Это превращает массив размером (n_atoms, 3) в массив размером (n_atoms, 1, 3).

positions[np.newaxis, :] — добавление новой оси перед первым измерением. Это преобразует массив в массив размером (1, n_atoms, 3).

2. positions[:, np.newaxis] - positions[np.newaxis, :]

Здесь происходит вычитание массивов с координатами атомов. Благодаря добавлению новых осей, это создает массив, где каждый атом сравнивается со всеми остальными.

В результате вычитания получаем массив размером (n_atoms, n_atoms, 3), где каждая пара атомов имеет разницу в координатах x, y, z. То есть каждый элемент этого массива представляет собой вектор, соединяющий два атома в пространстве.

3. (positions[:, np.newaxis] - positions[np.newaxis, :]) ** 2

Теперь мы возводим разницу в координатах для каждой пары атомов в квадрат. Это подготовка к вычислению евклидова расстояния по формуле:

-4

Возведение в квадрат каждой разницы

x, y, и z — это часть этой формулы.

4. np.sum(..., axis=-1)

np.sum(..., axis=-1) — вычисляет сумму квадратов разностей по последнему измерению (вдоль оси, отвечающей за координаты x, y, z). Это сворачивает трехмерные векторы в одно число, представляющее сумму квадратов расстояний между атомами.

После этого шага мы получаем массив размером (n_atoms, n_atoms), где каждый элемент — это сумма квадратов разностей координат для соответствующей пары атомов.

5. np.sqrt(...)

np.sqrt(...) — вычисляет квадратный корень из суммы квадратов разностей. Это даёт евклидово расстояние между каждой парой атомов. Теперь массив (n_atoms, n_atoms) содержит все межатомные расстояния.

6. np.triu_indices_from(distances, k=1)

np.triu_indices_from(distances, k=1) — извлекает индексы элементов верхнего треугольника матрицы distances (без диагонали). Это нужно, потому что матрица расстояний симметрична, и расстояние между атомом A и атомом B такое же, как между атомом B и атомом A, а на диагонали — нули, так как расстояние между атомом и самим собой равно нулю.

Этот шаг убирает дублирующиеся значения и оставляет только уникальные пары атомов.

7. np.mean(distances[np.triu_indices_from(distances, k=1)])

np.mean(...) — вычисляет среднее значение всех уникальных межатомных расстояний. Это среднее межатомное расстояние между атомами в структуре.

Итог:

distances = np.sqrt(np.sum((positions[:, np.newaxis] - positions[np.newaxis, :]) ** 2, axis=-1)): Этот шаг вычисляет евклидовы расстояния между всеми парами атомов в структуре.

mean_distance = np.mean(distances[np.triu_indices_from(distances, k=1)]): Этот шаг извлекает уникальные межатомные расстояния (с помощью верхнего треугольника матрицы расстояний) и вычисляет их среднее значение.

Это полезный показатель, так как среднее межатомное расстояние может быть важной характеристикой структуры материала и использоваться как фича для предсказания различных свойств.

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

Почему дробные координаты нельзя использовать напрямую:

Дробные координаты — это координаты атомов в относительных единицах относительно векторов решетки. Они показывают, где находится атом по отношению к граням элементарной ячейки, но не дают информацию об абсолютных расстояниях между атомами.

Без преобразования в абсолютные координаты, мы не сможем корректно вычислить межатомные расстояния, поскольку дробные координаты зависят от формы и размеров решетки (векторов a, b, и c).

Признаки относительно центра масс:

'atom_coord_relative_mean_y', 'atom_coord_relative_mean_z',

'atom_coord_relative_std_x', 'atom_coord_relative_std_y',

'atom_coord_relative_std_z', 'atom_coord_relative_min_x',

'atom_coord_relative_min_y', 'atom_coord_relative_min_z',

'atom_coord_relative_max_x', 'atom_coord_relative_max_y',

'atom_coord_relative_max_z', 'atom_coord_frac_mean_x',

Можно использовать центр масс структуры как референсную точку и извлечь фичи, связанные с относительными позициями атомов относительно этого центра.

1. Вычисляем центр масс структуры.

2. Вычисляем относительные координаты атомов (разница между координатами атомов и координатами центра масс).

3. Вычисляем такие показатели, как средние, минимальные, максимальные и стандартные отклонения относительных координат.

Пример фичей:

Средние относительные координаты по каждой оси.

Стандартные отклонения и максимальные/минимальные значения относительных координат.

Признаки агрегации дробных координат:

'atom_coord_frac_mean_y', 'atom_coord_frac_mean_z',

'atom_coord_frac_std_x', 'atom_coord_frac_std_y',

'atom_coord_frac_std_z', 'atom_coord_frac_min_x',

'atom_coord_frac_min_y', 'atom_coord_frac_min_z',

'atom_coord_frac_max_x', 'atom_coord_frac_max_y',

'atom_coord_frac_max_z',

Используем агрегационные статистики для дробных координат, чтобы описать относительное распределение атомов в элементарной ячейке.

Этот метод применим для анализа регулярности и симметрии атомов внутри элементарной ячейки. Он может дать представление о том, как атомы распределены относительно кристаллической решетки.

Для абсолютных расчетов (таких как межатомные расстояния) — дробные координаты не подходят.

Для относительных расчетов (таких как симметрия или распределение атомов внутри элементарной ячейки) — дробные координаты подходят.

Признаки на основе координационных чисел:

'coord_numb_mean', 'coord_numb_std',

'coord_numb_min', 'coord_numb_max'

Некоторые исследования показали, что такие характеристики кристаллической структуры, как координационные числа и межатомные расстояния, могут быть сильными предикторами механических свойств, включая модуль Юнга, особенно для материалов с сильно различающимися кристаллическими структурами и типами химических связей.

Координационные числа предоставляют важную информацию о локальной атомной среде каждого атома в кристаллической структуре, что напрямую влияет на механические свойства материала.

Координационное число отражает количество ближайших соседей у каждого атома. Это дает представление о том, насколько плотно упакованы атомы в структуре.

Более высокие координационные числа обычно указывают на более плотную упаковку и сильные межатомные взаимодействия, что может приводить к более высоким модулям упругости.

Для вычисления комплексных чисел рекомендуется использовать проверенные методы (например, Voronoi анализ).

В сложных кристаллических структурах с многими типами атомов координационные числа могут варьироваться для разных атомов, что усложняет прямую интерпретацию их влияния на модуль упругости. В таких случаях важно агрегировать координационные числа (например, средние значения или стандартные отклонения).

Хотя координационное число важно, оно не единственный фактор, определяющий модуль упругости. Например, материалы с одинаковыми координационными числами могут иметь разные типы химических связей (ковалентные, ионные, металлические), что сильно влияет на механические свойства.

Поскольку данный проект носит исследовательский характер, первоначальная задача заключалась в получении максимального числа признаков, в качестве ознакомления.

На текущем этапе пока не ясно, какие из признаков оставим, а какие придётся отсеять. Это будем определять позже, при анализе влияния фич на целевой параметр - прогнозируемую величину.

Различные методы, такие как VoronoiNN и CrystalNN, могут давать разные результаты для координационных чисел, и это связано с их внутренними алгоритмами, которые используют разные подходы для определения ближайших соседей атомов в структуре. Разберемся, в чем причина таких расхождений и как с этим можно работать.

Основные различия между методами

1. VoronoiNN:

- Алгоритм: Метод основан на разбиении Вороного, который создает многогранники вокруг каждого атома на основе их положения в пространстве. Атомы считаются ближайшими соседями, если они принадлежат одной грани многоугольника Вороного.

- Особенности: Метод полностью основан на геометрии. Он определяет соседей исходя из того, как атомы делят пространство между собой. Метод не учитывает типы атомов, химические связи или другие физические свойства.

- Чувствительность: VoronoiNN может быть чувствителен к небольшим флуктуациям в атомных позициях, что может приводить к "патологическим" результатам в структурах с высокой асимметрией или необычной упаковкой.

2. CrystalNN:

- Алгоритм: CrystalNN — это метод, который использует комбинацию геометрических и химических факторов для определения соседей. Он учитывает межатомные расстояния, тип связи, а также другие аспекты, такие как атомная масса и заряд.

- Особенности: Этот метод лучше учитывает химическое окружение атомов, поэтому он может быть более точным для сложных структур, где геометрия не является единственным фактором, влияющим на координационные числа.

- Чувствительность: Этот метод более устойчив к геометрическим флуктуациям, так как учитывает химию связей.

Причины расхождений

1. Геометрия против химии:

- VoronoiNN рассматривает только геометрию структуры, тогда как CrystalNN учитывает не только геометрию, но и химические свойства атомов и их связи. Если в вашей структуре важную роль играют химические связи (например, ковалентные или ионные), результаты CrystalNN будут более точными и физически обоснованными.

2. Неоднородная упаковка:

- Если атомы в вашей структуре распределены неоднородно или имеются значительные различия в межатомных расстояниях, VoronoiNN может считать некоторые атомы ближайшими соседями на основе разбиения пространства, в то время как CrystalNN может исключить такие атомы из числа соседей на основе химии и межатомных расстояний.

3. Патологические результаты Вороного:

- В некоторых структурах (особенно при наличии нестандартных кристаллических систем или высоких степеней асимметрии) VoronoiNN может давать "патологические" результаты, когда атомы оказываются в неожиданных соседях. Это связано с тем, что грани многоугольников Вороного могут быть слишком малы или слишком вытянуты. В таких случаях **CrystalNN** будет давать более устойчивый результат.

Какой метод использовать?

1. Если структура симметрична и геометрически регулярна (например, металлы или кубические кристаллы), оба метода могут давать схожие результаты. VoronoiNN может быть быстрее и достаточно точен.

2. Если структура сложная (например, ионные кристаллы, оксиды, неорганические соединения) и важна химическая природа связей, лучше использовать CrystalNN, так как этот метод учитывает химию и физические свойства атомов.

Что делать, если результаты сильно различаются?

1. Проанализируйте тип структуры:

- Если у вас структура с сильно различными атомами (например, различные химические элементы с разными типами связей), используйте CrystalNN, так как этот метод более подходит для таких задач.

2. Используйте дополнительные параметры в VoronoiNN:

- Если вы хотите использовать VoronoiNN, но получить более стабильные результаты, попробуйте добавить параметр allow_pathological=True, чтобы обработать возможные патологии разбиения Вороного.

3. Проверьте межатомные расстояния:

- Рассчитайте межатомные расстояния и проанализируйте, какие атомы VoronoiNN и CrystalNN считают соседями. Это поможет понять, на чем основываются различия в результатах. Используйте `structure.get_neighbors()` для этого.

4. Анализируйте оба результата:

- В некоторых случаях может быть полезно рассмотреть оба метода, особенно если структура нетипичная. Можно использовать как геометрическое определение соседей (VoronoiNN), так и химическое окружение (CrystalNN), чтобы получить более полную картину.

Итог:

- VoronoiNN использует только геометрию для определения соседей, что может быть полезно для простых структур, но в сложных кристаллах или системах с неравномерной упаковкой этот метод может давать результаты, которые не отражают химические связи.

- CrystalNN является более надежным методом для сложных структур, так как учитывает химию атомов и межатомные расстояния.

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

Необходимо отметить что структура, представленная в Structure объектах (таких как те, которые используются в pymatgen), содержит геометрическую информацию о расположении атомов (координаты атомов, параметры решетки), но не включает явную информацию о типах химических связей между атомами.

Описание работы CrystalNN:

CrystalNN использует алгоритм, который оценивает координационное число, комбинируя геометрическую информацию (такие как межатомные расстояния) и химическую информацию, такую как типы атомов. Важно понимать, что CrystalNN не имеет прямого доступа к информации о конкретных химических связях в виде явных данных о типах связей, таких как ковалентные или ионные. Однако он учитывает химические свойства атомов через их атомные номера, типы и относительные расстояния.

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

Если атомы расположены близко друг к другу, и это элементы, которые обычно формируют связи в реальных материалах, CrystalNN может включить такие атомы в координационную среду.

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

Как CrystalNN учитывает химию:

Хотя CrystalNN не получает явной информации о типах химических связей, оно использует информацию о химических элементах, их атомных номерах, радиусах и других свойствах, чтобы лучше предсказать их взаимодействия в структуре. Это достигается через:

Эмпирические данные: Основываясь на известных химических свойствах элементов и их типичных межатомных расстояниях, CrystalNN может корректнее предсказывать ближайших соседей для разных типов атомов.

Типичные координации: CrystalNN обучено распознавать типичные координации для различных химических элементов, основываясь на эмпирических данных о реальных структурах.

Почему могут быть различия между CrystalNN и VoronoiNN:

VoronoiNN основывается исключительно на геометрии (разбиение Вороного), где соседями считаются атомы, находящиеся в тех же полиэдрах Вороного.

CrystalNN, в отличие от Voronoi, пытается учесть химическую природу атомов (по их атомным номерам) и, в дополнение к геометрии, использует различные эмпирические знания о типичных координациях элементов, чтобы предсказать их ближайших соседей.

Пример:

В приведенной структуре (с атомами серебра, азота и кислорода) VoronoiNN будет определять ближайших соседей только на основе пространственного распределения атомов (разбиение Вороного), не учитывая химическую природу атомов. CrystalNN, с другой стороны, будет учитывать, что, например, Ag (серебро) имеет свои типичные координационные числа и связи, которые отличаются от координаций для O (кислород) и N (азот). Оно может исключить некоторые из соседей, если они химически не имеют смысла, даже если они ближе в пространственном расположении.

Принято решение в дальнейшей обработке датафрейма использовать метод CrystalNN

Обработка признака composition (Химический состав материала) и formula

Можно преобразовать химическую формулу в числовые признаки на основе физических и химических свойств элементов. Например:

Атомная масса (atomic mass)

Электроотрицательность (electronegativity)

Радиус атома (atomic radius)

Ионный радиус (ionic radius)

Для этого можно взять сумму или среднее этих свойств по каждому элементу в составе.

Пример:

Для формулы Ac₂ Ag₁ Ir₁ можно рассчитать:

Суммарная атомная масса:

2 × атомная масса Ac + 1 × атомная масса Ag + 1 × атомная масса Ir

Средняя электроотрицательность:

(2 × электроотрицательность Ac + 1 × электроотрицательность Ag +

1 × электроотрицательность Ir) / 4

Подготовлен вспомогательный датафрейм df_atomic_mass с указанием атомной массы для каждого элемента таблицы Менделеева.

Созданы вспомогательные признаки:

sum_atomic_mass- суммарная атомная массы для каждой структуры

norm_atomic_mass - нормированная суммарная атомная массы для каждой структуры

Каждый из них позволяет отражать химсостав одним числом.

Кроме того применено  OneHot кодирование для создания 119 новых признаков по наличию всех элементов

Признаки в итоговом датасете

Общие признаки структуры:

'point_group_tgs' - точечная группа симметрии

'symbol_pgs' - пространственная группа симметрии

'crystal_system_syngony' - сингония

'e_above_hull' — энергия выше кривой устойчивости

'density' — плотность материала

'cell_volume' — объем элементарной ячейки кристалла

'count_atoms' — количество атомов в структуре

'lattice_a', 'lattice_b', 'lattice_c', — длины векторов решетки

'angle_alpha', 'angle_beta', 'angle_gamma'  — углы между векторами решетки

'pbc_a', 'pbc_b', 'pbc_c' — периодические граничные условия

'sum_atomic_mass' — суммарная атомная массы структуры

'norm_atomic_mass' — нормированная суммарная атомная массы структуры

Признаки картезианских атомных координат:

'atom_coord_cart_mean_x', 'atom_coord_cart_mean_y', 'atom_coord_cart_mean_z', 'atom_coord_cart_std_x',   'atom_coord_cart_std_y', 'atom_coord_cart_std_z', 'atom_coord_cart_min_x', 'atom_coord_cart_min_y',   'atom_coord_cart_min_z', 'atom_coord_cart_max_x', 'atom_coord_cart_max_y', 'atom_coord_cart_max_z',

Признаки межатомных расстояний:

'interatomic_distance_avg' - среднее межатомное расстояние

'interatomic_distance_std' - стандартное отклонение межатомного расстояния

Минимальное и максимальное межатомное расстояние:

'interatomic_distance_min', 'interatomic_distance_max'

Относительные межатомные расстояния относительно центра масс:

'atom_coord_relative_mean_x', 'atom_coord_relative_mean_y', 'atom_coord_relative_mean_z',

'atom_coord_relative_std_x', 'atom_coord_relative_std_y', 'atom_coord_relative_std_z',

'atom_coord_relative_min_x', 'atom_coord_relative_min_y', 'atom_coord_relative_min_z',

'atom_coord_relative_max_x', 'atom_coord_relative_max_y', 'atom_coord_relative_max_z'

Признаки агрегации дробных координат:

'atom_coord_frac_mean_x', 'atom_coord_frac_mean_y', 'atom_coord_frac_mean_z', 'atom_coord_frac_std_x',   'atom_coord_frac_std_y', 'atom_coord_frac_std_z', 'atom_coord_frac_min_x', 'atom_coord_frac_min_y',   'atom_coord_frac_min_z', 'atom_coord_frac_max_x', 'atom_coord_frac_max_y', 'atom_coord_frac_max_z'

Признаки координационных чисел в структуре:

'coord_numb_mean', 'coord_numb_std', 'coord_numb_min', 'coord_numb_max'

Количество атомов химэлементов в структуре:

'El_1', 'El_2', 'El_3', 'El_4', 'El_5', 'El_6', 'El_7', 'El_8', 'El_9', 'El_10', 'El_11', 'El_12', 'El_13', 'El_14', 'El_15', 'El_16', 'El_17', 'El_18', 'El_19', 'El_20', 'El_21', 'El_22', 'El_23', 'El_24', 'El_25', 'El_26', 'El_27', 'El_28', 'El_29', 'El_30', 'El_31', 'El_32', 'El_33', 'El_34', 'El_35', 'El_36', 'El_37', 'El_38', 'El_39', 'El_40', 'El_41', 'El_42', 'El_43', 'El_44', 'El_45', 'El_46', 'El_47', 'El_48', 'El_49', 'El_50', 'El_51', 'El_52', 'El_53', 'El_54', 'El_55', 'El_56', 'El_57', 'El_58', 'El_59', 'El_60', 'El_61', 'El_62', 'El_63', 'El_64', 'El_65', 'El_66', 'El_67', 'El_68', 'El_69', 'El_70', 'El_71', 'El_72', 'El_73', 'El_74', 'El_75', 'El_76', 'El_77', 'El_78', 'El_79', 'El_80', 'El_81', 'El_82', 'El_83', 'El_84', 'El_85', 'El_86', 'El_87', 'El_88', 'El_89', 'El_90', 'El_91', 'El_92', 'El_93', 'El_94', 'El_95', 'El_96', 'El_97', 'El_98', 'El_99', 'El_100', 'El_101', 'El_102', 'El_103', 'El_104', 'El_105', 'El_106', 'El_107', 'El_108', 'El_109', 'El_110', 'El_111', 'El_112', 'El_113', 'El_114', 'El_115', 'El_116', 'El_117', 'El_118', 'El_119',

'bulk_modulus_vrh' - целевой признак - прогнозируемая величина, объемный модуль упругости

Признак cell_volume может означать объём не только элементарной ячейки, но и объём суперячейки. Поэтому данный признак использовать мы не можем. Но целесообразно привести объём к какому-то одному измерению. В нашем случае будет правильным привести объём ячейки на количество атомов в данной ячейке. Получим приведенный объём ячейки на один атом.

Анализ данных

Даже если данные взяты из уважаемой и авторитетной базы данных, как Materials Project, анализ выбросов, пропусков и дубликатов — это важный шаг для обеспечения чистоты и качества данных перед построением модели.

Особенности анализа данных из базы Materials Project

Расчеты и ошибки моделирования: Данные в Materials Project основаны на моделировании (например, DFT), и поэтому могут содержать численные ошибки или неточные расчеты. Некоторые параметры могут быть предсказаны неточно или некорректно (например, отрицательный объемный модуль).

Неоднородность данных: Различные материалы могут иметь сильно различающиеся физические и химические свойства, что может приводить к неоднородности распределения признаков. Это еще одна причина проводить анализ выбросов.

Анализ редких случаев: Некоторые записи в данных могут быть редкими материалами с уникальными свойствами, которые сильно отличаются от других материалов в датасете. Такие материалы можно обрабатывать отдельно, чтобы не влиять на общую модель.

В рамках анализа выбросов найдены отрицательные значения для bulk_modulus_vrh (средневзвешенного объемного модуля с использованием правила Voigt-Reuss-Hill) которые являются необычными и физически не интерпретируемыми, поскольку объемный модуль должен быть положительным. Принято решение удалить примеры с отрицательным значением и с нулевым значением bulk_modulus_vrh

Также удалены примеры с выбросами bulk_modulus_vrh более чем 500 ГПа.

Диаграмма распределения прогнозируемой величины после удаления выбросов
Диаграмма распределения прогнозируемой величины после удаления выбросов

Физические ограничения:

Максимальные известные значения объемного модуля упругости для материалов на сегодняшний день не превышают 462 ГПа.

Алмаз и осмий, одни из самых жестких и несжимаемых материалов, имеют объемный модуль упругости около 442 ГПа и 462 ГПа соответственно.

Кубический нитрид бора (c-BN) и лонсдейлит (гексагональный алмаз) также имеют значения около 400–450 ГПа.

Проведен анализ дубликатов и пропусков.

Обнаружено, что признак e_above_hull содержит только 0 значения. Можно выгрузить другие примеры материалов с заполненными значениями признака. Но по рекомендации от куратора в данном признаке нет необходимости. Т.к. при реальном прогнозе для нового материала его расчёт белее трудоемкий, чем расчёт модуля упругости. Поэтому удаляем лишнее поле.

Принято решение удалить признаки количества элементов El_01, El_02 и т.д., которые не содержат положительных значений. Да, теоретически, формула при новом запросе на прогноз может быть любой. Но конкретно для нашей учебной задачи, где датафрейм не превышает 1000 строк, решение удалить поля не содержащие данных - правильное. Это поможет оптимизировать модель, улучшить ее производительность и интерпретируемость.

В рамках проверки на мультиколлиниарность удалён один из признаков в каждой паре, с взаимной зависимостью более 0.9.

Поскольку и atom_coord_cart_std и atom_coord_relative являются производными от картезианских декартовых координат, то отчасти они дублируют друг друга. В итоге принято решение удалить признаки:

'angle_beta',

'atom_coord_relative_std_x', 'atom_coord_relative_std_y', 'atom_coord_relative_std_z',

'atom_coord_relative_min_x', 'atom_coord_relative_min_y', 'atom_coord_relative_min_z',

'atom_coord_relative_max_x', 'atom_coord_relative_max_y', 'atom_coord_relative_max_z',

'coord_numb_min', 'cell_volume', 'interatomic_distance_std', 'interatomic_distance_max'.

В итоге получен окончательно сформированный датафрейм, который готов к разбивке на train и test.

Разбивка данных на тренировочные и тестовые

Сформированный датафрейм разбит данных на train и test в соотношении 4:1.

Получены датафреймы:

data_features_train, data_features_test,

data_target_train, data_target_test

Целевой признак (прогнозируемая величина) bulk_modulus_vrh - объемный модуль упругости.

Модель CatBoost

CatBoost  — это алгоритм градиентного бустинга на решающих деревьях, разработанный компанией Яндекс. В нашем случае, используем его для решения задачи регрессии.

-6

R² модели через кросс-валидацию 0.6798

Методом GridSearchCV подобраны наилучшие параметры модели по характеристике MAE.

Для наилучших параметров модели (n_estimators=500, depth=4) удалось достичь наилучшего результата

R² на выборке test: 0.79

MAE test: 20.522144600739978

RMSE test: 33.716178553248625

Модель LightGBM

Модель LightGBM от компании Microsoft подходит для нашего проекта, и может быть эффективно использована для прогнозирования свойств материалов. LightGBM (Light Gradient Boosting Machine) — это высокопроизводительный фреймворк градиентного бустинга, который особенно хорошо работает с табличными данными, и способен обрабатывать большие объемы данных с высокой скоростью и точностью.

LightGBM может быть настроен для работы с данными, содержащими выбросы и несбалансированные распределения, что актуально в нашем случае.

-7

В модели LightGBM гиперпараметр n_estimators (или его аналог num_boost_round) задаёт число итераций (бустингов), которые модель выполнит для построения деревьев решений. Проще говоря, это количество слабых моделей (деревьев), которые будут объединены в итоговую модель.

- 100 итераций бустинга: Модель создаёт 100 деревьев решений, каждое из которых корректирует ошибки предыдущих.

- Контроль сложности модели: Большее значение n_estimators позволяет модели быть более сложной и лучше подстраиваться под данные, но также увеличивает риск переобучения.

- Влияние на время обучения: Увеличение n_estimators увеличивает время обучения, так как каждое дерево требует ресурсов для построения.

R2 модели через кросс-валидацию 0.7759

Методом GridSearchCV подобраны наилучшие параметры модели по характеристике MAE.

Для наилучших параметров модели ('max_depth': 10, 'metric': 'mae', 'n_estimators': 100,)

удалось достичь наилучшего результата R² на выборке test: 0.8

MAE на выборке test: 20.8032

RMSE на выборке test: 32.3363

Модель GradientBoostingRegressor Градиентный бустинг

GradientBoostingRegressor — это алгоритм градиентного бустинга для решения задач регрессии, реализованный в библиотеке scikit-learn. Он объединяет множество слабых моделей (обычно решающих деревьев) в мощный ансамбль, который последовательно улучшает свои предсказания, минимизируя заданную функцию потерь.

Методом GridSearchCV подобраны наилучшие параметры модели по характеристике MAE.

Для наилучших параметров модели ('learning_rate': 0.05, 'max_depth': 4, 'max_features': 'sqrt', 'n_estimators': 500, 'subsample': 0.8)

удалось достичь наилучшего результата R² на выборке test: 0.8289

MAE на выборке test: 20.1131

RMSE на выборке test: 30.5019

Общие выводы по проекту

Загрузка данных.

Из базы данных Materials Project выгружены данные для 5000 материалов.

Датасет содержал следующие поля:

- bulk_modulus_vrh — средневзвешенный объемный модуль упругости по правилу Voigt-Reuss-Hill (целевой признак - прогнозируемая величина).

- composition — химический состав материала.

- formula — упрощенная химическая формула.

- e_above_hull — энергия выше кривой устойчивости (мера термодинамической нестабильности).

- structure — полное описание кристаллической структуры материала.

- density — плотность материала.

- volume — объем ячейки кристалла (не всегда данная ячейка является элементарной).

- nelements - количество элементов в формуле

- elements - обозначение элементов

- symmetry - информация о симметрии, очень важный признак

Для дальнейшего анализа отобраны 1000 материалов, у которых были доступны все необходимые данные, включая рассчитанный объемный модуль упругости bulk_modulus.

Формирование новых признаков из данных по структуре.

Из данных по структуре удалось создать 59 новых признаков,

- Отдельные признаки структуры::

'lattice_a', 'lattice_b', 'lattice_c' — длины векторов решетки.

'angle_alpha', 'angle_beta', 'angle_gamma' — углы между векторами решетки.

'cell_volume' — объем элементарной ячейки.

'pbc_a', 'pbc_b', 'pbc_c' — периодические граничные условия.

'count_atoms' — количество атомов в структуре.

- Картезианские координаты (абсолютные):

- Статистические характеристики::

'atom_coord_cart_mean_x', 'atom_coord_cart_mean_y', 'atom_coord_cart_mean_z',

'atom_coord_cart_std_x', 'atom_coord_cart_std_y', 'atom_coord_cart_std_z',

'atom_coord_cart_min_x', 'atom_coord_cart_min_y', 'atom_coord_cart_min_z',

'atom_coord_cart_max_x', 'atom_coord_cart_max_y', 'atom_coord_cart_max_z',

- Признаки агрегации дробных координат:

- Статистические характеристики::

'atom_coord_frac_mean_x', 'atom_coord_frac_mean_y', 'atom_coord_frac_mean_z',

'atom_coord_frac_std_x', 'atom_coord_frac_std_y', 'atom_coord_frac_std_z',

'atom_coord_frac_min_x', 'atom_coord_frac_min_y', 'atom_coord_frac_min_z',

'atom_coord_frac_max_x', 'atom_coord_frac_max_y', 'atom_coord_frac_max_z',

- Координаты относительно центра масс:

- Признаки, описывающие положение атомов относительно центра масс структуры.

'atom_coord_relative_mean_x','atom_coord_relative_mean_y', 'atom_coord_relative_mean_z',

'atom_coord_relative_std_x', 'atom_coord_relative_std_y', 'atom_coord_relative_std_z', 'atom_coord_relative_min_x', 'atom_coord_relative_min_y', 'atom_coord_relative_min_z',

'atom_coord_relative_max_x', 'atom_coord_relative_max_y', 'atom_coord_relative_max_z',

- Признаки межатомных расстояний:

'interatomic_distance_avg', 'interatomic_distance_std',

'interatomic_distance_min', 'interatomic_distance_max',

- Признаки на основе координационных чисел:

'coord_numb_mean', 'coord_numb_std',

'coord_numb_min', 'coord_numb_max'

Обоснование создания признаков:

Эти признаки были сформированы для более полного описания геометрии и топологии кристаллической структуры, что может существенно влиять на механические свойства материалов, включая объемный модуль упругости. Использование статистических характеристик координат и межатомных расстояний позволяет моделировать структурные особенности материалов.

Поскольку данный проект носит исследовательский характер, первоначальная задача заключалась в получении максимального числа признаков, в качестве ознакомления.

На текущем этапе пока не ясно, какие из признаков оставим, а какие придётся отсеять. Это будем определять позже, при анализе влияния фич на целевой параметр.

Формирование признаков на основе данных composition

Подготовлен вспомогательный датафрейм df_atomic_mass с указанием атомной массы для каждого элемента таблицы Менделеева.

Созданы вспомогательные признаки:

sum_atomic_mass- суммарная атомная массы для каждой структуры

norm_atomic_mass - нормированная суммарная атомная массы для каждой структуры (например, средняя атомная масса на атом)

Каждый из них позволяет отражать химсостав одним числом.

Кроме того, применено OneHot кодирование для создания 119 новых признаков, отражающих количество атомов каждого элемента в материале.

Для каждого элемента был создан количественный признак El_{Z}, где {Z} — атомный номер элемента (от 1 до 119).

Количество атомов хим. элементов в структуре:

'El_1', 'El_2', 'El_3', 'El_4', 'El_5', 'El_6', 'El_7', 'El_8', 'El_9', 'El_10', 'El_11', 'El_12', 'El_13', 'El_14', 'El_15', 'El_16', 'El_17', 'El_18', 'El_19', 'El_20', 'El_21', 'El_22', 'El_23', 'El_24', 'El_25', 'El_26', 'El_27', 'El_28', 'El_29', 'El_30', 'El_31', 'El_32', 'El_33', 'El_34', 'El_35', 'El_36', 'El_37', 'El_38', 'El_39', 'El_40', 'El_41', 'El_42', 'El_43', 'El_44', 'El_45', 'El_46', 'El_47', 'El_48', 'El_49', 'El_50', 'El_51', 'El_52', 'El_53', 'El_54', 'El_55', 'El_56', 'El_57', 'El_58', 'El_59', 'El_60', 'El_61', 'El_62', 'El_63', 'El_64', 'El_65', 'El_66', 'El_67', 'El_68', 'El_69', 'El_70', 'El_71', 'El_72', 'El_73', 'El_74', 'El_75', 'El_76', 'El_77', 'El_78', 'El_79', 'El_80', 'El_81', 'El_82', 'El_83', 'El_84', 'El_85', 'El_86', 'El_87', 'El_88', 'El_89', 'El_90', 'El_91', 'El_92', 'El_93', 'El_94', 'El_95', 'El_96', 'El_97', 'El_98', 'El_99', 'El_100', 'El_101', 'El_102', 'El_103', 'El_104', 'El_105', 'El_106', 'El_107', 'El_108', 'El_109', 'El_110', 'El_111', 'El_112', 'El_113', 'El_114', 'El_115', 'El_116', 'El_117', 'El_118', 'El_119',

'bulk_modulus_vrh' - целевой признак, объемный модуль упругости.

Обоснование создания признаков:

Химический состав существенно влияет на физико-механические свойства материалов. Включение признаков, отражающих атомные массы и наличие конкретных элементов, позволяет модели учитывать влияние химического состава на объемный модуль упругости.

Проведен анализ сформированных данных.

В рамках анализа выбросов найдены отрицательные значения для bulk_modulus_vrh (средневзвешенного объемного модуля с использованием правила Voigt-Reuss-Hill) которые являются необычными и физически неинтерпретируемыми, поскольку объемный модуль должен быть положительным. Принято решение удалить примеры с отрицательным значением и с нулевым значением bulk_modulus_vrh

Также удалены примеры с выбросами bulk_modulus_vrh более чем 500 ГПа.

Физические ограничения:

Максимальные известные значения объемного модуля упругости для материалов на сегодняшний день не превышают 462 ГПа.

Алмаз и осмий, одни из самых жестких и несжимаемых материалов, имеют объемный модуль упругости около 442 ГПа и 462 ГПа соответственно.

Кубический нитрид бора (c-BN) и лонсдейлит (гексагональный алмаз) также имеют значения около 400–450 ГПа.

Проведен анализ дубликатов и пропусков.

Обнаружено, что признак e_above_hull содержит только 0 значения. Можно выгрузить другие примеры материалов с заполненными значениями признака. Но по рекомендации от куратора в данном признаке нет необходимости. Т.к. при реальном прогнозе для нового материала его расчёт белее трудоемкий, чем расчёт модуля упругости. Поэтому удаляем лишнее поле.

Принято решение удалить признаки количества элементов El_01, El_02 и т.д., которые не содержат положительных значений. Да, теоретически, формула при новом запросе на прогноз может быть любой. Но конкретно для нашей учебной задачи, где датафрейм не превышает 1000 строк, решение удалить поля не содержащие данных - правильное. Это поможет оптимизировать модель, улучшить ее производительность и интерпретируемость.

В рамках проверки на мультиколлиниарность удалён один из признаков в каждой паре, с взаимной зависимостью более 0.9.

Поскольку и atom_coord_cart_std и atom_coord_relative являются производными от картезианских декартовых координат, то отчасти они дублируют друг друга. В итоге принято решение удалить признаки 'atom_coord_cart_std_x', 'atom_coord_cart_std_y', 'atom_coord_cart_std_z'.

В итоге получен окончательно сформированный датафрейм, который готов к разбивке на train и test.

Сформированный датафрейм разбит данных на train и test в соотношении 4:1.

Получены датафреймы:

data_features_train, data_features_test,

data_target_train, data_target_test

Целевой признак bulk_modulus_vrh - объемный модуль упругости.

Модели машинного обучения

В рамках проекта, сформированные данные обработаны моделями CatBoost, LightGBM и GradientBoosting.

CatBoost — это алгоритм градиентного бустинга на решающих деревьях, разработанный компанией Яндекс. В нашем случае, используем его для решения задачи регрессии.

Проведена кросс-валидация с 5 фолдами для оценки стабильности модели.

Начальное значение R²: 0.6798

Методом GridSearchCV подобраны наилучшие параметры модели по характеристике MAE.

Для наилучших параметров модели (n_estimators=500, depth=4) удалось достичь наилучшего результата

R² на выборке test: 0.79

MAE на выборке test: 20.52 ГПа

RMSE на выборке test: 33.71 ГПа

Модель CatBoost показала хорошие результаты, но уступила другим моделям по метрикам.

Модель LightGBM от компании Microsoft подходит для нашего проекта, и может быть эффективно использована для прогнозирования свойств материалов. LightGBM (Light Gradient Boosting Machine) — это высокопроизводительный фреймворк градиентного бустинга, который особенно хорошо работает с табличными данными, и способен обрабатывать большие объемы данных с высокой скоростью и точностью.

R2 модели через кросс-валидацию 0.7759

Методом GridSearchCV подобраны наилучшие параметры модели по характеристике MAE.

Для наилучших параметров модели ('max_depth': 10, 'metric': 'mae', 'n_estimators': 100)

удалось достичь наилучшего результата R² на выборке test: 0.80

MAE на выборке test: 20.8032 ГПа

RMSE на выборке test: 32.3363 ГПа

LightGBM показал немного лучшие результаты, чем CatBoost, с небольшим улучшением по метрикам MAE и RMSE.

GradientBoostingRegressor — это алгоритм градиентного бустинга для решения задач регрессии, реализованный в библиотеке scikit-learn. Он объединяет множество слабых моделей (обычно решающих деревьев) в мощный ансамбль, который последовательно улучшает свои предсказания, минимизируя заданную функцию потерь.

Методом GridSearchCV подобраны наилучшие параметры модели по характеристике MAE.

Для наилучших параметров модели ('learning_rate': 0.05, 'max_depth': 4, 'max_features': 'sqrt', 'n_estimators': 500, 'subsample': 0.8)

удалось достичь наилучшего результата R² на выборке test: 0.8289

MAE на выборке test: 20.1131 ГПа

RMSE на выборке test: 30.5019 ГПа

Градиентный бустинг GradientBoostingRegressor показал лучшие результаты среди всех моделей, обеспечив наибольшее значение R² и наименьшие значения MAE и RMSE.

Сравнение моделей

-8

- GradientBoostingRegressor из scikit-learn показал наилучшие результаты на тестовой выборке.

- Различия между моделями незначительны, но могут быть важны в контексте практического применения.

- Возможные причины лучшей производительности GradientBoostingRegressor:

- Более точная настройка гиперпараметров.

- Особенности реализации алгоритма в scikit-learn.

Общие выводы и планы по улучшению проекта

В ходе проекта была разработана модель для прогнозирования объемного модуля упругости материалов на основе их структурных и химических характеристик. Были созданы и проанализированы различные признаки, проведена тщательная обработка данных и применены современные алгоритмы машинного обучения.

Ключевые результаты:

- Лучшие результаты показала модель GradientBoostingRegressor с R² = 0.83.

- Созданные признаки на основе структуры и состава материалов оказались информативными для модели.

- Удаление выбросов и коррелирующих признаков улучшило качество моделей.

Планы для дальнейших улучшений проекта:

- Расширение датасета:

- Собрать больше данных для повышения обобщающей способности модели.

- Дополнительные признаки:

- Возможно не все важные признаки были сформированы. Можно подумать в этом направлении.

- Улучшение моделей:

- Протестировать другие алгоритмы, такие как XGBoost.

- Применить ансамблирование моделей для улучшения точности.

- Валидация модели:

- Провести более детальную кросс-валидацию с использованием других стратегий разбиения.

- Оценить модель на независимом наборе данных.

Проект продемонстрировал эффективность использования моделей градиентного бустинга для прогнозирования свойств материалов. Полученные результаты могут быть полезны для разработки новых материалов с заданными механическими свойствами и дальнейшего развития методов машинного обучения в материаловедении.

В момент написания статьи решил, что стандартный датасаентистский код не буду вставлять в текст. И так статья сложно читается).

Ссылка на код проекта в GitHub

В следующей статье расскажу какие корректировки и замечания были получены и реализованы. В целом, основной посыл куратора был в том, что всё можно было сделать гораздо проще. Но честно говоря, мне было интересно пролопатить всё самому, чтобы узнать побольше. По факту, половина признаков оказались лишними). Ещё получил наводку на некоторые нюансы валидации ML моделей в материаловедении. С таким столкнулся впервые. Так что не пропустите - будет интересно!