File size: 4,363 Bytes
f349339 5416df1 f349339 d6bc2ab 8c53a41 263b291 5416df1 206327a d6bc2ab f349339 5416df1 f349339 511693e 8c53a41 56271c1 511a161 6b17ed9 69c141d 8c53a41 7f3c9bc fde5712 8c53a41 206327a 8c53a41 206327a bfd5973 206327a 88041fe bfd5973 88041fe 95f77b2 6614e23 95f77b2 8c53a41 56271c1 6614e23 88041fe 6614e23 56271c1 bfd5973 6b17ed9 511a161 955fee0 9ca17d4 f349339 955fee0 f349339 6b17ed9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
from fastapi import FastAPI, Query, Request, HTTPException
from fastapi.responses import JSONResponse, HTMLResponse
from fastapi.templating import Jinja2Templates
import joblib
import pandas as pd
import numpy as np
from pydantic import BaseModel
from sklearn.pipeline import Pipeline
from sklearn.feature_selection import SelectKBest
from sklearn.ensemble import BaggingClassifier
from xgboost import XGBClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.feature_selection import f_classif
from sklearn.impute import SimpleImputer
app = FastAPI()
templates = Jinja2Templates(directory="templates")
class InputFeatures(BaseModel):
Plasma_glucose: float
Blood_Work_Result_1: float
Blood_Pressure: float
Blood_Work_Result_2: float
Blood_Work_Result_3: float
Body_mass_index: float
Blood_Work_Result_4: float
patients_age: int
# Load the pickled XGBoost model
model_input = joblib.load("model_1.joblib")
@app.post("/sepsis_prediction")
async def predict(input: InputFeatures):
# { Plasma_glucose: float,
# Blood_Work_Result_1: float,
# Blood_Pressure: float,
# Blood_Work_Result_2: float,
# Blood_Work_Result_3: float,
# Body_mass_index: float,
# Blood_Work_Result_4: float,
# patients_age: int
# }
# return input
# Numeric Features
num_attr = [
['Plasma_glucose', 'Blood_Work_Result_1', 'Blood_Pressure',
'Blood_Work_Result_2', 'Blood_Work_Result_3', 'Body_mass_index',
'Blood_Work_Result_4', 'patients_age']]
#creating pipelines
num_pipeline= Pipeline([('imputer', SimpleImputer()),('scaler', StandardScaler())])
full_pipeline=ColumnTransformer([('num_pipe',num_pipeline,num_attr)])
df = pd.DataFrame([input])
full_pipeline.fit(df) # Fit the full pipeline on the DataFrame
final_input = np.array(full_pipeline.transform(df), dtype=np.str)
prediction = model_input.predict(final_input)
XGB = Pipeline([
("col_trans", full_pipeline), # You need to define full_pipeline
("feature_selection", SelectKBest(score_func=f_classif, k='all')),
("model", BaggingClassifier(base_estimator=XGBClassifier(random_state=42)))
])
# df = pd.DataFrame([input])
# final_input = np.array(full_pipeline.fit_transform(df), dtype=np.str) # Check predict_input, maybe it should be XGB
# #prediction = model_input.predict(np.array([final_input]).reshape(1, -1))
# prediction = model_input.predict(final_input)
# full_pipeline = ColumnTransformer([('num_pipe', num_pipeline, num_attr)])
# full_pipeline.fit(df) # Fit the full pipeline on the DataFrame
# #final_input = np.array(full_pipeline.transform(df), dtype=np.str)
#print(model_input)
#df = pd.DataFrame([input])
#final_input = np.array(predict_input.fit_transform(df), dtype = np.str)
return prediction
if __name__ == '__main__':
uvicorn.run("Main:app", reload=True)
# @app.get("/")
# async def read_root():
# return {"message": "Welcome to the Sepsis Prediction API."}
# @app.get("/form/")
# async def show_form():
# @app.post("/predict/")
# async def predict_sepsis(
# request: Request,
# input_data: InputFeatures # Use the Pydantic model for input validation
# ):
# try:
# # Convert Pydantic model to a DataFrame for prediction
# input_df = pd.DataFrame([input_data.dict()])
# # Make predictions using the loaded XGBoost model
# prediction = xgb_model.predict_proba(xgb.DMatrix(input_df))
# # Create a JSON response
# response = {
# "input_features": input_data,
# "prediction": {
# "class_0_probability": prediction[0],
# "class_1_probability": prediction[1]
# }
# }
# return templates.TemplateResponse(
# "display_params.html",
# {
# "request": request,
# "input_features": response["input_features"],
# "prediction": response["prediction"]
# }
# )
# except Exception as e:
# #raise HTTPException(status_code=500, detail="An error occurred while processing the request.")
# raise HTTPException(status_code=500, detail=str(e))
|