Fouzanjaved's picture
Create app.py
9d7fab8 verified
raw
history blame
2.29 kB
import numpy as np
import pandas as pd
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler
import gradio as gr
# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv"
column_names = ["Pregnancies", "Glucose", "BloodPressure", "SkinThickness", "Insulin",
"BMI", "DiabetesPedigreeFunction", "Age", "Outcome"]
df = pd.read_csv(url, header=None, names=column_names)
# Replace zero values with mean
cols_with_zero = ["Glucose", "BloodPressure", "SkinThickness", "Insulin", "BMI"]
df[cols_with_zero] = df[cols_with_zero].replace(0, np.nan)
df.fillna(df.mean(), inplace=True)
# Feature selection
selected_features = ["Pregnancies", "Glucose", "Insulin", "BMI", "Age"]
X = df[selected_features]
y = df["Outcome"]
# Normalize
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
# Train-test split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
# Build ANN model
model = Sequential([
Dense(12, activation='relu', input_shape=(X_train.shape[1],)),
Dense(8, activation='relu'),
Dense(1, activation='sigmoid')
])
# Compile and train
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit(X_train, y_train, epochs=400, batch_size=16, verbose=0)
# Prediction function
def predict_diabetes(pregnancies, glucose, insulin, bmi, age):
input_data = np.array([[pregnancies, glucose, insulin, bmi, age]])
input_scaled = scaler.transform(input_data)
prediction = model.predict(input_scaled)[0][0]
return "Diabetic" if prediction >= 0.5 else "Not Diabetic"
# Gradio Interface
iface = gr.Interface(
fn=predict_diabetes,
inputs=[
gr.Number(label="Pregnancies"),
gr.Number(label="Glucose"),
gr.Number(label="Insulin"),
gr.Number(label="BMI"),
gr.Number(label="Age")
],
outputs="text",
title="Diabetes Prediction using ANN",
description="Enter medical values to predict whether a person has diabetes"
)
iface.launch()