Spaces:
Build error
Build error
File size: 2,513 Bytes
102763c 3418138 |
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 |
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import gradio as gr
# Load and preprocess the data
file_path = 'homework01_text_data_group16.csv' # Update with your file path
data = pd.read_csv(file_path)
sentences = data['reviews']
labels = data['class']
# Split the data
sentence_train, sentence_test, y_train, y_test = train_test_split(
sentences, labels, test_size=0.2, random_state=42
)
# Bag-of-Words vectorization
vectorizer = CountVectorizer()
X_train = vectorizer.fit_transform(sentence_train)
X_test = vectorizer.transform(sentence_test)
# Train models
knn_model = KNeighborsClassifier(n_neighbors=3).fit(X_train, y_train)
logistic_model = LogisticRegression().fit(X_train, y_train)
svm_model = SVC(kernel='linear', probability=True).fit(X_train, y_train)
rf_model = RandomForestClassifier(n_estimators=100).fit(X_train, y_train)
# Gradio app function
def predict_sentiment(text, model_name):
vectorized_text = vectorizer.transform([text])
if model_name == 'KNN':
probabilities = knn_model.predict_proba(vectorized_text)[0]
elif model_name == 'Logistic Regression':
probabilities = logistic_model.predict_proba(vectorized_text)[0]
elif model_name == 'SVM':
probabilities = svm_model.predict_proba(vectorized_text)[0]
elif model_name == 'Random Forest':
probabilities = rf_model.predict_proba(vectorized_text)[0]
else:
return "Invalid Model Selection"
prediction = "Positive" if probabilities[1] > probabilities[0] else "Negative"
prob_positive = round(probabilities[1] * 100, 2)
prob_negative = round(probabilities[0] * 100, 2)
return f"Prediction: {prediction}", f"Positive: {prob_positive}%\nNegative: {prob_negative}%"
# Define the Gradio interface
interface = gr.Interface(
fn=predict_sentiment,
inputs=["text", gr.Dropdown(["KNN", "Logistic Regression", "SVM", "Random Forest"])],
outputs=[gr.Textbox(label="Prediction"), gr.Textbox(label="Details (Probabilities)")],
title="Sentiment Analysis with Multiple Models",
description="Enter a text review and select a model to predict sentiment and view probabilities."
)
# Launch the app
if __name__ == "__main__":
interface.launch()
|