Spark機器學習實戰 (十一) - 文字情感分類專案實戰
0 相關原始碼
將結合前述知識進行綜合實戰,以達到所學即所用。文字情感分類這個專案會將分類演算法、文字特徵提取演算法等進行關聯,使大家能夠對Spark的具體應用有一個整體的感知與瞭解。
1 專案總體概況
2 資料集概述
3 資料預處理
4 文字特徵提取
提取,轉換和選擇特徵
本節介紹了使用特徵的演算法,大致分為以下幾組:
- 提取:從“原始”資料中提取特徵
- 轉換:縮放,轉換或修改特徵
- 選擇:從中選擇一個子集一組更大的特徵區域性敏感雜湊(LSH):這類演算法將特徵變換的各個方面與其他演算法相結合。
(TF-IDF) 是在文字挖掘中廣泛使用的特徵向量化方法,以反映術語對語料庫中的文件的重要性。
用t表示一個術語,用d表示文件,用D表示語料庫。術語頻率TF(t,d)
是術語t出現在文件d中的次數,而文件頻率DF(t,D)
是包含術語的文件數T
如果我們僅使用術語頻率來衡量重要性,那麼過分強調經常出現但很少提供有關文件的資訊的術語非常容易,例如: “a”,“the”和“of”。
如果術語在語料庫中經常出現,則表示它不包含有關特定文件的特殊資訊。
- 反向文件頻率是術語提供的資訊量的數字度量:
其中| D |
是語料庫中的文件總數。由於使用了對數,如果一個術語出現在所有文件中,其IDF值將變為0.
請注意,應用平滑術語以避免語料庫外的術語除以零。
-
TF-IDF
測量僅僅是TF和IDF的乘積
術語頻率和文件頻率的定義有幾種變體。在MLlib中,我們將TF和IDF分開以使它們變得靈活。
TF:HashingTF和CountVectorizer都可用於生成術語頻率向量。
HashingTF
是一個轉換器,它接受一組術語並將這些集合轉換為固定長度特徵向量。
在文字處理中,“一組術語”可能是一些單詞。 HashingTF
利用雜湊技巧。通過應用雜湊函式將原始特徵對映到索引(術語)。這裡使用的雜湊函式是MurmurHash 3.然後,基於對映的索引計算術語頻率。這種方法避免了計算全域性術語到索引對映的需要,這對於大型語料庫來說可能是昂貴的,但是它遭受潛在的雜湊衝突,其中不同的原始特徵可能在雜湊之後變成相同的術語。為了減少衝突的可能性,我們可以增加目標特徵維度,即雜湊表的桶的數量。由於雜湊值的簡單模數用於確定向量索引,因此建議使用2的冪作為要素維度,否則要素將不會均勻對映到向量索引。預設要素尺寸為218 = 262,144218 = 262,144。可選的二進位制切換引數控制術語頻率計數。設定為true時,所有非零頻率計數都設定為1.這對於模擬二進位制而非整數計數的離散概率模型特別有用。
CountVectorizer將文字文件轉換為術語計數向量
IDF:IDF是一個Estimator,它適合資料集並生成IDFModel。 IDFModel採用特徵向量(通常從HashingTF或CountVectorizer建立)並縮放每個特徵。直觀地說,它降低了在語料庫中頻繁出現的特徵。
注意:spark.ml不提供文字分割工具.
在下面的程式碼段中,我們從一組句子開始。我們使用Tokenizer將每個句子分成單詞。對於每個句子(單詞包),我們使用HashingTF將句子雜湊為特徵向量。我們使用IDF重新縮放特徵向量;這通常會在使用文字作為功能時提高效能。然後我們的特徵向量可以傳遞給學習演算法。
import org.apache.spark.ml.feature.{HashingTF, IDF, Tokenizer}
val sentenceData = spark.createDataFrame(Seq(
(0.0, "Hi I heard about Spark"),
(0.0, "I wish Java could use case classes"),
(1.0, "Logistic regression models are neat")
)).toDF("label", "sentence")
val tokenizer = new Tokenizer().setInputCol("sentence").setOutputCol("words")
val wordsData = tokenizer.transform(sentenceData)
val hashingTF = new HashingTF()
.setInputCol("words").setOutputCol("rawFeatures").setNumFeatures(20)
val featurizedData = hashingTF.transform(wordsData)
// alternatively, CountVectorizer can also be used to get term frequency vectors
val idf = new IDF().setInputCol("rawFeatures").setOutputCol("features")
val idfModel = idf.fit(featurizedData)
val rescaledData = idfModel.transform(featurizedData)
rescaledData.select("label", "features").show()
5 訓練分類模型
- 程式碼
- data.show(false)
- println(neg.count(),data.count())//合併
- result.show(false)
- println(s"""accuracy is $accuracy""")
6 Spark機器學習實踐系列
相關文章
- 深度學習專案實戰:垃圾分類系統深度學習
- 實戰 | 如何上線一個機器學習專案?機器學習
- 圖卷積實戰——文字分類卷積文字分類
- JavaScript玩轉機器學習-Tensorflow.js專案實戰JavaScript機器學習JS
- 機器學習實戰專案-預測數值型迴歸機器學習
- 《機器學習實戰》學習大綱機器學習
- 如何用Python和機器學習訓練中文文字情感分類模型?Python機器學習模型
- python機器學習實戰(二)Python機器學習
- Pytext實戰-構建一個文字分類器有多快文字分類
- 機器學習專案實戰----信用卡欺詐檢測(二)機器學習
- 機器學習專案實戰----信用卡欺詐檢測(一)機器學習
- 【機器學習】帶你3分鐘看完《機器學習實戰》總結篇機器學習
- 用機器學習實現情感分析機器學習
- 機器學習專案實戰----泰坦尼克號獲救預測(二)機器學習
- 面向機器智慧的TensorFlow實戰8:序列分類
- 回顧·機器學習/深度學習工程實戰機器學習深度學習
- 如何用機器學習對文字分類機器學習文字分類
- 基於sklearn的分類器實戰
- 機器學習30天進階實戰機器學習
- 機器學習入門實戰疑問機器學習
- 機器學習實戰(十三):Convolutional Neural Networks機器學習
- 機器學習實戰之Logistic迴歸機器學習
- 樸素貝葉斯分類-實戰篇-如何進行文字分類文字分類
- 0802-程式設計實戰_貓和狗二分類_深度學習專案架構程式設計深度學習架構
- 【Python機器學習實戰】聚類演算法(1)——K-Means聚類Python機器學習聚類演算法
- NLP專案實戰02:英文文字識別
- 《機器學習實戰》第一章 機器學習基礎機器學習
- 基於Sklearn機器學習程式碼實戰機器學習
- 《scikit-learn機器學習實戰》簡介機器學習
- 機器學習實戰 | SKLearn最全應用指南機器學習
- 機器學習實戰(一)—— 線性迴歸機器學習
- 機器學習實戰6(SMO演算法)機器學習演算法
- 機器學習實戰(三)決策樹ID3:樹的構建和簡單分類機器學習
- Python爬蟲入門學習實戰專案(一)Python爬蟲
- Shell變數有哪些分類?linux運維實戰學習變數Linux運維
- LittleFox專案實戰
- HarmonyOS 實戰專案
- python實戰專案Python