суббота, 25 февраля 2017 г.

Магистерская диссертация.




В данной статье используется биспектральное разложение сигнала для обнаружения поломок в работе консольной балки по сигналу, полученному на основе ее колебаний.  Авторы утверждают, что оно устойчиво к шуму, поэтому способно наиболее точно обнаружить поломки.  Для того, чтобы протестировать устойчивость алгоритма к шуму, авторы использовали различные соотношения сигнала к шуму. В качестве алгоритма классификации использовались нейронные сети со следующей структурой 1 входной слой два скрытых слоя и выходной слой. Конфигурации сети различались числом нейронов в скрытых слоях. (было использовано 10 и 20 нейронов) Авторы замечают, что использовать весь биспектрум бессмысленно, так как он содержит много избыточной информации, в связи с этим они предлагают 3 различных подхода, с целью предотвратить избыточность.  Авторы ставили перед собой цель показать, что использование биспектрума применимо к обнаружению поломок, а также подобрать параметры для нейронной сети, которые дадут наивысшее качество.  В результате они показали, что биспкетрум применим к обнаружению поломок в консольной балке. Также в ходе их исследований они пришли к следующим выводам: 1) использовать весь биспектрум избыточно, и достаточно использовать лишь его часть; 2) шум в данных играет роль, особенно при использовании нейронных сетей; 3) более маленькая нейронная сеть дала более высокие результаты, чем большая. 



Авторы представляют новый метод, который может быть использован для диагностики того, должен ли человек быть госпитализирован. В качестве данных использовались данные 1390 пациентов из госпиталя. Кардиограммы пациентов были помечены специалистами как здоровые и больные. ЭКГ были записаны частотой семплирований 500 и 1000 гц. Использовались кардиограммы, которые были записаны с 12 разных углов. Позже все сигналы были ресеплированы с частотой 250 гц, после того как к сигналу был применен фильтр Баттерворда. После препроцессинга был определен QRS комплекс для каждого сигнала.  В качестве таких комплексов брались несимметричные окна, которые содержали 500мс до пика и 200 мс после. Все такие окна были усреднены. Все такие усреденения по каждому каналу были сконкатенированы в единый вектор и использовались как вход для нейронной сети. В качестве алгоритма классификации использовалась предобученная нейронная сеть с различными конфигурациями (использовалось различное число скрытых слоев и различное число нейронов на скрытом слое). В качестве входа для нейронной сети используются сырые кардиосигналы. Их подход авторы сравнивают с SVM,  KNN,  Hanova Expert System(HES), Extreme Learning Machines. Авторы протестировали несколько глубоких нейронных сетей.  HES – это алгоритм, который используется в клинической практике, в котором вручную размечается ЭКГ сигнал, и лишь затем его разметка подается на вход классификатору. В результате авторы подобрали конфигурацию нейронной сети, которая давала наилучшее качество на кросс-валидации по сравнению с другими алгоритмами. Также авторы отмечают, что предобучение играет важную роль в повышении качества классификации. 




Из данной статьи я хотела использовать алгоритм, чтобы создавать ансамбль из 5-ти различных алгоритмов. Суть алгоритма в следующем. 

Введем следующие величины. Пусть алгоритм должен произвести 2-классовую классификацию. Пусть I – размер доступных данных, $n_{il}^k$ $-$ поставил ли k-ый алгоритм ответ $l$ ($l \in \{1, 2\}$) на данные $i$ ( $i=1...I$). $\pi_{jl}^k$ ($j \in  \{1, 2\}$) $-$ вероятность, что $k$-ый алгоритм поставит ответ $j$,  когда истинным ответом является $l$. $T_{ij} = 1$, если истинным ответом для данных $i$ является $j$, в противном случае, он равняется 0. $p_j$ $-$ вероятность класса  $j$ в выборке. 
Шаг 1: Инициализируем матрицы $\pi$ идеальным случаем, то есть матрицами([[1, 0], [0, 1]]). T инициализируем значением голосования по большинству. Для тех запросов, на которые известны истинные ответы, инициализируем ими.
Шаг 2: Пересчитываем значения матриц $\pi$  и $p_j$ как
$$\pi_{jl}^k=\frac{\sum\limits_i T_{ij}n_{il}^k}{\sum\limits_l \sum\limits_i T_{ij}n_{il}^k}$$ 
$$p_j = \frac{\sum\limits_iT_{ij}}{I}$$
Шаг 3. Пересчитываем $T_{ij}$
$$T_{ij} = \frac{p_j \prod_{k=1}^K\prod_{l=1}^2(\pi_{jl}^k)^{n_{il}^k}}{\sum_{q=1}^2p_q \prod_{k=1}^K\prod_{l=1}^2(\pi_{ql}^k)^{n_{il}^k}}$$
Повторяем шаги 2 и 3 до тех пор, пока матрицы $\pi$ не перестанут изменяться. В конце работы данного алгоритма получим вероятности принадлежности данных (T) каждому классу.

Программная реализация:

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

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

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

Предобучить word2vec также на каких-либо датасетах с кардиограммами.

Реализовать подход, описанный в статье ECG assessment based on neural networks with pretraining


Объединить 5 алгоритмов (3 реализованных в прошлом семестре + 2 на основе нейросетей) с помощью подхода, который описан в статье Maximum likelihood estimation of observer error-rates using the EM algorithm, также попробовать использовать и другие подходы для создания композиции алгоритмов.