情感数据分析 - 贝叶斯算法运用

情感数据分析 - 贝叶斯算法运用

使用SKL对微博数据文本进行情感分析

使用环境及工具

anaconda、jupyter

使用到的数据

1、训练集数据(带标签)

2、需要进行分析的数据

3、分词需要的停用词集

代码(含解析)

配置项

import pandas as pd
import re
import jieba as jb
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB,MultinomialNB,BernoulliNB
df = pd.read_csv("wb.csv")
df0 = df[df["label"]==0].head(5000) #数据太大跑不动,取一部分进行训练,数据太少影响评分
df1 = df[df["label"]==1].head(5000)
df2 = df[df["label"]==2].head(5000)
df3 = df[df["label"]==3].head(5000)
df_all = [df0,df1,df2,df3]
df_all = pd.concat(df_all)
del df0,df1,df2,df3
df_all.groupby("label").count()

分词

content_list = []
for text in df_all.review.tolist():
    #单字母的单次去除
    content_list.append([w for w in jb.lcut(text) if len(w)>1])

content_str = [" ".join(x) for x in content_list]

停用词

tfidf = TfidfVectorizer()
tfidf.fit_transform(np.array(content_str))
#读取停用词
stop1 = pd.read_table("stopwords.txt",header=None,names=["words"])
stop2 = pd.read_table("./src/中文停用词库.txt",header=None,names=["words"])
stop3 = pd.read_table("./src/哈工大停用词表.txt",header=None,names=["words"],sep='/n')
stop4 = pd.read_table("./src/四川大学机器智能实验室停用词库.txt",header=None,names=["words"])
stop5 = pd.read_table("./src/stopwords.txt",header=None,names=["words"],sep='/n')
stop1 = stop1.words.map(lambda x:x.strip(" ").strip(",").strip("'")).tolist()
stop2 = stop2.words.tolist()
stop3 = stop3.words.tolist()
stop4 = stop4.words.tolist()
stop5 = stop5.words.tolist()
sw_list = stop1+stop2+stop3+stop4+stop5
#循环使用content_list当中一个单次与sw_list进行比较
content_clear = []  #二维的list
all_clear_word = []  #一维的list,
for line in content_list:
    new_line = []
    for word in line:
        if word not in sw_list:
            new_line.append(word)
            all_clear_word.append(word)
    content_clear.append(new_line)

贝叶斯分类器

data = [" ".join(x) for x in content_clear]
target = df_all.label
Xtr,Xte,Ytr,Yte = train_test_split(data,target)
tfidf = TfidfVectorizer()
Xtr_tfidf = tfidf.fit_transform(Xtr) #部分的特征
Xte_tfidf = tfidf.transform(Xte) #让测试数据执行训练数据的标准,标准化降维
gnb = GaussianNB().fit(Xtr_tfidf.toarray(),Ytr)

#alpha 拉布拉斯修正防止全概率为1
mnb = MultinomialNB(alpha=0.01).fit(Xtr_tfidf,Ytr)
bnb = BernoulliNB(alpha=0.0001).fit(Xtr_tfidf,Ytr)
gnb.score(Xtr_tfidf.toarray(),Ytr)
gnb.score(Xte_tfidf.toarray(),Yte)
mnb.score(Xtr_tfidf.toarray(),Ytr),mnb.score(Xte_tfidf.toarray(),Yte)
bnb.score(Xtr_tfidf.toarray(),Ytr),bnb.score(Xte_tfidf.toarray(),Yte)

预测分析

cf_all = pd.read_excel("wb2.xlsx")
ccc = tfidf.transform(cf_all["内容"])
t = bnb.predict(ccc)# 这里使用
cf_all["t"] = t

```python
on
cf_all = pd.read_excel("wb2.xlsx")
ccc = tfidf.transform(cf_all["内容"])
t = gnb.predict(ccc)
cf_all["t"] = t

cf_all 输出结果
t是预测的情感标签
字段解释:
{0: ‘喜悦’, 1: ‘愤怒’, 2: ‘厌恶’, 3: ‘低落’}

小结
伯努利和多项式选择使用,本文使用的是高斯贝叶斯,评分能有0.7;
数据小白,代码功力浅薄,非常欢迎交流。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不抽烟了丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值