From 3ed50ab0d2bb3a6920dda3e0379adda607cf22a1 Mon Sep 17 00:00:00 2001 From: Sam Perry Date: Tue, 1 Aug 2017 14:01:18 +0100 Subject: [PATCH] squash commit --- Project_Writeup.tex | 331 ++++++++++++++++++++++++---------------- resources/qmul_logo.jpg | Bin 0 -> 14231 bytes 2 files changed, 198 insertions(+), 133 deletions(-) create mode 100644 resources/qmul_logo.jpg diff --git a/Project_Writeup.tex b/Project_Writeup.tex index dc1854c..1985c13 100644 --- a/Project_Writeup.tex +++ b/Project_Writeup.tex @@ -1,5 +1,4 @@ -\documentclass[titlepage]{scrartcl} -\usepackage{enumitem} +\documentclass[titlepage, 12pt]{scrartcl} \usepackage{enumitem} \usepackage[british]{babel} \usepackage[style=apa, backend=biber]{biblatex} \DeclareLanguageMapping{british}{british-apa} @@ -11,32 +10,36 @@ \MakePerPage{footnote} \usepackage{abstract} \usepackage{graphicx} +\usepackage{setspace} % Create hyperlinks in bibliography \usepackage{hyperref} \usepackage{amsmath} +\usepackage[pass]{geometry} +\usepackage{graphicx} + \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} \usepackage{blindtext} \setkomafont{disposition}{\normalfont\bfseries} +\usepackage{etoolbox} \graphicspath{{./resources/}} \addbibresource{~/Documents/library.bib} -\newsavebox{\abstractbox} -\renewenvironment{abstract} - {\begin{lrbox}{0}\begin{minipage}{\textwidth} - \begin{center}\normalfont\sectfont\abstractname\end{center}\quotation} - {\endquotation\end{minipage}\end{lrbox}% - \global\setbox\abstractbox=\box0 } +%\newsavebox{\abstractbox} +%\renewenvironment{abstract} +% {\begin{lrbox}{0}\begin{minipage}{\textwidth} +% \begin{center}\normalfont\sectfont\abstractname\end{center}\quotation} +% {\endquotation\end{minipage}\end{lrbox}% +% \global\setbox\abstractbox=\box0 } -\usepackage{etoolbox} -\makeatletter -\expandafter\patchcmd\csname\string\maketitle\endcsname - {\vskip\z@\@plus3fill} - {\vskip\z@\@plus2fill\box\abstractbox\vskip\z@\@plus1fill} - {}{} -\makeatother +%\makeatletter +%\expandafter\patchcmd\csname\string\maketitle\endcsname +% {\vskip\z@\@plus3fill} +% {\vskip\z@\@plus2fill\box\abstractbox\vskip\z@\@plus1fill} +% {}{} +%\makeatother \DeclareCiteCommand{\citeyearpar} {} @@ -67,133 +70,195 @@ showspaces=false, showstringspaces=false} + \begin{document} -\title{ECS750P --- Final Project} -\subtitle{\LARGE{Extraction of Statistical Features from PCG Signals for the -Classification of Heart Abnormalities}} +\newgeometry{lmargin=1.5cm} +\begin{titlepage} -\author{Sam Perry --- EC16039} + \begingroup -\maketitle + \setlength{\tabcolsep}{1.5cm} + + \begin{tabular}[c]{p{0.30\textwidth} | p{0.4\textwidth}} + + {\vspace{1.2cm} \Large School of Electronic Engineering and Computer Science \par} + & + {\vspace{1.2cm} \large Sound and Music Computing \newline Project Report \the\year \par}\\ + + & {\vspace{0.5cm} \Large \textbf{Extraction of Statistical Features from PCG Signals for the +Classification of Heart Abnormalities} \par}\\ + + \vspace{0.4\textheight} + \includegraphics[width=5cm]{qmul_logo} + & + {\vspace{1cm} \large \textbf{Samuel Perry}}\\ + + & + \multicolumn{1}{|r}{August \the\year} + + \end{tabular} -\section{Literature Review} -There are currently a wide variety of methods are employed for the analysis and -classification of PCG signals. Current research focuses on a number of areas, -the most relevant of which are: -\begin{itemize} - \item Algorithms for the pre-processing and segmentation of PCG data, - aiming to extract the structure of the signal over time. This is a key - stage in the analysis of PCG signals as the structure and relationships between the - fundamental heart sounds (FHSs) form the basis for much of the further - analysis performed on PCG data. A number of methods exist for the - extraction of FHSs. Some rely on direct extraction of peaks in the time - domain to determine the structure of a signal. These methods perform - various transformation in order to accentuate the transient events with - the intention of isolating them~\parencite{Groch1992, Liang1997}. - However, these methods tend to suffer significantly from background - noise and so perform poorly in sub-optimal conditions.\\ - Other methods rely on spectral representations to assist in the - splitting of the FHSs, in particular using wavelet - decomposition~\parencite{LiangHuiying1997, Vepa2008}. This allows for - the separation of components based on their frequency content in place - of, or in addition to their temporal characteristics.\\ - In addition, Machine learning algorithms have been employed, such as - $k$-Nearest Neighbour~\parencite{Gupta2007} and Neural - Networks~\parencite{Oskiper2002} to improve segment classification. - More recently, particular success has been observed in Springer's use - of logistic regression and Hidden semi-Markov - models~\citeyearpar{Springer2016}. + \endgroup - \item A wide variety of methods exist for the extraction of statistical - features from PCG data. These features are used for the creation of - robust, meaningful representations of the data.\\ - The use of spectral representations for PCG data are prominent in the - literature. The ability to separate activity across the frequency - spectrum reveals patterns that may not be attainable by analysing the - time domain signal alone.\\ - Due to the need for low frequency analysis and the high noise levels - found in PCG signals, it has been found that the traditional FFT - method for extracting spectral information may not be - suitable~\parencite{Akay1990}. For this reason, parametric methods for - spectral estimation have been a popular choice for extraction of such information. - Methods such as AR, ARMA, AR-HOS and MUSIC have been shown to provide spectral - representations suitable for analysis and classification of heart - sound~\parencite{Ergen2001, Schmidt2015}.\\ - Other methods such as Wavelet Decomposition and MFCCs have also been - successfully employed for extracting spectral data for purposes such - as heart valve disease identification and heart murmur - detection~\parencite{Quiceno-Manrique2010a, Maglogiannis2009}.\\ - - In addition to direct analysis on the signal, the ability to segment - and extract RR values from the signal allows for their statistical - analysis, both in the time and frequency domain, for use as features.\\ - Dash et al.\ use a number of time-based statistical analysis on the RR - time series for the detection of atrial fibrillation. Statistical - analyses such as RMSSD, Shannon Entropy and Turning-point Ratio are - used as feature vectors for classification of - signals~\citeyearpar{Dash2009}. A similar approach is used by Yaghouby - et al.\ for the generalized classification of heart abnormality. Here, - a selection of linear and non-linear features are used for - classification with promising results~\citeyearpar{Yaghouby2009}.\\ - Frequency domain analysis of RR values are also used by calculating the - PSD of the RR values via approaches such as VFCDM.\ This form of - approach allows for higher resolution time-frequency representations of - the RR data than approaches such as the FFT or wavelet transform~\parencite{Wang2006}. - From a spectral representations such as this, Yaghouby et al.\ - demonstrate the use of such descriptors for the discrimination between - sympathetic and parasympathetic contents of the signal, not directly - detectable through time domain analysis~\citeyearpar{Yaghouby2009}.\\ - Further in-depth analysis of statistical features for HRV can be found - in~\parencite{Electrophysiology1996} +\end{titlepage} +\restoregeometry - \item Classification of signals for diagnostic purposes. The aim being to - distinguish healthy signals from those with certain heart - conditions/abnormality. This is most commonly achieved by extracting - sets of features vectors from PCG signals, followed by their - classification, most commonly using machine learning algorithms for - automatic classification. The features extracted and classification - algorithms applied vary across the literature based on factors such as - the diagnostic aims of the classification and computing performance - requirements.\\ +\doublespacing +\begin{abstract} + Things and stuff and words... +\end{abstract} - Artificial neural networks and support vector machines have proven to - be popular choices for classification. Much success has been seen in - employing these machine learning techniques for classification across - both PCG and ECG data for conditions such as chronic heart failure, - atrial fibrillation and flutter, diastolic murmurs, and for general - pathology detection~\parencite{Cathers1995, Wu1995, Bung2000, - Lubaib2016, Maji2014, Ari2010, Maglogiannis2009}. Results do vary based - on the combination of features and exact classification methods used. - However, encouraging results are presented with highly accurate - classifications for general abnormality detection and for more specific - pathological condition detection.\\ +\renewcommand{\abstractname}{Acknowledgements} +\begin{abstract} +I'd like to thanks anyone and everyone... +\end{abstract} + +\tableofcontents +\newpage + +\section{Related Work} +There are currently a wide variety of methods employed for the analysis and +classification of PCG signals. Current research can be divided into 3 areas, +each of which are combined to create full classification system. These areas +are: signal preprocessing and segmentation, feature extraction methods and +classification methods. + +\subsection{Signal Preprocessing and Segmentation} +Due to factors such as recording conditions and + +Algorithms for the pre-processing and segmentation of PCG data +aim to extract the structure of the signal over time. This is a key +stage in the analysis of PCG signals as the structure and relationships between the +fundamental heart sounds (FHSs) form the basis for much of the further +analysis performed on PCG data. A number of methods exist for the +extraction of FHSs. Some rely on direct extraction of peaks in the time +domain to determine the structure of a signal. These methods perform +various transformation in order to accentuate the transient events with +the intention of isolating them~\parencite{Groch1992, Liang1997}. +However, these methods tend to suffer significantly from background +noise and so perform poorly in sub-optimal conditions.\\ +Other methods rely on spectral representations to assist in the +splitting of the FHSs, in particular using wavelet +decomposition~\parencite{LiangHuiying1997, Vepa2008}. This allows for +the separation of components based on their frequency content in place +of, or in addition to their temporal characteristics.\\ +In addition, Machine learning algorithms have been employed, such as +$k$-Nearest Neighbour~\parencite{Gupta2007} and Neural +Networks~\parencite{Oskiper2002} to improve segment classification. +More recently, particular success has been observed in Springer's use +of logistic regression and Hidden semi-Markov +models~\citeyearpar{Springer2016}. + +\subsection{Statistical Feature Extraction} +A wide variety of methods exist for the extraction of statistical +features from PCG data. These features are used for the creation of +robust, meaningful representations of the data.\\ +The use of spectral representations for PCG data are prominent in the +literature. The ability to separate activity across the frequency +spectrum reveals patterns that may not be attainable by analysing the +time domain signal alone.\\ +Due to the need for low frequency analysis and the high noise levels +found in PCG signals, it has been found that the traditional FFT +method for extracting spectral information may not be +suitable~\parencite{Akay1990}. For this reason, parametric methods for +spectral estimation have been a popular choice for extraction of such information. +Methods such as AR, ARMA, AR-HOS and MUSIC have been shown to provide spectral +representations suitable for analysis and classification of heart +sound~\parencite{Ergen2001, Schmidt2015}.\\ +Other methods such as Wavelet Decomposition and MFCCs have also been +successfully employed for extracting spectral data for purposes such +as heart valve disease identification and heart murmur +detection~\parencite{Quiceno-Manrique2010a, Maglogiannis2009}.\\ + +In addition to direct analysis on the signal, the ability to segment +and extract RR values from the signal allows for their statistical +analysis, both in the time and frequency domain, for use as features.\\ +Dash et al.\ use a number of time-based statistical analysis on the RR +time series for the detection of atrial fibrillation. Statistical +analyses such as RMSSD, Shannon Entropy and Turning-point Ratio are +used as feature vectors for classification of +signals~\citeyearpar{Dash2009}. A similar approach is used by Yaghouby +et al.\ for the generalized classification of heart abnormality. Here, +a selection of linear and non-linear features are used for +classification with promising results~\citeyearpar{Yaghouby2009}.\\ +Frequency domain analysis of RR values are also used by calculating the +PSD of the RR values via approaches such as VFCDM.\ This form of +approach allows for higher resolution time-frequency representations of +the RR data than approaches such as the FFT or wavelet transform~\parencite{Wang2006}. +From a spectral representations such as this, Yaghouby et al.\ +demonstrate the use of such descriptors for the discrimination between +sympathetic and parasympathetic contents of the signal, not directly +detectable through time domain analysis~\citeyearpar{Yaghouby2009}.\\ +Further in-depth analysis of statistical features for HRV can be found +in~\parencite{Electrophysiology1996} + +\subsection{Signal Classification} +Classification of signals for diagnostic purposes. The aim being to +distinguish healthy signals from those with certain heart +conditions/abnormality. This is most commonly achieved by extracting +sets of features vectors from PCG signals, followed by their +classification, most commonly using machine learning algorithms for +automatic classification. The features extracted and classification +algorithms applied vary across the literature based on factors such as +the diagnostic aims of the classification and computing performance +requirements.\\ + +Artificial neural networks and support vector machines have proven to +be popular choices for classification. Much success has been seen in +employing these machine learning techniques for classification across +both PCG and ECG data for conditions such as chronic heart failure, +atrial fibrillation and flutter, diastolic murmurs, and for general +pathology detection~\parencite{Cathers1995, Wu1995, Bung2000, +Lubaib2016, Maji2014, Ari2010, Maglogiannis2009}. Results do vary based +on the combination of features and exact classification methods used. +However, encouraging results are presented with highly accurate +classifications for general abnormality detection and for more specific +pathological condition detection.\\ + +However, there is a lack of research into other machine learning +techniques such as bayesian classification~\parencite{Lubaib2016}, +$k$-Nearest Neighbour~\parencite{Quiceno-Manrique2010a, Lubaib2016} and +Linear Regression~\parencite{Orhan2013}. Studies that utilize these +methods for classification have generated promising results. There is +therefore the potential for further research into exploiting the +benefits of these techniques for heart abnormality detection.\\ + +The selection of features used for classification also depends +predominantly on the aims for the classification. For general +abnormality classification, spectral representations such as wavelet +transformations, VFCMD, FFTs and MFCCs are a popular +choice~\parencite{Bung2000, Wu1995, Yaghouby2009, Dash2009}. Their +multi-dimensional representation of the data reveals details in the +signal that cannot be seen through a 1 dimensional time series alone, +allowing for more accurate classification. Higher-level statistical +methods are also widely used for both time and spectral +representations~\parencite{Bung2000, Quiceno-Manrique2010a, +Schmidt2015, Dash2009, Yaghouby2009}. These allow for the +classification based on more specific statistical properties of the +data. It is highlighted by Orhan that Higher level statistical methods +may add considerable complexity to computations, and so care should be +taken, particularly when considering systems in a real-time +context~\citeyearpar{Orhan2013}. + +\section{Dataset} + +\section{Design} +The system aims to provide robust heart abnormality detection for PCG signals, +such that use of the system could reliably recommend further medical attention +when neccesary. +\subsection{Signal Segmentation} +\subsection{Choice of features} +\subsection{Feature selection method} +dimensionality reduction +\subsection{Classification Algorithm} + +\section{Implementation} +\section{Evaluation} +Group cross-validation +Weighted specificity and weighted Accuracy measures +\section{Conclusion} - However, there is a lack of research into other machine learning - techniques such as bayesian classification~\parencite{Lubaib2016}, - $k$-Nearest Neighbour~\parencite{Quiceno-Manrique2010a, Lubaib2016} and - Linear Regression~\parencite{Orhan2013}. Studies that utilize these - methods for classification have generated promising results. There is - therefore the potential for further research into exploiting the - benefits of these techniques for heart abnormality detection.\\ - The selection of features used for classification also depends - predominantly on the aims for the classification. For general - abnormality classification, spectral representations such as wavelet - transformations, VFCMD, FFTs and MFCCs are a popular - choice~\parencite{Bung2000, Wu1995, Yaghouby2009, Dash2009}. Their - multi-dimensional representation of the data reveals details in the - signal that cannot be seen through a 1 dimensional time series alone, - allowing for more accurate classification. Higher-level statistical - methods are also widely used for both time and spectral - representations~\parencite{Bung2000, Quiceno-Manrique2010a, - Schmidt2015, Dash2009, Yaghouby2009}. These allow for the - classification based on more specific statistical properties of the - data. It is highlighted by Orhan that Higher level statistical methods - may add considerable complexity to computations, and so care should be - taken, particularly when considering systems in a real-time - context~\citeyearpar{Orhan2013}. - -\end{itemize} \pagebreak{} \printbibliography{} diff --git a/resources/qmul_logo.jpg b/resources/qmul_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07972217c08db4a1d2bdc132281a6a17adaeb80b GIT binary patch literal 14231 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 Uc8A+M|HFnN2UeD