本文目錄一覽:
- 1、如何用Python做情感分析
- 2、用SVM怎麼解決中文微博情感的分析問題
- 3、用python找文獻,並從文本中分析情緒,做一個數據分析
- 4、如何利用 Python 實現 SVM 模型
- 5、R語言中的情感分析與機器學習
- 6、怎樣用python實現SVM分類器,用於情感分析的二分類
如何用Python做情感分析
可以使用snownlp包,也可以用nltk 和 scikit-learn 結合,或者自己寫算法實現。
簡單話就是情感詞典的匹配,想提高效果的需要考慮特徵之間的搭配,語法順序等,可以查詢搜索相關的入門例子和算法詳細了解。
用SVM怎麼解決中文微博情感的分析問題
sentiment analyze 可以看成是一個多分類問題
對於中文文檔,用word2vec等工具提取出文本特徵,然後直接用多分類向量機進行訓練~
用python找文獻,並從文本中分析情緒,做一個數據分析
到你的系統“終端”(macOS, Linux)或者“命令提示符”(Windows)下,進入我們的工作目錄demo,執行以下命令。
pip install snownlppip install -U textblobpython -m textblob.download_corpora
好了,至此你的情感分析運行環境已經配置完畢。
在終端或者命令提示符下鍵入:
jupyter notebook
你會看到目錄里之前的那些文件,忽略他們就好。
如何利用 Python 實現 SVM 模型
我先直觀地闡述我對SVM的理解,這其中不會涉及數學公式,然後給出Python代碼。
SVM是一種二分類模型,處理的數據可以分為三類:
線性可分,通過硬間隔最大化,學習線性分類器
近似線性可分,通過軟間隔最大化,學習線性分類器
線性不可分,通過核函數以及軟間隔最大化,學習非線性分類器
線性分類器,在平面上對應直線;非線性分類器,在平面上對應曲線。
硬間隔對應於線性可分數據集,可以將所有樣本正確分類,也正因為如此,受噪聲樣本影響很大,不推薦。
軟間隔對應於通常情況下的數據集(近似線性可分或線性不可分),允許一些超平面附近的樣本被錯誤分類,從而提升了泛化性能。
如下圖:
實線是由硬間隔最大化得到的,預測能力顯然不及由軟間隔最大化得到的虛線。
對於線性不可分的數據集,如下圖:
我們直觀上覺得這時線性分類器,也就是直線,不能很好的分開紅點和藍點。
但是可以用一個介於紅點與藍點之間的類似圓的曲線將二者分開,如下圖:
我們假設這個黃色的曲線就是圓,不妨設其方程為x^2+y^2=1,那麼核函數是幹什麼的呢?
我們將x^2映射為X,y^2映射為Y,那麼超平面變成了X+Y=1。
那麼原空間的線性不可分問題,就變成了新空間的(近似)線性可分問題。
此時就可以運用處理(近似)線性可分問題的方法去解決線性不可分數據集的分類問題。
—————————————————————————————————————————
以上我用最簡單的語言粗略地解釋了SVM,沒有用到任何數學知識。但是沒有數學,就體會不到SVM的精髓。因此接下來我會用盡量簡潔的語言敘述SVM的數學思想,如果沒有看過SVM推導過程的朋友完全可以跳過下面這段。
對於求解(近似)線性可分問題:
由最大間隔法,得到凸二次規劃問題,這類問題是有最優解的(理論上可以直接調用二次規劃計算包,得出最優解)
我們得到以上凸優化問題的對偶問題,一是因為對偶問題更容易求解,二是引入核函數,推廣到非線性問題。
求解對偶問題得到原始問題的解,進而確定分離超平面和分類決策函數。由於對偶問題里目標函數和分類決策函數只涉及實例與實例之間的內積,即xi,xj。我們引入核函數的概念。
拓展到求解線性不可分問題:
如之前的例子,對於線性不可分的數據集的任意兩個實例:xi,xj。當我們取某個特定映射f之後,f(xi)與f(xj)在高維空間中線性可分,運用上述的求解(近似)線性可分問題的方法,我們看到目標函數和分類決策函數只涉及內積f(xi),f(xj)。由於高維空間中的內積計算非常複雜,我們可以引入核函數K(xi,xj)=f(xi),f(xj),因此內積問題變成了求函數值問題。最有趣的是,我們根本不需要知道映射f。精彩!
我不準備在這裡放推導過程,因為已經有很多非常好的學習資料,如果有興趣,可以看:CS229 Lecture notes
最後就是SMO算法求解SVM問題,有興趣的話直接看作者論文:Sequential Minimal Optimization:A Fast Algorithm for Training Support Vector Machines
我直接給出代碼:SMO+SVM
在線性可分數據集上運行結果:
圖中標出了支持向量這個非常完美,支持向量都在超平面附近。
在線性不可分數據集上運行結果(200個樣本):
核函數用了高斯核,取了不同的sigma
sigma=1,有189個支持向量,相當於用整個數據集進行分類。
sigma=10,有20個支持向量,邊界曲線能較好的擬合數據集特點。
我們可以看到,當支持向量太少,可能會得到很差的決策邊界。如果支持向量太多,就相當於每次都利用整個數據集進行分類,類似KNN。
R語言中的情感分析與機器學習
來源 | 雪晴數據網
利用機器學習可以很方便的做情感分析。本篇文章將介紹在R語言中如何利用機器學習方法來做情感分析。在R語言中,由Timothy P.Jurka開發的情感分析以及更一般的文本挖掘包已經得到了很好的發展。你可以查看下sentiment包以及夢幻般的RTextTools包。實際上,Timothy還寫了一個針對低內存下多元Logistic回歸(也稱最大熵)的R包maxtent。
然而,RTextTools包中不包含樸素貝葉斯方法。e1071包可以很好的執行樸素貝葉斯方法。e1071是TU Wien(維也納科技大學)統計系的一門課程。這個包的主要開發者是David Meyer。
我們仍然有必要了解文本分析方面的知識。用R語言來處理文本分析已經是公認的事實(詳見R語言中的自然語言處理)。tm包算是其中成功的一部分:它是R語言在文本挖掘應用中的一個框架。它在文本清洗(詞幹提取,刪除停用詞等)以及將文本轉換為詞條-文檔矩陣(dtm)方面做得很好。這裡是對它的一個介紹。文本分析最重要的部分就是得到每個文檔的特徵向量,其中詞語特徵最重要的。當然,你也可以將單個詞語特徵擴展為雙詞組,三連詞,n-連詞等。在本篇文章,我們以單個詞語特徵為例做演示。
注意,在R中用ngram包來處理n-連詞。在過去,Rweka包提供了函數來處理它,感興趣的可以查看這個案例。現在,你可以設置RTextTools包中create_matrix函數的參數ngramLength來實現它。
第一步是讀取數據:
創建詞條-文檔矩陣:
現在,我們可以用這個數據集來訓練樸素貝葉斯模型。注意,e1071要求響應變量是數值型或因子型的。我們用下面的方法將字符串型數據轉換成因子型:
測試結果準確度:
顯然,這個結果跟python得到的結果是相同的(這篇文章是用python得到的結果)。
其它機器學習方法怎樣呢?
下面我們使用RTextTools包來處理它。
首先,指定相應的數據:
其次,用多種機器學習算法訓練模型:
現在,我們可以使用訓練過的模型做測試集分類:
準確性如何呢?
得到模型的結果摘要(特別是結果的有效性):
結果的交叉驗證:
結果可在我的Rpub頁面找到。可以看到,maxent的準確性跟樸素貝葉斯是一樣的,其它方法的結果準確性更差。這是可以理解的,因為我們給的是一個非常小的數據集。擴大訓練集後,利用更複雜的方法我們對推文做的情感分析可以得到一個更好的結果。示例演示如下:
推文情感分析
數據來自victornep。victorneo展示的是用python對推文做情感分析。這裡,我們用R來處理它:
讀取數據:
首先,嘗試下樸素貝葉斯
然後,嘗試其他方法:
這裡,我們也希望得到正式的測試結果。包括:
1.analytics@algorithm_summary:包括精確度,召回率,準確率,F-scores的摘要
2.analytics@label_summary:類標籤摘要
3.analytics@document_summary:所有數據和得分的原摘要
4.analytics@ensemble_summary:所有 精確度/覆蓋度 比值的摘要
現在讓我們看看結果:
與樸素貝葉斯方法相比,其它算法的結果更好,召回精度高於0.95。結果可在Rpub查看
原文鏈接:http://
怎樣用python實現SVM分類器,用於情感分析的二分類
這句話應該不是說你feature太多了,而是說for循環中,使用了兩個變量去unpack featuresets太多了。所以應該是你的數據結構有問題,featuresets可能不是適合兩個變量來解包的數據結構,或者中文編碼有問題。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/257684.html