Fouzanjaved's picture
Create app.py
9d7fab8 verified
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()