So i have this simple sentiment analysis app here
so far i can only print its result in Positive/negative/neutral but i want it to also print it's probability on why it's a Positive sentence.
like this one
Positive
85.2%
Can anyone help me?
Here's my code
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import MultinomialNB
from sklearn.preprocessing import StandardScaler
import re
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
from sklearn.utils import shuffle
from sklearn.metrics import accuracy_score
from sklearn.metrics import confusion_matrix,f1_score,precision_score,recall_score
wordnet_lemmatizer = WordNetLemmatizer()
df = pd.read_csv('Tweets.csv')
def normalizer(comment):
only_letters = re.sub("[^a-zA-Z]", " ", comment)
only_letters = only_letters.lower()
only_letters = only_letters.split()
filtered_result = [word for word in only_letters if word not in stopwords.words('english')]
lemmas = [wordnet_lemmatizer.lemmatize(t) for t in filtered_result]
lemmas = ' '.join(lemmas)
return lemmas
df = shuffle(df)
y = df['airline_sentiment']
x = df.text.apply(normalizer)
vectorizer = CountVectorizer()
x_vectorized = vectorizer.fit_transform(x)
train_x,val_x,train_y,val_y = train_test_split(x_vectorized,y)
regressor = LogisticRegression(multi_class='multinomial', solver='newton-cg')
model = regressor.fit(train_x, train_y)
params = {'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000] }
gs_clf = GridSearchCV(model, params, n_jobs=1, cv=5)
gs_clf = gs_clf.fit(train_x, train_y)
model = gs_clf.best_estimator_
#_f1 = f1_score(val_y, y_pred, average='micro')
#_confusion = confusion_matrix(val_y, y_pred)
#__precision = precision_score(val_y, y_pred, average='micro')
#_recall = recall_score(val_y, y_pred, average='micro')
#_statistics = {'f1_score': _f1,
# 'confusion_matrix': _confusion,
# 'precision': __precision,
# 'recall': _recall
# }
y_pred = model.predict(val_x)
print(accuracy_score(val_y, y_pred))
test_feature = vectorizer.transform(['The Movie is good'])
print(model.predict(test_feature,))
and my current output is:
0.7846994535519126
['positive']
prediction_probablities = model.predict_proba(val_x)
for additional information:
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html