Какой алгоритм использовать для классификации графиков на основе графических признаков?

Вопрос или проблема

У меня есть графики, которые я должен классифицировать на основе некоторых признаков. Например, мне нужно различать следующие графики, имеющие гладкие признаки или «долины» при определенных значениях x. Какой алгоритм машинного обучения будет наиболее подходящим для этого? Я думал о комбинации обнаружения аномалий, кластеризации и классификации. Буду признателен за любую помощь. Спасибо!

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

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

Предположения

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

Решение

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

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

import numpy as np
from scipy.spatial import distance
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report

#игрушечный набор данных 
X = np.random.random((100,10))
y = np.random.randint(0,2, (100))
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

#пользовательская метрика
def DTW(a, b):   
    an = a.size
    bn = b.size
    pointwise_distance = distance.cdist(a.reshape(-1,1),b.reshape(-1,1))
    cumdist = np.matrix(np.ones((an+1,bn+1)) * np.inf)
    cumdist[0,0] = 0

    for ai in range(an):
        for bi in range(bn):
            minimum_cost = np.min([cumdist[ai, bi+1],
                                   cumdist[ai+1, bi],
                                   cumdist[ai, bi]])
            cumdist[ai+1, bi+1] = pointwise_distance[ai,bi] + minimum_cost

    return cumdist[an, bn]

#обучение
parameters = {'n_neighbors':[2, 4, 8]}
clf = GridSearchCV(KNeighborsClassifier(metric =DTW), parameters, cv=5)
clf.fit(X_train, y_train)

#оценка
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))

Для начала, долины или прямые сегменты не определены в какой-то определенной точке, а в диапазоне точек – или сегментах линий (кривых). Начальной точкой может быть разделение N линейных сегментов, каждый из которых имеет длину M км, где N и M зависят от вашего выбора. Это даст вам представление о каждом графике как о нескольких меньших графиках.

Затем необходимо пометить эти меньшие графики. Для этой цели кластеризация может сработать, но помимо долин и классов гладких участков, нам нужно учитывать другие потенциальные формы, такие как подъемный участок на 23-35 км первого графика. Если завершение всех графиков такое, как показано на рисунках выше – сглаживание на более высоком значении к концу, это должно покрывать все классы. Возможно, это не лучший подход, но стоит попробовать.

Ответ или решение

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

Понимание задачи

Первоначально важно прояснить некоторые моменты:

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

  2. Целевая переменная: Если ваша задача включает предопределенные категории (классы) для графиков, то важно, чтобы данные были помечены. Это позволит вам применять методы классификации.

Алгоритмы для классификации

  1. Динамическое выравнивание временных рядов (Dynamic Time Warping, DTW): Этот метод позволяет сравнивать временные ряды, которые могут иметь разные скорости изменения времени. Он может быть полезен для определения схожих участков на графиках, даже если они не расположены на одной оси X. Ваша исходная идея использования DTW в комбинации с KNN (методом ближайших соседей) для классификации является удачной. Вы можете использовать код, представленный выше, адаптируя его под ваши специфические данные.

  2. Классификация с помощью SVM (метод опорных векторов): Если данные имеют четкие границы между классами, SVM может продемонстрировать отличные результаты. Этот алгоритм эффективно работает с высокоразмерными пространствами и может быть полезен, если вы извлечете множество признаков из графиков.

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

  4. Кластеризация: Вы можете рассмотреть использование методов кластеризации, таких как K-Means или DBSCAN, чтобы выделить группы графиков с похожими признаками. Это может быть полезно для предобработки данных и выявления подмножеств (классов), которые можно дополнительно классифицировать. Например, если вы заметили, что определенные графики с комфортом попадают в один кластер, это может указывать на общие характеристики, которые стоит отметить.

Выявление аномалий

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

Заключение

Ваша задача по классификации графиков требует интеграции различных методов и подходов. Начните с извлечения признаков из ваших графиков, используя DTW или другие методы, а затем примените алгоритмы классификации и кластеризации для окончательной обработки данных. Хорошо структурированные данные и применение нескольких подходов помогут добиться наилучшего результата в данной задаче. Удачи в вашем проекте!

Оцените материал
Добавить комментарий

Капча загружается...