Spark機器學習實戰 (十一) - 文本情感分類項目實戰

      網友投稿 839 2022-05-29

      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分開以使它們變得靈活。

      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()

      1

      2

      3

      4

      5

      6

      Spark機器學習實戰 (十一) - 文本情感分類項目實戰

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      5 訓練分類模型

      代碼

      data.show(false)

      println(neg.count(),data.count())//合并

      result.show(false)

      println(s""“accuracy is $accuracy”"")

      6 Spark機器學習實踐系列

      基于Spark的機器學習實踐 (一) - 初識機器學習

      基于Spark的機器學習實踐 (二) - 初識MLlib

      基于Spark的機器學習實踐 (三) - 實戰環境搭建

      基于Spark的機器學習實踐 (四) - 數據可視化

      基于Spark的機器學習實踐 (六) - 基礎統計模塊

      基于Spark的機器學習實踐 (七) - 回歸算法

      基于Spark的機器學習實踐 (八) - 分類算法

      基于Spark的機器學習實踐 (九) - 聚類算法

      基于Spark的機器學習實踐 (十) - 降維算法

      基于Spark的機器學習實踐(十一) - 文本情感分類項目實戰

      X 聯系我

      Java交流群

      博客

      知乎

      Github

      spark 機器學習

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:關于KrakenCryptor(2.0.7)勒索病毒的安全預警
      下一篇:基于Spark的機器學習實踐 (九) - 聚類算法
      相關文章
      午夜亚洲av永久无码精品| 亚洲精品免费观看| 亚洲精品午夜国产va久久| 亚洲精品人成电影网| 久久久影院亚洲精品| 久久久久久A亚洲欧洲AV冫| 亚洲无码精品浪潮| 国产国拍亚洲精品福利 | 亚洲偷自精品三十六区| 亚洲午夜精品在线| 亚洲最大福利视频| 亚洲最大福利视频| 亚洲成a人无码亚洲成av无码| 亚洲最大的成人网| 亚洲国产精品无码观看久久| 亚洲爆乳AAA无码专区| 亚洲 自拍 另类小说综合图区| 亚洲精品国产电影| 亚洲午夜福利AV一区二区无码| 国产亚洲综合色就色| 久久久久亚洲av无码尤物| 色噜噜综合亚洲av中文无码| 亚洲精品视频在线播放| 中文字幕 亚洲 有码 在线| 亚洲免费综合色在线视频| 欧美亚洲精品一区二区| 亚洲国产成人影院播放| 中文字幕亚洲第一| 亚洲av无码一区二区三区乱子伦 | 亚洲AV永久无码区成人网站| 亚洲国产二区三区久久| 久久久久亚洲AV无码专区首JN| 亚洲第一页在线观看| 亚洲成a人片在线观看精品| 亚洲国产精品成人AV在线| 亚洲成a人一区二区三区| 亚洲人成图片小说网站| 91久久亚洲国产成人精品性色 | 亚洲精品二三区伊人久久| 亚洲AV第一成肉网| 国产亚洲精品无码拍拍拍色欲|