Skip to content

Commit 055ed29

Browse files
committed
updating
1 parent 9482b02 commit 055ed29

10 files changed

+296
-0
lines changed

README.md

-28 Bytes
Binary file not shown.

model.pkl

9.79 MB
Binary file not shown.

model.py

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Importing the libraries
2+
import numpy as np
3+
import matplotlib.pyplot as plt
4+
import pandas as pd
5+
import pickle
6+
from sklearn.ensemble import RandomForestClassifier
7+
from sklearn.model_selection import train_test_split
8+
#from sklearn.linear_model import LogisticRegression
9+
from sklearn.metrics import confusion_matrix
10+
from sklearn.metrics import roc_auc_score
11+
from sklearn.metrics import roc_curve
12+
from sklearn.metrics import accuracy_score
13+
from sklearn.metrics import precision_score
14+
from sklearn.metrics import recall_score
15+
16+
17+
diabetes = pd.read_csv('diabetes.csv')
18+
19+
features = ['Pregnancies','PlasmaGlucose','DiastolicBloodPressure','TricepsThickness','SerumInsulin','BMI','DiabetesPedigree','Age']
20+
label = 'Diabetic'
21+
X, y = diabetes[features].values, diabetes[label].values
22+
23+
# Split data 70%-30% into training set and test set
24+
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=0)
25+
26+
print ('Training cases: %d\nTest cases: %d' % (X_train.shape[0], X_test.shape[0]))
27+
28+
reg = 0.1
29+
model = RandomForestClassifier(n_estimators=100).fit(X_train, y_train)
30+
#model = LogisticRegression(C=1/reg, solver="liblinear").fit(X_train, y_train)
31+
print (model)
32+
33+
34+
predictions = model.predict(X_test)
35+
y_scores = model.predict_proba(X_test)
36+
cm = confusion_matrix(y_test, predictions)
37+
print ('Confusion Matrix:\n',cm, '\n')
38+
print('Accuracy:', accuracy_score(y_test, predictions))
39+
print("Overall Precision:",precision_score(y_test, predictions))
40+
print("Overall Recall:",recall_score(y_test, predictions))
41+
auc = roc_auc_score(y_test,y_scores[:,1])
42+
print('\nAUC: ' + str(auc))
43+
44+
# calculate ROC curve
45+
#fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1])
46+
47+
# plot ROC curve
48+
#fig = plt.figure(figsize=(6, 6))
49+
# Plot the diagonal 50% line
50+
#plt.plot([0, 1], [0, 1], 'k--')
51+
# Plot the FPR and TPR achieved by our model
52+
#plt.plot(fpr, tpr)
53+
#plt.xlabel('False Positive Rate')
54+
#plt.ylabel('True Positive Rate')
55+
#plt.title('ROC Curve')
56+
#plt.show()
57+
58+
59+
60+
# Saving model to disk
61+
pickle.dump(model, open('model.pkl','wb'))
62+
63+
# Loading model to compare the results
64+
model = pickle.load(open('model.pkl','rb'))
65+
print(model.predict([[5, 114,101,43,70,36.5,0.079,38]]))

requirements.txt

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
click==7.1.2
2+
Flask==1.1.2
3+
itsdangerous==1.1.0
4+
Jinja2==2.11.3
5+
joblib==1.0.1
6+
MarkupSafe==1.1.1
7+
numpy==1.20.2
8+
scikit-learn==0.24.1
9+
scipy==1.6.2
10+
threadpoolctl==2.1.0
11+
Werkzeug==1.0.1

static/diabetes-favicon.ico

318 Bytes
Binary file not shown.

static/diabetes.webp

229 KB
Binary file not shown.

static/no-diabetes.webp

1.09 MB
Binary file not shown.

static/styles.css

+138
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
html{
2+
height: 100%;
3+
margin: 0;
4+
}
5+
6+
body{
7+
font-family: Arial, Helvetica,sans-serif;
8+
text-align: center;
9+
margin: 0;
10+
padding: 0;
11+
width: 100%;
12+
height: 100%;
13+
display: flex;
14+
flex-direction: column;
15+
}
16+
17+
/* Website Title */
18+
.container{
19+
padding: 30px;
20+
position: relative;
21+
background: linear-gradient(45deg, #443B96, #F60B68, #F4483A);
22+
background-size: 500% 500%;
23+
animation: change-gradient 10s ease-in-out infinite;
24+
}
25+
@keyframes change-gradient {
26+
0%{
27+
background-position: 0 50%;
28+
}
29+
50%{
30+
background-position: 100% 50%;
31+
}
32+
100%{
33+
background-position: 0 50%;
34+
}
35+
}
36+
37+
.container-heading{
38+
margin: 0;
39+
}
40+
41+
.heading_font{
42+
color: #ffffff;
43+
font-family: 'Pacifico', cursive;
44+
font-size: 35px;
45+
font-weight: normal;
46+
}
47+
48+
.description p{
49+
color: #ffffff;
50+
font-style: italic;
51+
font-size: 14px;
52+
margin: -5px 0 0;
53+
}
54+
55+
/* Text Area */
56+
.ml-container{
57+
margin: 30px 0;
58+
flex: 1 0 auto;
59+
}
60+
61+
.form-input {
62+
text-align: center;
63+
width: 350px;
64+
height: 25px;
65+
margin-bottom: 5px;
66+
}
67+
68+
/* Predict Button */
69+
.my-cta-button{
70+
background: #f9f9f9;
71+
border: 2px solid #000000;
72+
border-radius: 1000px;
73+
box-shadow: 3px 3px #8c8c8c;
74+
margin-top: 10px;
75+
padding: 10px 36px;
76+
color: #000000;
77+
display: inline-block;
78+
font: italic bold 20px/1 "Calibri", sans-serif;
79+
text-align: center;
80+
}
81+
82+
.my-cta-button:hover{
83+
color: #4d089a;
84+
border: 2px solid #4d089a;
85+
}
86+
87+
.my-cta-button:active{
88+
box-shadow: 0 0;
89+
}
90+
91+
/* Contact */
92+
.contact-icon{
93+
color: #ffffff;
94+
padding: 7px;
95+
}
96+
97+
.contact-icon:hover{
98+
color: #8c8c8c;
99+
}
100+
101+
/* Footer */
102+
.footer{
103+
flex-shrink: 0;
104+
position: relative;
105+
padding: 20px;
106+
background: linear-gradient(45deg, #443B96, #F60B68, #F4483A);
107+
background-size: 500% 500%;
108+
animation: change-gradient 10s ease-in-out infinite;
109+
}
110+
111+
.footer-description{
112+
color: #ffffff;
113+
margin: 0;
114+
font-size: 12px;
115+
}
116+
117+
/* Result */
118+
.results{
119+
padding: 30px 0 0;
120+
flex: 1 0 auto;
121+
}
122+
123+
.danger{
124+
color: #ff0000;
125+
}
126+
127+
.safe{
128+
color: green;
129+
}
130+
131+
.gif{
132+
width: 25%;
133+
}
134+
135+
.gif1{
136+
width: 35%;
137+
margin: 10px 0;
138+
}

templates/index.html

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<!DOCTYPE html>
2+
3+
<html lang="en" dir="ltr">
4+
<head>
5+
<meta charset="utf-8">
6+
<title>Diabetes Predictor</title>
7+
<link rel="shortcut icon" href="{{ url_for('static', filename='diabetes-favicon.ico') }}">
8+
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='styles.css') }}">
9+
<script src="https://kit.fontawesome.com/5f3f547070.js" crossorigin="anonymous"></script>
10+
<link href="https://fonts.googleapis.com/css2?family=Pacifico&display=swap" rel="stylesheet">
11+
</head>
12+
13+
<body>
14+
15+
<!-- Website Title -->
16+
<div class="container">
17+
<h2 class='container-heading'><span class="heading_font">Diabetes Predictor</span></h2>
18+
19+
</div>
20+
21+
<!-- Text Area -->
22+
<div class="ml-container">
23+
<form action="{{ url_for('predict') }}" method="POST">
24+
<input class="form-input" type="text" name="pregnancies" placeholder="Number of Pregnancies eg. 0"><br>
25+
<input class="form-input" type="text" name="glucose" placeholder="Glucose (mg/dL) eg. 80"><br>
26+
<input class="form-input" type="text" name="bloodpressure" placeholder="Blood Pressure (mmHg) eg. 80"><br>
27+
<input class="form-input" type="text" name="skinthickness" placeholder="Skin Thickness (mm) eg. 20"><br>
28+
<input class="form-input" type="text" name="insulin" placeholder="Insulin Level (IU/mL) eg. 80"><br>
29+
<input class="form-input" type="text" name="bmi" placeholder="Body Mass Index (kg/m²) eg. 23.1"><br>
30+
<input class="form-input" type="text" name="dpf" placeholder="Diabetes Pedigree Function eg. 0.52"><br>
31+
<input class="form-input" type="text" name="age" placeholder="Age (years) eg. 34"><br>
32+
33+
<input type="submit" class="my-cta-button" value="Predict">
34+
</form>
35+
</div>
36+
37+
<!-- Footer -->
38+
<div class='footer'>
39+
40+
41+
</div>
42+
43+
</body>
44+
</html>

templates/result.html

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<!DOCTYPE html>
2+
3+
<html lang="en" dir="ltr">
4+
<head>
5+
<meta charset="utf-8">
6+
<title>Diabetes Predictor</title>
7+
<link rel="shortcut icon" href="{{ url_for('static', filename='diabetes-favicon.ico') }}">
8+
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='styles.css') }}">
9+
<script src="https://kit.fontawesome.com/5f3f547070.js" crossorigin="anonymous"></script>
10+
<link href="https://fonts.googleapis.com/css2?family=Pacifico&display=swap" rel="stylesheet">
11+
</head>
12+
13+
<body>
14+
15+
<!-- Website Title -->
16+
<div class="container">
17+
<h2 class='container-heading'><span class="heading_font">Diabetes Predictor</span></h2>
18+
19+
</div>
20+
21+
<!-- Result -->
22+
<div class="results">
23+
{% if prediction==1 %}
24+
<h1>Prediction: <span class='danger'>Oops! You have DIABETES.</span></h1>
25+
<img class="gif" src="{{ url_for('static', filename='diabetes.webp') }}" alt="Diabetes Image">
26+
{% elif prediction==0 %}
27+
<h1>Prediction: <span class='safe'>Great! You DON'T have diabetes.</span></h1>
28+
<img class="gif1" src="{{ url_for('static', filename='no-diabetes.webp') }}" alt="Not Diabetes Image">
29+
{% endif %}
30+
</div>
31+
32+
<!-- Footer -->
33+
<div class='footer'>
34+
35+
</div>
36+
37+
</body>
38+
</html>

0 commit comments

Comments
 (0)