Spaces:
Build error
Build error
| 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() | |