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

Топливом для всех звезд является водород, простейший элемент периодической таблицы. В течение своей жизни звезда образует слои тяжелых элементов, начиная с гелия, затем углерода и т. д. Когда в ядре звезды заканчивается запас водорода или, технически говоря, в ядре начинает формироваться железо, звезда начинает коллапсировать. на себя из-за огромного гравитационного притяжения более тяжелых элементов в центре. При таком огромном давлении звезда может стать карликовой звездой, высоковращающейся нейтронной звездой или даже черной дырой. Конечно, основное отличие различных концов звезды зависит от ее размера. Чем он больше, тем драматичнее концовка. Набор данных, который у нас есть, предназначен для пульсара, который представляет собой форму нейтронной звезды, образовавшейся после того, как звезда в 2–3 раза больше нашего солнца [1] начала коллапсировать сама на себя. Обычно имеет очень высокую скорость вращения и очень маленький размер. Я оставляю дальнейшие исследования читателю, так как моей целью было зажечь огонь ;-)

Вернемся к делу. У нас есть набор данных из репозитория машинного обучения UCI [2], который имеет 8 функций и целевой класс, говорящий нам, является ли это пульсаром или нет. Давайте посмотрим на первые несколько строк данных.

Чтобы полностью понять, я рекомендую читателю прочитать [3], книгу о пульсарах. На странице 222 этой книги можно найти все формулы для этих 8 функций. Хорошая вещь с точки зрения машинного обучения (или, по крайней мере, для меня) заключается в том, что в наборе данных нет нулевых значений, а все функции являются непрерывными переменными (на ваш взгляд, фиктивными переменными).

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

Всегда рекомендуется видеть корреляцию признаков друг с другом, так как это может привести к избыточности или мультиколлинеарности в вашей модели, если признаки сильно коррелированы. Итак, первое, на что я хотел ответить, это посмотреть, насколько эти функции коррелируют друг с другом. Здесь все признаки непрерывны, поэтому подходила бы корреляция Пирсона, которая дает значения от -1 до 1. Когда корреляция близка к 1, признаки сильно положительно коррелированы, т. Е. Если увеличивается один, другой тоже увеличивается. Наоборот, если корреляция близка к -1, признаки имеют сильно отрицательную корреляцию. Корреляция, близкая к 0, означает, что признаки не коррелируют друг с другом.

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

Затем я провел тесты на нормальность для каждой из 8 функций, чтобы увидеть, нормально ли они распределяются, используя тест на нормальность библиотеки scipy [4]. К сожалению, ни один из них не имеет нормального распределения, что исключает возможность использования байесовской модели.

Хорошо, этого достаточно для понимания данных, давайте углубимся. Второй вопрос, на который я хотел ответить, заключался в том, чтобы увидеть влияние каждой функции на целевую переменную. Я сделал коробчатую диаграмму каждой функции с пульсаром и без него, чтобы увидеть, есть ли существенная разница между ними. Коробчатая диаграмма сообщает вам диапазон данных. Итак, здесь это означает, что если один из прямоугольников сдвинут вверх/вниз по сравнению с другим, это просто означает, что в среднем значение этой функции будет совершенно другим с пульсаром/без пульсара. 3 наиболее сдвинутых сюжета:

Давайте посмотрим на одну из функций слева Среднее значение интегрированного профиля. Большинство значений этой функции, когда есть пульсар, лежат между 100 и 125, а когда нет пульсара, значения лежат между 25 и 75. Но есть некоторые выбросы, представленные блок-точками, которые перекрываются, поэтому 1 функция никогда не бывает достаточной. чтобы полностью предсказать пульсар, но вместе эти особенности действительно могут дать нам наилучшее соответствие. Я построил диаграммы для всех функций, и вы можете сами убедиться в моем репозитории GitHub [5].

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

Хорошо, в этот момент я был готов начать строить модель. Я не удалял выбросы, потому что хотел посмотреть, как модель работает с выбросами, и это сработало на удивление хорошо. Окончательная точность, которую я получил на тестовом наборе от лучшей модели, составила 93%. Это означает, что наша модель способна обнаружить пульсар только по этим 8 функциям с вероятностью 93%. Что довольно хорошо, но я считаю, что это можно улучшить дальше.

Большое спасибо, если вы сделали это так далеко. Я не эксперт, я просто хотел внести свой вклад в сообщество и учиться в процессе. Любые отзывы или критика будут высоко оценены.

Мой репозиторий GitHub для этого анализа: https://github.com/Hariss096/detecting-pulsar