Transcript
This transcript was autogenerated. To make changes, submit a PR.
So, hello and welcome to everyone who's decided to join
me for this talk today. I'm Irisini Chami, and today I'll be discussing
how we can utilize the power of machine learning in healthcare.
So, to start off, I think the best way of fully
showing how useful machine learning is in healthcare is
to try to find a specific problem we can apply to. For this presentation,
I chose heart failure just because of how impactful it was.
I'll talk about heart failure in general for the first part.
Then I'll talk about neural networks and the algorithms behind it.
Then I'll talk about how we can apply the algorithm of neural
networks to the problem of heart failure, and then how
we can try to make that neural network
that predicts heart failure into like, an actual deployable model.
So just some background on heart failure. Basically,
heart failure has been proven to be a major public health concern
that's negatively affected millions of people worldwide.
It's basically when the heart is unable to pump blood
effectively, which can cause a buildup of fluid in the lungs as well as
other organs. As you can see by these various metrics
here, one out of every five deaths in the United States are
caused by heart disease. The average cost in the United States for treating
heart failure is $30,000. And there's limited accuracy for
traditional methods of predicting heart failure. When I say traditional methods,
I mean like clinical assessments, which are
the long standing method of predicting heart failure, which are basically
like a doctor looking at a patient's symptoms,
looking at their medical history, and conducting a physical examination.
And also imaging techniques like ct scans,
mris, and also biomarkers, which are basically
measurable substances in the body that can indicate a biological process.
All these have limitations in various forms with
clinical assessments and biomarkers. They're not specific
enough where it could lead to delayed diagnosis
in the treatment of heart failure. And then there's modern imaging
techniques, which are basically too expensive, and there hasn't been a lot of research
surrounding it. So just
some more background on the current limitations of heart failure.
It's the leading cause of death. As I said earlier, it accounts
for approximately 655,000 United States each
year. Traditional methods, like the clinical assessment,
can lead to inconsistencies and errors in diagnosis,
and it's costly and time consuming. This time consuming
process can create delays in diagnosis, which could result in
a negative patient outcome. And this is where machine learning
comes in. Specifically, neural networks is what I'm going to talk about in this presentation.
But as you guys, I'm sure all familiar with. It's a field that's
been growing in popularity recently and has potential to
be really useful in problems like these. Machine learning's ability
to analyze large volumes of data makes them
very useful because it can look at trends
that aren't apparent with the traditional methods that I'm explaining
earlier. There's already been a lot of literature in the machine
learning field that examines the use of machine learning algorithms for
heart failure prediction. And they found that machine learning is
more accurate compared to traditional models. So in this presentation,
I just chose to do neural networks because that's what seems to be really
popular right now. So basically,
neural networks are in interconnected layers
of neurons. It attempts to mimic the brain in that
it has neurons, which are each of these dots here that
are connected with each other. And basically, when one
fires, it triggers a sense in
the layers following it. So it
typically consists of an input layer and an output layer with multiple
hidden layers. And in each of these input layers,
in our case, the input layer would be various
characteristics of the patient, so it would be like their age, their maximum
heart rate, et cetera. Hidden layers are just
here for complexity in that it allows
the neural networks to basically learn using two main algorithms,
forward propagation and backward propagation. And the
output layer in our scenario is just going to be one neuron
from zero to one, where zero would basically mean that
the patient does not have that high of an outcome, of that
high of a likelihood of getting heart failure where one is,
the model is confident that the patient will get
heart failure. So hang on.
For any task like this, we need
data. This is from Kaggle. If you guys wanted to
find any other data sets you wanted to use, I think Kaggle would be
a great resource here.
This guy's compiled from different hospitals,
from the UCI machine learning repository, and combined the
common features into one big one. And that makes this better
than other hard failure prediction data sets that are out there, because this allows
me to have more rows and more data to train on.
So I have the link here, and you guys should be able to find the
slide deck if you guys want to follow along. Just some information
about the data set. It has various numerical
characteristics, like age, resting blood pressure
and cholesterol, and it also has categorical columns
like the chest train type and the gender
and the resting electrocardiogram
results. So these are all just various attributes that
will allow us to help in the predictions of heart failure.
Moving on. Sorry.
Yeah, in this demo, I'm just going to use
Google Colab because it's pretty easy to follow
along with. You don't really need a lot of gpus materials
as well as it already has tensorflow installed
in it.
So to start off, go to the Kaggle
data set that I mentioned earlier and download the csv.
And then in a new Google Colab notebook we
can import pandas. And that basically allows
us to manipulate CSVs and read them in. So we
set a variable and set it equal to reading in the csV.
And then I call the dot head function on it, which allows me to see
the first five rows. And we can see that
these are basically different patient records. So each of
these rows represents a different patient. And we can see like
this guy was 40, a male, had a resting blood pressure
of 140, and he had a heart disease column
of zero. So this means that the patient did not actually end up getting heart
failure. So it's just pretty interesting to see.
Normally you would do a lot of analyzing the
data, but I think with the scope of this presentation,
I'm just going to hop straight into the pre processing the data.
So neural networks take in basically numbers exclusively.
So we need to convert the categorical columns into numerical columns.
And we can do this through something called one hot encoding,
which is basically like, you take in,
I'll go back to this part, you take in each of these columns
and then set it equal to, sorry, take in each one of
these outputs that are possible from one of these categorical
columns and then set each of these equal to a new column.
Then we would go through each value inside of this categorical
column and set it equal to
one for the thing that's actually matching on the value
for it and set it equal to zero for everything else, which is just
a way of converting the categorical columns
into numerical columns.
So we do that for each of the categorical columns in the data set.
And then we remove the categorical columns and
add these numerical columns that we just added. And then now we can call
head. So we can see before that our
40 year old patient had an ascent at eight chest
pain type. And now if we
go here, there's no column for chest pain
type. Instead there's just these different columns.
So we can see here that for ATA, the guy has one and
zero for everything else, which just allows us, the neural network, to have that kind
of information that's preserved from the categories.
So then we get our input and our output arrays.
So our x or our input is just everything
except the heart disease column. And our output, which is what we're
predicting, is just the heart disease column.
And then we can use sklearn functions to further preprocess
the data. We can import their train test
split to split up the input and
output into a training and testing data set.
I put the test size as 0.2, so we can use 20% of the
data set for testing accuracy. I think there's around
1000 rows, so there should be around 800
records for the model to learn on and around 200 for
us to do testing on. So then
from there we can do feature scaling on it.
Because neural network essentially likes
to have small numbers, and doing a standard
scalar on it allows us to achieve that. So then we fit
the training and testing on the standard scalar.
So now we have an x train and x test,
and then from here we can create a model or the neural network.
This is kind of like the architecture I chose for it, to be honest,
a lot of the choices are arbitrary.
In the real world, I think you would mess around a lot more with these
values and to try to see what could give you the best accuracy.
But for the purposes of this demonstration, we have our input
layer, and that connects to a hidden layer containing 16 neurons
connecting to another hidden layer containing 16 neurons,
and that connects to another output layer, which contains just one neuron.
All these connected together makes up our sequential model.
I use keras to create the neural network, which is just like an extension
of tensorflow. To make it easier to create them,
all I had to do was just import the sequential model from
Keras models and the dense layer from keras layers,
and then I could set my model equal to sequential and then add
my different layers. So this line of code
basically takes in my input layer.
So I set the dimensions of the input layer equal to whatever
the shape of my first value in
my training data set was. So it would like scale
with it. And then I set 16
neurons for the next layer. So it just matches up just like this. That connects
to another layer containing 16 neurons, and then
our output layer contains one neuron. One thing I do want
to note is like the activation functions, Relu means
rectified linear unit. And that's basically a graph that
looks just like zero for everything up to zero,
and then the value from zero
onwards. So it's basically like a piecewise function
where it's like it's zero for everything that's negative,
and then it's just a positive value for anything that's positive.
And that adds like a nonlinear complexity that
allows the neural network to learn.
Sigmoid just squishes all values between zero
and one, which is essentially what we need in our output layer
to create a prediction value for a patient.
So that allows us to achieve that.
We then compile our model using an optimizer.
I chose Adam, a loss function, which basically
is what the model uses to see how bad it is when learning,
so it can adjust its weights and
biases in these different arrows to try to create a better output.
Um, from there, I chose a metric of accuracy.
So then you fit the model on our training data with a validation
split of 33%, which just gives us information as the
model is training about how well it's doing.
And then epochs equals 100,
so that's how many times it forward propagates and backward propagates.
Generally, more is better accuracy up to a certain point where
there's minimal train.
So then I trained the model on it,
and then I tested the accuracy
of it on the actual testing data set. So, like data it's never
seen before, this is like the best indicator of what the data
looks like in the real world. So I set a variable of predictions equal
to the model predicting on every single value from the x underscore
test. And then what I did was,
for each of those predictions, if it was greater than 0.5,
I made that a one. And if it was less than 0.5 or
equal to it, I made it e zero. So if it was less than or
equal to 0.5, the model basically predictions
that the patient doesn't have heart failure in the future, and if it was greater
than 0.5, then the model predictions that the patient
does have heart failure. And when we
ended up doing that and use the accuracy score metric from Sklearn,
we got an accuracy of around 79%,
which isn't too bad considering how few lines of code this
really is. And I feel like if I tweaked it around more,
we could get a much better accuracy. But other
than that, that's basically it for the model creation part of
it. What you could do next is try to take this model
variable and host it somewhere.
So, this is something that when I was trying
to choose machine learning models to use on
the data set, I made like an input form where you could input
your age values, your resting blood pressure, and it would give you
a heart failure prediction. So it's just something that I thought was cool,
and you could also learn more about heart failure and stuff.
But other than that, that's it for this talk. Thank you for joining
me. If you're curious and you want to play around with the code a little
bit more. I've left the colab link, which I think you can see in
the slides here, but other than that, thank you for
your time.