分类:情感分析

此课程是Coursera 华盛顿大学开设的Machine Learning 专项的第一部分内容,仅做笔记、学习使用。

背景

通过用户对amazon 产品的评价,通过对评价文本进行分词,建立分类器分辨用户评价属于好评还是差评(不涉及中评)。使用第三方库为Graphlab Create。

线性分类器创建及使用

对于句子进行分词,将带有情感倾向的词语拿出来进行权重(weight), e.g.{‘good’:1,’great’:1.5,’terrible’:-2.1,’awful’:-3.1},计算一个句子中出现的这些词语的个数乘以权重,最后得分大于0,则此句话为积极评价,否则为消极评价,这是一个非常简单的线性分类器。其实,权重如何来?人为设定么?什么又是积极的词?消极的词?由于其是一个概论,并未详细探讨算法。其实流行的还是朴素贝叶斯按照每个词出现的频率算概率。
分类:情感分析_第1张图片

分类器的评价

一个概念:majority class classifier(多数类分类器),就是说假设分类标签有0和1,共有1500个样本,标签1占1000个样本,则标签1就为majority class classifier,它的准确率为1000/1500=0.666,而你所建立的分类器预测为1的准确率必须要大于0.666,这样才有意义,说白了就是分类器预测准确率要大于随便猜的准确率。

* 准确率不能说明一切 *

如果数据出现不平衡,或者说我们希望某一类尽可能多的出现,则就需要关注混淆矩阵(confusion matrices)。精确度、查全率(召回率)的问题,
分类:情感分析_第2张图片

训练数据量与准确率的关系

总的来说,训练数据量越大,准确度越高。涉及到偏差和方差的问题,模型越复杂(特征值种类越多),偏差越小,方差大,在训练模型上准确率越高,过度关注与训练数据,泛化能力差,容易出现过拟合现象。
分类:情感分析_第3张图片


Assignment

import graphlab

products=graphlab.SFrame('amazon_baby.gl/') #导入结构为SFrame的Amazon数据

分类:情感分析_第4张图片

products['count_words']=graphlab.text_analytics.count_words(products['review']) #对评论语句进行分词

products=products[products['rating']!=3]

products['sentiment']=products['rating']>=4 #将rating>4 分类为1,<4 分类为0。 

有了features,labels可以进行分类器训练

train_data,test_data=products.random_split(0.8,seed=0)

sentiment_model=graphlab.logistic_classifier.create(train_data,target='sentiment',features=['count_words'],validation_set=test_data)

sentiment_model.evaluate(test_data,metric='roc_curve') #评价模型

具体代码见github: https://github.com/HaishuoFang/Coursera-ML/blob/master/week3/Analyze%20Proudct%20Sentiment%20Assginment.ipynb

你可能感兴趣的:(coursera机器学习笔记)