1. 程式人生 > >分類:情感分析

分類:情感分析

此課程是Coursera 華盛頓大學開設的Machine Learning 專項的第一部分內容,僅做筆記、學習使用。

背景

通過使用者對amazon 產品的評價,通過對評價文字進行分詞,建立分類器分辨使用者評價屬於好評還是差評(不涉及中評)。使用第三方庫為Graphlab Create。

線性分類器建立及使用

對於句子進行分詞,將帶有情感傾向的詞語拿出來進行權重(weight), e.g.{‘good’:1,’great’:1.5,’terrible’:-2.1,’awful’:-3.1},計算一個句子中出現的這些詞語的個數乘以權重,最後得分大於0,則此句話為積極評價,否則為消極評價,這是一個非常簡單的線性分類器。其實,權重如何來?人為設定麼?什麼又是積極的詞?消極的詞?由於其是一個概論,並未詳細探討演算法。其實流行的還是樸素貝葉斯按照每個詞出現的頻率算概率。
這裡寫圖片描述

分類器的評價

一個概念:majority class classifier(多數類分類器),就是說假設分類標籤有0和1,共有1500個樣本,標籤1佔1000個樣本,則標籤1就為majority class classifier,它的準確率為1000/1500=0.666,而你所建立的分類器預測為1的準確率必須要大於0.666,這樣才有意義,說白了就是分類器預測準確率要大於隨便猜的準確率。

* 準確率不能說明一切 *

如果資料出現不平衡,或者說我們希望某一類儘可能多的出現,則就需要關注混淆矩陣(confusion matrices)。精確度、查全率(召回率)的問題,
這裡寫圖片描述

訓練資料量與準確率的關係

總的來說,訓練資料量越大,準確度越高。涉及到偏差和方差的問題,模型越複雜(特徵值種類越多),偏差越小,方差大,在訓練模型上準確率越高,過度關注與訓練資料,泛化能力差,容易出現過擬合現象。
這裡寫圖片描述

Assignment

import graphlab

products=graphlab.SFrame('amazon_baby.gl/') #匯入結構為SFrame的Amazon資料

這裡寫圖片描述

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') #評價模型