分類:情感分析
此課程是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') #評價模型