【华盛顿大学-机器学习】1、A Case Study 1.2、classification:文本情感分析

classification

  • 分类属于监督学习,通过对不同特征值的分析来判断它属于拿一类
  • 二元分类(logistic回归、线性回归)
  • 多元分类(多元逻辑回归、fisher判别分析等)

分类器

【华盛顿大学-机器学习】1、A Case Study 1.2、classification:文本情感分析_第1张图片

Linear Classifiers

【华盛顿大学-机器学习】1、A Case Study 1.2、classification:文本情感分析_第2张图片

  • 首先将文本进行分隔处理,进而对单个word给予权重来评价

【华盛顿大学-机器学习】1、A Case Study 1.2、classification:文本情感分析_第3张图片

决定标准

【华盛顿大学-机器学习】1、A Case Study 1.2、classification:文本情感分析_第4张图片

  • 通过上面处理过得到的带有情感评价词进行加权求和,若结果大于0,则是positive的评价,若结果小于0,则是negtive的评价,模型如下:
    【华盛顿大学-机器学习】1、A Case Study 1.2、classification:文本情感分析_第5张图片

Accuracy

  • 模型正确率 accuracy = correct number/total number
  • 模型错误率 error = 1 - accuracy

什么是好的分类?

  • 不能忽视原来数据的分布情况
  • 例如抛硬币,乱猜也有0.5的正确率
  • 对于k种同等概率的分布,乱猜的概率为1/k
  • 因此,模型的正确率至少要比乱猜的概率高

for example:

  • 对于垃圾邮件的分类,正确率90%够好吗?
  • 根据数据统计,2010年90%的邮件都是垃圾邮件,因此机器只要猜邮件是垃圾邮件,就能得到90%的正确率

type of mistake

【华盛顿大学-机器学习】1、A Case Study 1.2、classification:文本情感分析_第6张图片

  • 拒真错误
  • 取伪错误

Learning curve

【华盛顿大学-机器学习】1、A Case Study 1.2、classification:文本情感分析_第7张图片

  • 掌握的数据越多,得到的误差就会越小,直至接近于0
    【华盛顿大学-机器学习】1、A Case Study 1.2、classification:文本情感分析_第8张图片

代码部分

  • Build the word count vector for each reviem
products['word_count'] = graphlab.text_analytics.count_words(products['review'])#使用graphlab将文本中的单词和个数分出来
  • 创建虚拟变量来判断分类结果
products['sentiment']=products['rating']>=4 # positive为1,negtive为2
  • 训练一个分类器
train_data, test_data = products.random_split(.8,seed=0)#先将数据分为测试集和训练集
sentiment_model = graphlab.logistic_classifier.create(train_data,target='sentiment',
                                                      features=['word_count'],
                                                     validation_set=test_data)#分类特征选择为word_count
  • Evaluate the sentiment model
sentiment_model.evaluate(test_data,metric='roc_curve')#roc曲线
  • 运用模型进行概率预测
giraffe_reviews['predicted_sentiment']=sentiment_model.predict(giraffe_reviews
                                                               ,output_type='probability')```
- 分隔的文本进行在分隔

```python
products=products.stack('word_count',new_column_name=['word','count'])#使用stack函数结果返回word和count两列

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