Статья содержит введение в данные НАСА Kepler Exoplanet Data, обзор того, как работает двоичный классификатор, и общее руководство по созданию многих моделей для прогнозирования экзопланет.

Космическая обсерватория Кеплера — это спутник, построенный НАСА, который был запущен в 2009 году. Телескоп предназначен для поиска экзопланет в звездных системах помимо нашей собственной, с конечной целью, возможно, найти другие обитаемые планеты помимо нашей собственной. Первоначальная миссия закончилась в 2013 году из-за механических поломок, но телескоп, тем не менее, работал с 2014 года в расширенной миссии «К2».

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

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

Чтобы ответить на эти вопросы, мы сначала создадим классификатор Binary-class, чтобы посмотреть, сможем ли мы предсказать экзопланеты самостоятельно.

Вы можете подумать, что нам нужна тяжелая, сложная техника, но нам просто нужен компьютер с установленным Python. Нам также нужен Jupyter Notebook (или Google Collab) для анализа данных и построения моделей.

Чтобы следить за всем процессом кодирования, посетите эту страницу github:

https://github.com/MahdiBoulila/Binary_Classifier/blob/main/Binary_Classifier_NASA_Kepler_Exoplanet.ipynb

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

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

Koi_disposition выглядит так, как указано на ярлыках («ПОДТВЕРЖДЕНО», «ЛОЖНОПОЛОЖИТЕЛЬНО»).
Чтобы проверить:

Затем мы должны внимательно посмотреть, какие столбцы содержат значения NaN. Мы решим этот вопрос позже.

9564 строки, но некоторые столбцы содержат меньше, то есть содержат значения NaN. Кроме того, мы можем определить, какие столбцы содержат числовые значения, а какие — строковые значения или то, что мы называем «категориями». Как вы, возможно, знаете, нам нужно разделить наши данные на два набора: категориальный и числовой, и применить некоторые преобразователи Scikit-learn. Алгоритмы машинного обучения, как правило, лучше работают с числами, поэтому нам нужно преобразовать категориальные атрибуты в числа с помощью 1hot-encoder (по сути, преобразование строк в двоичные строки, созданные исключительно из 0 и 1).

У нас есть хорошее представление о том, как выглядят наши данные. Теперь нам нужно разделить числовые и категориальные значения.

Описание того, что мы сделали:

Отбросьте метки с помощью df.drop("koi_disposition, axis = 1).
Соберите все имена столбцов, содержащие числовые значения, в num_attribs.
Соберите все имена столбцов, содержащие категориальные значения, в cat_attribs.

Это важный шаг. Поскольку мы будем создавать бинарный классификатор (также известный как алгоритм машинного обучения, который предсказывает, являются ли данные строки экзопланетой или нет), нам нужно иметь набор меток, содержащих истинные или ложные метки (1 или 0). Это изменит столбец «koi_disposition» в кадре данных на True или False.

Хорошее эмпирическое правило состоит в том, чтобы разделить 80% наших данных на обучающие данные, а оставшиеся 20% — на данные тестирования (или проверочный набор).

Далее будет применение преобразователей к нашим данным. Помните, мы хотели избавиться от значений NaN в нашем наборе данных и применить 1hot-энкодер для преобразования текстов в числа. Кроме того, еще одной хорошей привычкой в ​​науке о данных было бы масштабирование наших числовых значений: мы хотим обрабатывать все наши данные в одном и том же диапазоне (т.е. [0,1], вместо [-1,1], [0,9564], [ -255,256]…). Вместо того, чтобы применять преобразователи один за другим, мы поместим их все в конвейер, за которым следует ColumnTransformer.

По сути, конвейер содержит преобразователи. ColumnTransformer содержит Pipelines или Transformers. Оба помогают нам организовать наш код.

Наконец, обучение бинарного классификатора. Мы будем использовать SGDClassifier в качестве нашего алгоритма машинного обучения.

Описание:

Импортируйте модель SGDClassifier()
Подготовьте данные с помощью «name_of_our_pipeline».fit_transform
Обучите нашу модель с помощью «name_of_MLA».fit(training_set, labels_of_training_set). Предсказать набор тестов с помощью «name_of_MLA».predict()
Посмотрите, насколько точен наш MLA.
Точность 83%!

Другие алгоритмы машинного обучения

Взгляните на https://en.wikipedia.org/wiki/Binary_classification#:~:text=%20Some%20of%20the%20methods%20commonly%20used%20for,6%20Logistic%20regression%207%20Probit%20model %20Еще%20

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

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

Примером импорта одного из них может быть:

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

Спасибо за чтение!

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