AMP-Classifier / app.py
nonzeroexit's picture
Update app.py
4575167 verified
raw
history blame
1.26 kB
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import joblib
import numpy as np
from propy import AAComposition
from sklearn.preprocessing import MinMaxScaler
# Initialize FastAPI app
app = FastAPI()
# Load trained SVM model and scaler
model = joblib.load("SVM.joblib")
scaler = MinMaxScaler()
# Define request schema
class SequenceInput(BaseModel):
sequence: str
def extract_features(sequence: str):
"""Extract Amino Acid Composition (AAC) features and normalize them."""
try:
aac = np.array(list(AAComposition.CalculateAADipeptideComposition(sequence)), dtype=float)
normalized_features = scaler.fit_transform([aac]) # Don't use fit_transform(), only transform()
return normalized_features
except Exception as e:
raise HTTPException(status_code=400, detail=f"Feature extraction failed: {str(e)}")
@app.post("/predict/")
def predict(input_data: SequenceInput):
"""Predict AMP vs Non-AMP from protein sequence."""
features = extract_features(input_data.sequence)
prediction = model.predict(features)[0]
result = "AMP" if prediction == 1 else "Non-AMP"
return {"prediction": result}
# Run using: uvicorn script_name:app --host 0.0.0.0 --port 8000 --reload