您的位置:首頁>科技>正文

機器學習不神秘!手把手教你用R語言打造文本分類器

簡單安裝幾個R套裝軟體, 你就直接在自己電腦上打造出一個文本分類器, 用進行機器來評估人類寫作。

本文是一篇極簡的上手教程,

它想用清晰明瞭的步驟告訴讀者, 機器學習不神秘, 關鍵是動手!僅需七步, 你也一樣能“作詩”, 完全無需像曹子建那樣“才高八斗”。

作者 | Fedor Karmanov

翻譯 | AI科技大本營(rgznai100)

參與 | Joe, 波波

在本教程中, 我們將用到大量的R套裝軟體, 以快速實現一個用於亞馬遜評論資料的分類器演算法。 該分類器能以極高的準確度來判斷一個評論是正面的還是負面的。

為了明確地給出分類演算法的工作用例, 這裡採用了斯坦福網路分析專案(Stanford Network Analysis Project)的資料, 該資料已被解析成小的文字區塊, 並進行過適當的標注。 你可以從它的Github代碼庫獲取到這些資料。

斯坦福網路分析專案

https://snap.stanford.edu/data/web-Amazon.html

Github連結

https://github.com/Rogerh91/Springboard-Blog-Tutorials/tree/master/Machine%20Learning%20with%20R%20Tutorial

開始前的資料策管, 是整個資料處理過程中至關重要的一環:要確保所用的資訊都已被恰當地分類和標注。

在機器學習中, 資料的標注和分類的品質往往能決定整個模型的準確度。 也就是說, 熟悉一下檔內容在被如何組織與標注, 會非常有價值:“Train”資料夾包含了400條被標為“Neg”(negative, 負面)的1星書評, 與400條被標為“Pos”(positive, “正面”)的5星評論。 這就是我們的“黃金標準”:我們根據使用者撰寫書評時所給的評分星級來判斷評論內容正面與否。 我們使用“Train”資料夾內的資料來訓練分類器, 然後它用訓練所得的規律來推測“Test”資料夾內的評論是正面還是負面。

通過這種方式, 我們就能打造出一個基於機器學習的文本分類器, 它可以準確判斷每條亞馬遜書評正面與否, 或任何短文本資訊的正面與否, 以此來評估給定產品的消費體驗。

從更大的視角看, 這一過程所演示的是如何用最簡單的R語言來學習並預測人類寫作。 這是一個用R語言進行機器學習的有效用例。

該教程運行在R語言的Jupyter Notebook環境:

http://blog.revolutionanalytics.com/2015/09/using-r-with-jupyter-notebooks.html

你可以在任何能編譯並運行R腳本的平臺上來練習。

我們將使用R語言的“caret”、“tm”和“kernlab”包來解析和讀取資料, 然後進行模型訓練。 如果你沒裝這些包, 請用下面的命令安裝。

關於R套裝軟體如何安裝的更多說明, 請參考這裡

https://www.r-bloggers.com/installing-r-packages/。

其中, “dplyr”包和” splitstackshape”是用來幫我們控制資料的, 並把它們組織成模型能夠使用的資料。 接著, 讓我們啟動這些已安裝好的R套裝軟體, 並展開機器學習的實踐操作。

第一步是導入並清洗所有的資料。 因此, 我們將使用”tm”包, 它用 ”VCorpus” 函數和 ”tm_map” 函數來使資料變得可用。

下面將用到大段大段的代碼塊, 我們希望其中的注釋能有助於你理解裡面的機制。

1. 導入並清洗數據

2. 為訓練資料創建文本矩陣

3. 重複以上兩步來準備測試資料

上述代碼給出了兩個新的資料矩陣:一個是”data.dtm”, 包含了“Training”資料夾內的所有資料, 另一個是”test.dtm”, 包含了“Test”資料夾內的所有資料。 本教程的絕大部分, 我們都是在跟”train.dtm”打交道, 用於生成、訓練和驗證結果。 先不停地使用訓練資料, 然後再用測試資料進行模型驗證, 這是用R進行機器學習實踐的基本步驟。

以下兩步涉及到資料處理過程中非常重要的兩個方面, 從而能確保分類器很好地工作。

第一步:確保資料集在列向量上一致, 即我們只採用兩個矩陣在列上重疊的資料。

第二步:確保資料都有標籤列,

以注明該文本是“正面”還是“負面”。 因為訓練資料的標注值是已知的, 我們必須從原始檔中把它們分離出來, 並追加到訓練資料的“corpus”列。 而測試資料沒有相應這些標籤, 我們先用一些空值進行填充。

4. 確保測試矩陣和訓練矩陣的列向量一致(找到交集)

5. 獲取訓練資料的正確標注, 並為測試資料設置相應的空值

如果以上步驟的運行都正確無誤, 你可以開始訓練分類器了!

注意:本教程將不對模型作交叉驗證(cross-validation), 但更高水準的用戶或研究者應當創建多個資料包, 並用它們來對模型進行交叉驗證, 從而獲得更加可靠的模型準確值。

不管怎樣, 這裡的模型只會用下面的混淆矩陣(confusion matrix)來進行一次模型準確度驗證。 這將會生成一些指標,以幫助我們計算剛剛建好的預測模型的準確度。

6. 準備好資料集,進行模型訓練並檢驗結果

如上所述,我們用訓練資料來對模型進行訓練和測試。如果一切順利,你應該能看到以下的輸出:

混淆矩陣(confusion matrix)以盡可能簡單的形式給出了最終的輸出結果,以及模型在訓練資料上預測的性能分析。例如“Accuracy”(準確度)表明分類器在訓練資料集上的預測精度:這裡高達92.8%!這就意味著大致有93%的情況,分類器僅根據文本內容就準確地判斷它是正面的還是負面的。

在更嚴謹的場景下,你需要在不同的資料集(通常是隨機從訓練資料集中獲得的子集)上進行同樣的流程,以進行交叉驗證。比如上面的例子,很明顯構建的分類器能非常好地判斷亞馬遜書評是負面的還是正面的。因此,我們進行下一步的測試。我們已經基於使用R進行機器學習的知識,構建了一個非常好的分類器。但是,這個模型還不能用於實踐。幸運的是,在測試資料上運行這個模型,只需修改“df.test”變數即可。

7. 在測試資料上進行最終預測,並標注檔案名

以上代碼表示,預測模型在測試資料上運行並輸出結果”results”。然後,我們使用原始資料行名作為預測結果向量行名,並最終生成測試資料的預測結果。

總的來說,以上使用R構建機器學習模型的流程説明你快速實現一個分類器。它以相當高的準確度區分線上書評的情感種類。當你有大量的使用者評論資料(用來分析某個產品或服務的客戶體驗度),這樣一個分類器非常實用。此外,還能用於幫助研究者構建可以自動清除差評或者好評的演算法。我們希望這個教程能讓你感受到使用R進行機器學習實踐的威力。

原文連結

https://www.springboard.com/blog/machine-learning-with-r/

這將會生成一些指標,以幫助我們計算剛剛建好的預測模型的準確度。

6. 準備好資料集,進行模型訓練並檢驗結果

如上所述,我們用訓練資料來對模型進行訓練和測試。如果一切順利,你應該能看到以下的輸出:

混淆矩陣(confusion matrix)以盡可能簡單的形式給出了最終的輸出結果,以及模型在訓練資料上預測的性能分析。例如“Accuracy”(準確度)表明分類器在訓練資料集上的預測精度:這裡高達92.8%!這就意味著大致有93%的情況,分類器僅根據文本內容就準確地判斷它是正面的還是負面的。

在更嚴謹的場景下,你需要在不同的資料集(通常是隨機從訓練資料集中獲得的子集)上進行同樣的流程,以進行交叉驗證。比如上面的例子,很明顯構建的分類器能非常好地判斷亞馬遜書評是負面的還是正面的。因此,我們進行下一步的測試。我們已經基於使用R進行機器學習的知識,構建了一個非常好的分類器。但是,這個模型還不能用於實踐。幸運的是,在測試資料上運行這個模型,只需修改“df.test”變數即可。

7. 在測試資料上進行最終預測,並標注檔案名

以上代碼表示,預測模型在測試資料上運行並輸出結果”results”。然後,我們使用原始資料行名作為預測結果向量行名,並最終生成測試資料的預測結果。

總的來說,以上使用R構建機器學習模型的流程説明你快速實現一個分類器。它以相當高的準確度區分線上書評的情感種類。當你有大量的使用者評論資料(用來分析某個產品或服務的客戶體驗度),這樣一個分類器非常實用。此外,還能用於幫助研究者構建可以自動清除差評或者好評的演算法。我們希望這個教程能讓你感受到使用R進行機器學習實踐的威力。

原文連結

https://www.springboard.com/blog/machine-learning-with-r/

Next Article
喜欢就按个赞吧!!!
点击关闭提示