注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Explore in Data

Just enjoy it.

 
 
 

日志

 
 

Python 文本挖掘:使用机器学习方法进行情感分析(四、使用分类器进行分类)  

2013-11-20 11:25:08|  分类: Python 文本挖掘 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
为了不用每次分类之前都要训练一次数据,所以可以在用开发集找出最佳分类器后,把最佳分类器存储下来以便以后使用。然后再使用这个分类器对文本进行分类。

一、使用测试集测试分类器的最终效果

word_scores = create_word_bigram_scores() #使用词和双词搭配作为特征

best_words = find_best_words(word_scores, 1500) #特征维度1500

posFeatures = pos_features(best_word_features)
negFeatures = neg_features(best_word_features)

trainSet = posFeatures[:500] + negFeatures[:500] #使用了更多数据
testSet = posFeatures[500:] + negFeatures[500:]
test, tag_test = zip(*testSet)

def final_score(classifier):
classifier = SklearnClassifier(classifier)
classifier.train(trainSet)
pred = classifier.batch_classify(test)
return accuracy_score(tag_test, pred)

print final_score(BernoulliNB()) #使用开发集中得出的最佳分类器

其结果是很给力的:

0.979166666667


二、把分类器存储下来
(存储分类器和前面没有区别,只是使用了更多的训练数据以便分类器更为准确)

word_scores = create_word_bigram_scores()

best_words = find_best_words(word_scores, 1500)

posFeatures = pos_features(best_word_features)
negFeatures = neg_features(best_word_features)

trainSet = posFeatures + negFeatures

BernoulliNB_classifier = SklearnClassifier(BernoulliNB())
BernoulliNB_classifier.train(trainSet)
pickle.dump(BernoulliNB_classifier, open('D:/code/sentiment_test/classifier.pkl','w'))


在存储了分类器之后,就可以使用该分类器来进行分类了。
三、使用分类器进行分类,并给出概率值
给出概率值的意思是用分类器判断一条评论文本的积极概率和消极概率。给出类别也是可以的,也就是可以直接用分类器判断一条评论文本是积极的还是消极的,但概率可以提供更多的参考信息,对以后判断评论的效用也是比单纯给出类别更有帮助。

1. 把文本变为特征表示的形式
要对文本进行分类,首先要把文本变成特征表示的形式。而且要选择和分类器一样的特征提取方法。

#! /usr/bin/env python2.7
#coding=utf-8


moto = pickle.load(open('D:/code/review_set/senti_review_pkl/moto_senti_seg.pkl','r')) #载入文本数据


def extract_features(data):
feat = []
for i in data:
feat.append(best_word_features(i))
return feat


moto_features = extract_features(moto) #把文本转化为特征表示的形式

注:载入的文本数据已经经过分词和去停用词处理。

2. 对文本进行分类,给出概率值

import pickle

import sklearn


clf = pickle.load(open('D:/code/sentiment_test/classifier.pkl')) #载入分类器

pred = clf.batch_prob_classify(moto_features) #该方法是计算分类概率值的
p_file = open('D:/code/sentiment_test/score/Motorala/moto_ml_socre.txt','w') #把结果写入文档
for i in pred:
p_file.write(str(i.prob('pos')) + ' ' + str(i.prob('neg')) + '\n')
p_file.close()

最后分类结果如下图:
Python 文本挖掘:使用机器学习方法进行情感分析(四、使用分类器进行分类) - rzcoding - Explore in Data

 前面是积极概率,后面是消极概率


折腾了这么久就为了搞这么一个文件出来。。。这伤不起的节奏已经无人阻挡了吗。。。
不过这个结果确实比词典匹配准确很多,也算欣慰了。。。
  评论这张
 
阅读(5805)| 评论(25)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017