NewtonKimathi's picture
Sepsis Prediction API
945748a
raw
history blame
2.33 kB
# Setup Section
# Create FastAPI instance
app = FastAPI(title="Sepsis Prediction API",description="API for Predicting Sespsis ")
## A function to load machine Learning components to re-use
def Ml_loading_components(fp):
with open(fp, "rb") as f:
object=pickle.load(f)
return(object)
# Loading the machine learning components
DIRPATH = os.path.dirname(os.path.realpath(__file__))
ml_core_fp = os.path.join(DIRPATH,"ML","ML_Model.pkl")
ml_components_dict = Ml_loading_components(fp=ml_core_fp)
# Defining the variables for each component
label_encoder = ml_components_dict['label_encoder'] # The label encoder
# Loaded scaler component
scaler = ml_components_dict['scaler']
#Loaded model
model = ml_components_dict['model']
# Defining our input variables
class InputData(BaseModel):
PRG:int
PL: int
BP: int
SK: int
TS: int
BMI: float
BD2: float
Age: int
"""
* PRG: Plasma glucose
* PL: Blood Work Result-1 (mu U/ml)
* PR: Blood Pressure (mmHg)
* SK: Blood Work Result-2(mm)
* TS: Blood Work Result-3 (muU/ml)
* M11: Body mass index (weight in kg/(height in m)^2
* BD2: Blood Work Result-4 (mu U/ml)
* Age: patients age(years)
"""
# Index route
@app.get("/")
def index():
return{'message':'Hello, Welcome to My Sepsis Prediction FastAPI'}
# Create prediction endpoint
@app.post("/predict")
def predict (df:InputData):
# Prepare the feature and structure them like in the notebook
df = pd.DataFrame([df.dict().values()],columns=df.dict().keys())
print(f"[Info] The inputed dataframe is : {df.to_markdown()}")
age = df['Age']
print(age)
# Scaling the inputs
df_scaled = scaler.transform(df)
# Prediction
raw_prediction = model.predict(df_scaled)
if raw_prediction == 0:
raise HTTPException(status_code=status.HTTP_200_OK, detail="The patient will Not Develop Sepsis")
elif raw_prediction == 1:
raise HTTPException(status_code=status.HTTP_200_OK, detail="The patient Will Develop Sepsis")
else:
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Prediction Error")
if __name__ == "__main__":
uvicorn.run("main:app",reload=True)