Spaces:
Running
Running
import gradio as gr | |
import joblib | |
import numpy as np | |
from propy import AAComposition | |
from sklearn.preprocessing import MinMaxScaler | |
# Load trained SVM model and scaler (Ensure both files exist in the Space) | |
model = joblib.load("SVM.joblib") | |
scaler = MinMaxScaler() | |
def extract_features(sequence): | |
"""Calculate AAC, Dipeptide Composition, and normalize features.""" | |
# Calculate Amino Acid Composition (AAC) and convert to array | |
aac = np.array(list(propy.AAComposition.CalculateAAC(sequence).values())) | |
# Calculate Dipeptide Composition and convert to array | |
dipeptide_comp = np.array(list(propy.AAComposition.CalculateAADipeptideComposition(sequence).values())) | |
# Combine both features (AAC and Dipeptide Composition) | |
features = np.concatenate((aac, dipeptide_comp)) | |
# Normalize using the pre-trained scaler (Ensure the scaler is loaded correctly) | |
normalized_features = scaler.transform([features]) # Don't use fit_transform(), only transform() | |
return normalized_features | |
def predict(sequence): | |
"""Predict AMP vs Non-AMP""" | |
features = extract_features(sequence) | |
prediction = model.predict(features)[0] | |
return "AMP" if prediction == 1 else "Non-AMP" | |
# Create Gradio interface | |
iface = gr.Interface( | |
fn=predict, | |
inputs=gr.Textbox(label="Enter Protein Sequence"), | |
outputs=gr.Label(label="Prediction"), | |
title="AMP Classifier", | |
description="Enter an amino acid sequence to predict whether it's an antimicrobial peptide (AMP) or not." | |
) | |
# Launch app | |
iface.launch(share=True) | |