import pandas as pd from sklearn.compose import ColumnTransformer from sklearn.preprocessing import OneHotEncoder,StandardScaler from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras import Input from sklearn.metrics import classification_report from tensorflow.keras.callbacks import EarlyStopping import keras_tuner as kt df = pd.read_csv('Disease_symptom_and_patient_profile_dataset.csv',dtype={'Outcome Variable':str}) df['Outcome Variable'] = df['Outcome Variable'].map({'Positive':1,'Negative':0}) num_features = df.select_dtypes(include=['int64']).columns.drop('Outcome Variable').to_list() cat_features = df.select_dtypes(include=['object']).columns.to_list() preprocess = ColumnTransformer(transformers=[ ('num',StandardScaler(),num_features), ('cat',OneHotEncoder(handle_unknown='ignore',drop='first'),cat_features) ]) from sklearn.model_selection import train_test_split x= df.drop(columns=['Outcome Variable']) y= df['Outcome Variable'] x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state= 42) x_train_scaled = preprocess.fit_transform(x_train) x_test_scaled = preprocess.transform(x_test) def build_model(hp): model = Sequential([ Input(shape=(x_test_scaled.shape[1],)), Dense(units=hp.Int('u1',32,256,step=32),activation='relu'), Dense(units=hp.Int('u2',16,128,step=16),activation='relu'), Dense(units=hp.Int('u3',8,64,step=8),activation='relu'), Dense(1,activation='sigmoid')]) model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy']) return model tuner = kt.RandomSearch(build_model,objective='val_loss',max_trials=20) early_stop = EarlyStopping(monitor='val_loss',patience=20,restore_best_weights=True) tuner.search(x_train_scaled,y_train,epochs=400,batch_size=32,callbacks=[early_stop],validation_split=0.4,verbose=1) best_model = tuner.get_best_models(1)[0] y_pred = (best_model.predict(x_test_scaled).flatten()>=0.5).astype(int) for pre,ac in zip(y_pred[:5],y_test[:5]): print(f'Predict: {pre} - Actual: {ac}') print(f'Report: {classification_report(y_test,y_pred)}') def pre_desease(Disease,Fever,Cough,Fatigue,Breathing,Age,Gender,Blood,Cholesterol): cols = x.columns vals = [Disease,Fever,Cough,Fatigue,Breathing,Age,Gender,Blood,Cholesterol] user = pd.DataFrame([dict(zip(cols,vals))]) prediction = best_model.predict(preprocess.transform(user)).item() decision = 'POSITIVE' if prediction >=0.5 else 'NEGATIVE' return f'Result: {decision}' import gradio as gr inputs = [ gr.Text(label='Disease'), gr.Radio(choices=['Yes', 'No'],label='Fever'), gr.Radio(choices=['Yes', 'No'],label='Cough'), gr.Radio(choices=['Yes', 'No'],label='Fatigue'), gr.Radio(choices=['Yes', 'No'],label='Difficulty Breathing'), gr.Number(label='Age'), gr.Radio(choices=['Female', 'Male'],label='Gender'), gr.Radio(choices=['Low', 'Normal', 'High'],label='Blood Pressure'), gr.Radio(choices=['Normal', 'Low', 'High'],label='Cholesterol Level'), ] demo = gr.Interface(fn=pre_desease,inputs=inputs,outputs='text',title='Predict Desease') demo.launch()