kaggle 电影评论情感分析 贝叶斯分类

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics  import accuracy_score, roc_auc_score, roc_curve
import matplotlib.pyplot as plt

def performance(y_true , predict , color = "g" , ann = True):
    acc = accuracy_score(y_true , predict[:,1] > 0.5)
    auc = roc_auc_score(y_true , predict[:,1])
    fpr , tpr , thr = roc_curve(y_true , predict[:,1])
    plt.figure()
    plt.plot(fpr , tpr )

df = pd.read_csv("labeledTrainData.tsv" , delimiter="\t") #导入数据 tsv是按照\t分割的
print(df.head(50)) #查看数据存储结构
split = 0.7
d_train = df[:int(split * len(df))] #按照7:3的比例分为测试集和训练集
d_test = df[int((split) * len(df)) :]
print(len(df))
print(len(d_train))
print(len(d_test))
vectorizer = CountVectorizer() #初始化单词计数向量器
features = vectorizer.fit_transform(d_train.review) #训练样本特征值
test_features = vectorizer.transform(d_test.review) #测试样本的特征值
i = 45000
j = 10
words = vectorizer.get_feature_names()[i:i+10]
print(words)
print(features[:3 , i:i+10].todense())

NBmodel = MultinomialNB()
NBmodel.fit(features , d_train.sentiment) #训练模型
predict1 = NBmodel.predict_proba(test_features) #返回在每一类对应的概率
print(predict1)
# performance(d_test.sentiment , predict1)
y_true =  d_test.sentiment
predict = predict1
acc = accuracy_score(y_true, predict[:, 1] > 0.5)
print(predict[:,1])
print("准确率为 = %f" % acc)
auc = roc_auc_score(y_true, predict[:, 1])
fpr, tpr, thr = roc_curve(y_true, predict[:, 1])
print(len(fpr))
print(len(tpr))
print(fpr)
print(tpr)
plt.figure()#定义打开figure名字
plt.plot(fpr, tpr) #画图
plt.xlabel("False positive rate")
plt.ylabel("True positive rate")
plt.annotate("Acc: %0.2f" %acc ,(0.2 , 0.7) , size = 14) #注解
plt.annotate("AUC:%0.2f" %auc  ,(0.2 , 0.6) , size = 14)
plt.show()




你可能感兴趣的:(工作相关)