Астеросейсмология с использованием KNN в R

В этой статье мы попытаемся применить KNN (K-Nearest Neighbours) — один из алгоритмов машинного обучения — к астеросейсмологии, которая изучает колебания звезд, чтобы узнать их собственные характеристики. Мы можем узнать колебания звезды из наблюдений, полученных со спутников, в данном случае со спутника Кеплера.

Колебание, о котором мы здесь говорим, отличается от колебания, о котором вы, вероятно, думаете. Не думайте об этих колебаниях как о вибрирующем телефоне или волне в океане. Они осязаемы, а колебания звезды — нет — даже если вы готовы умереть, вы все равно не можете этого сделать. Мы знаем, что звезды колеблются от тусклого и яркого их света. Они не светят постоянно! Временами они тускнеют, и у них бывают периоды, когда они это делают. Это то, что мы назвали колебаниями звезды, и именно об этом говорит астеросейсмология.

Основная теория

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

Главная последовательность представляет собой S-образную область, которая простирается от верхнего левого угла (очень яркие звезды типа O с высокой температурой поверхности) до правого нижнего края (тусклые звезды типа M с низкой температурой поверхности) на рис. 6.6. Это область, которая включает от 80% до 90% всех звезд. Звезды в правом нижнем углу главной последовательности называются красными карликами, так как их светимость намного меньше, чем у нашего Солнца.

Диаграмма Герцшпрунга–Рассела (диаграмма H–R) представляет собой график зависимости звездной светимости от температуры. Обе оси логарифмические. Ось x представляет температуру. (Примечание: он увеличивается слева от графика). Вместо использования температуры для определения ординаты можно использовать как спектральный тип, так и индекс цвета (B-V), поскольку оба они напрямую связаны с температурой.

Эволюция звезды в главной последовательности

  1. Поверхность коллапсирующей протозвезды достигает температуры, когда начинает излучать красный свет. Поскольку он очень большой, изначально он относительно яркий, но яркость падает по мере уменьшения площади его поверхности.
  2. В течение некоторого периода протозвезда остается примерно в 10 раз ярче получившейся звезды. Звезда становится меньше, что уменьшает площадь поверхности, но в то же время температура поверхности растет, что увеличивает излучение на единицу площади. Два эффекта примерно компенсируются, поэтому протозвезда остается примерно с постоянной светимостью.
  3. Когда звезда падает на главную последовательность, она проходит очень бурную стадию, когда теряет примерно половину своей массы. Это называется фазой Тау Тельца в жизни звезды. (Тау Тельца — это тройная звездная система в Тельце, где главная звезда падает на главную последовательность.)
  4. Звезда оседает на главной последовательности, сжигая водород в гелий. По мере увеличения количества гелия в ядре его температура повышается, звезда становится несколько горячее и поэтому движется вверх и влево по диаграмме H – R.
  5. Звезда становится красным гигантом, поскольку сжигает гелий до углерода.
  6. Затем он сжигает углерод в кислороде внутри ядра и становится нестабильным, меняя яркость и цвет при этом.
  7. Наконец, когда из ядра больше нельзя извлечь энергию, звезда сдувает свою внешнюю оболочку, образуя планетарную туманность.
  8. Охлаждающийся уголек ядра, сжавшийся примерно до размера Земли, падает в нижний левый угол диаграммы H – R и становится белым карликом. Он находится слева на диаграмме, так как он все еще будет очень горячим, но, поскольку он очень маленький, он не будет очень ярким, поэтому находится внизу диаграммы.

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

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

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

Влияние этого исследования на бизнес

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

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

Исследовательский анализ данных

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

Самообучение или изучение данных — это процесс в науке о данных, известный нам как исследовательский анализ данных (EDA). Это процесс, в котором мы пытаемся копать и обрабатывать информацию, скрытую за данными. Результаты нашего исследования могут помочь нам определить наше следующее решение, которое решает, будем ли мы использовать машинное обучение для прогнозирования или нет, и какую модель мы будем использовать, если мы это сделаем.

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

# First we import the data and see how it really looks like
library(tidyverse) 
library(zoo)
library(ggplot2)
library(dplyr)
library(hrbrthemes)
data <- read.csv('../input/asteroseismology-of-16000-kepler-red-giants/Data_classified_phase_.csv')
head(data, 5)

# This data has an error value for each of its variables
# This error value will not be used in our statistical analysis
# the error value column names always started with 'e_'
library(stringr)
e_col <- colnames(data)[which(str_sub(colnames(data), 1, 2) == "e_")]
new.data <- data[, -match(e_col, colnames(data))]
# we will change the label
# 1 to 0 & 2 to 1
# formerly 1 is RGB, formerly 2 is HeB
index.1 <- as.integer(rownames(new.data[new.data$Phase == 1, ]))
index.2 <- as.integer(rownames(new.data[new.data$Phase == 2, ]))
new.data[index.1, "Phase"] <- 0
new.data[index.2, "Phase"] <- 1
# Now we should see the summary of our data
# We can do this using summary function 
# By this function too, we know how many missing values 
# are in the data
summary(new.data)

Выше мы можем видеть сводку данных, которые у нас есть. Есть две функции, которые все еще имеют нулевые значения. Это «А» и «Ширина». Они оба имеют 537 нулевых значений из 15388 строк данных. Эти числа не являются значимыми, поскольку они составляют всего 3% всех данных.

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

Как каждая переменная влияет друг на друга

# There are too many NA data at Width & A
xy <- new.data[, -c(4, 5)]
cor.xy <- cor(xy)
heatmap(cor.xy, Colv = NA, Rowv = NA, scale="column")

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

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

Исходя из этого, справедливо сказать, что если переменная имеет светлый цвет, представляющий ее корреляцию с фазой, то эта переменная фактически влияет на определение класса 0, то есть RGB.

На тепловой карте выше видно, что Delnu (среднее частотное разделение акустических мод), numax (частота максимальной мощности колебаний), Width ( Избыток мощности по ширине) и log.g (логарифм поверхностной гравитации из этой работы) имеет светлый цвет. Из этого мы можем сказать, что все эти переменные имеют большое влияние на определение того, является ли звезда RGB или нет.

xy.1 <- xy[, c('log.g.', 'numax', 'Delnu', 'ClcorR')]
xy.1 <- scale(xy.1)
xy.1$Phase <- xy$Phase
library(ggplot2)
xy.1 <- xy.1 %>% pivot_longer(!Phase, names_to = "Feature")
xy.1$Phase <- as.factor(xy.1$Phase)
ggplot(xy.1, aes(x=Feature, y=value, fill=Phase)) + 
    geom_boxplot()

Выше мы видим диаграмму из 5 функций. Это ClcorM, Delnu, log.g., numax и RGBcorR. Только увидев эту диаграмму, мы можем увидеть различия. Delnu, log.g&numax, которые, как мы видим, имеют более высокие значения в фазе 0, все они имеют светлые цвета при корреляции тепловой карты.

В то же время RGBcorR имеет более высокие значения на фазе 1, что также видно на тепловой карте, что они имеют темный цвет. Другой функцией является ClcorM. У них медианные значения почти одинаковы как для фазы 0, так и для фазы 1. Но когда фаза 1 имеет более высокие значения, чем медиана, значения имеют тенденцию быть выше. Вот почему ClcorM также имеет темный цвет на тепловой карте.

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

Вот почему полезно использовать такую ​​модель, как k-ближайших соседей.

Построение модели

Перекрестная проверка

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

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

В этом проекте пропорция будет 4: 1 или 0,8: 0,2, что означает, что на каждые 4 обучающих данных у нас будет 1 проверочные данные.

# We split the data that we have
# We'll be using 8:2 ratio 
intrain <- sample(nrow(new.data), nrow(new.data) * 0.8)
x.train <- new.data[intrain, -15]
x.valid <- new.data[-intrain, -15]
y.train <- new.data[intrain, 15]
y.valid <- new.data[-intrain, 15]

Коротко о KNN

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

Чтобы определить, какие из K экземпляров в обучающем наборе данных наиболее похожи на новый вход, используется мера расстояния. Для входных переменных с действительными значениями наиболее популярной мерой расстояния является евклидово расстояние. Евклидово расстояние вычисляется как квадратный корень из суммы квадратов разностей между точками a и b по всем входным атрибутам i.

Значение K можно найти путем настройки алгоритма. Рекомендуется попробовать множество различных значений K (например, значения от 1 до 21) и посмотреть, что лучше всего подходит для вашей задачи.

В основном в КНН нет обучения. Он отличается от любых других алгоритмов машинного обучения. KNN не нуждается в обучении, потому что в данных уже есть шаблон. Мы можем как бы найти эту закономерность, рассчитав евклидово расстояние новой точки.

Сам узор сделан учеными. Именно они классифицировали каждую звезду по соответствующим классам на основе некоторых правил.

Предварительная обработка данных

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

В этом случае мы будем использовать среднее значение для замены нулевых значений. Здесь есть два столбца с нулевыми значениями: «Ширина» и «А».

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

# Here, we are trying to find columns that have NA inside of them
is.na.data <- as.data.frame(is.na(new.data))
colSums(is.na.data)
# From the summary above, we can see that there are 
# two features that have missing values in them.
# They are "A" and "Width"

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

new.data[is.na.data$A, "A"] <- mean(new.data$A, na.rm=TRUE)
new.data[is.na.data$Width, "Width"] <- mean(new.data$Width, na.rm=TRUE)
# Or you can use a built-in function na.fill
x.train[, 'A'] <- na.fill(x.train[, 'A'], 94.93)
x.train[, 'Width'] <- na.fill(x.train[, 'Width'], 20.31)
x.valid[, 'A'] <- na.fill(x.valid[, 'A'], 94.93)
x.valid[, 'Width'] <- na.fill(x.valid[, 'Width'], 20.31)

Тогда, как мы знаем, хотя мы знаем, что все данные, которые у нас есть здесь, являются числовыми, но они все равно сильно различаются. Существуют данные с максимальными значениями в десятки тысяч, такие как столбец Teff, и данные с максимальным значением 5, такие как столбец NoCorM. Но мы можем сказать, что все эти значения могут одинаково влиять на результат. Что нам нужно сделать, чтобы сделать их эффект одинаковым, так это преобразовать их в один и тот же масштаб.

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

Вы можете увидеть, как это работает, посмотрев наш собственный-m

# We can use a built-in function in R to transform x.train
x.train <- scale(x.train)

Здание КНН

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

Используя этот алгоритм, вообще не тратится время на обучение, потому что KNN не нужно учиться, ему нужно только наблюдать.

# Here we make the classification
# We will use KNN, which doesn't need any training 
library(class)
library(caret)
k.values <- c(5, 7, 9, 11, 13, 15, 17, 19, 21)
f1 <- c()
accuracy <- c()
recall <- c()
precision <- c()
for (k in k.values){
    preds <- knn(train=x.train, test=x.valid, cl=y.train, k=k)
    cf <- confusionMatrix(factor(preds), factor(y.valid))
    accuracy <- c(accuracy, cf$overall['Accuracy'])
}

Производительность модели

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

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

Мы получили 0,927 как наилучшую точность, полученную из модели, использующей 11 в качестве значения k. Одна вещь, которую мы должны помнить, это то, что наши прогнозы сделаны моделью, которая не требует никаких ресурсов и времени для обучения. Все, что нам нужно сделать, это подключить данные, и модель готова к работе!

df.score <- data.frame(k=k.values, accuracy=accuracy, precision=precision, recall=recall, f1=f1)
# Plot
df.score %>%
  tail(10) %>%
  ggplot( aes(x=k, y=accuracy)) +
    geom_line( color="grey") +
    geom_point(shape=21, color="black", fill="#69b3a2", size=6) +
    theme_ipsum() +
    ggtitle("Validation Accuracy with the Change of K")

Выводы

В этих данных астеросейсмологии, которые представляют собой данные о классификации звезд на основе их различных особенностей, связанных с их внутренними вибрациями, нам удалось создать модель машинного обучения, которая способна выполнять классификации. Здесь выбран алгоритм K-ближайших соседей, потому что мы считаем, что шаблоны каждого класса уже существуют, модели не нужно создавать новые. Наилучшая точность, полученная нами при оценке, составляет 92,7 %, полученная из модели, использующей 11 в качестве значения k.

Рекомендации

Ю, Дж., Хубер, Д., Беддинг, Т. Р., (2018). Астеросейсмология 16 000 красных гигантов Кеплера: глобальные параметры колебаний, массы и радиусы. Серия дополнений к астрофизическому журналу, 236:42 (18 стр.)

Морисон, И. (2008). Введение в астрономию и космологию. Публикация John Wiley and Sons, Ltd.

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