10-day07文本分類

文本分類使用場景

0
1

  • 文本分類任務
    2
  • 文本分類-機器學習
    3
貝葉斯算法

0

  • 應用
    1
    2
  • 在NLP中的應用
    用貝葉斯公式處理文本分類任務
    一個合理假設:
    文本屬于哪個類別,與文本中包含哪些詞相關
    任務:
    知道文本中有哪些詞,預測文本屬于某類別的概率
    3
  • 貝葉斯算法優點
    1.簡單高效
    2.一定的可解釋性
    3.如果樣本覆蓋的好,效果是不錯的
    4.訓練數據可以很好的分批處理
  • 貝葉斯算法缺點
    1.如果樣本不均衡會極大影響先驗概率
    2.對于未見過的特征或樣本,條件概率為零,失去預測的意義(可以引入平滑)
    3.特征獨立假設只是個假設
    4.沒有考慮語序,也沒有詞義
    4
import jieba
import json
from collections import defaultdictjieba.initialize()
"""
貝葉斯分類實踐
P(A|B) = (P(A) * P(B|A)) / P(B)
事件A:文本屬于類別x1。文本屬于類別x的概率,記做P(x1)
事件B:文本為s (s=w1w2w3..wn)
P(x1|s) = 文本為s,屬于x1類的概率.   #求解目標#
P(x1|s) = P(x1|w1, w2, w3...wn) = P(w1, w2..wn|x1) * P(x1) / P(w1, w2, w3...wn)
P(x1) 任意樣本屬于x1的概率。x1樣本數/總樣本數
P(w1, w2..wn|x1) = P(w1|x1) * P(w2|x1)...P(wn|x1)  詞的獨立性假設
P(w1|x1) x1類樣本中,w1出現的頻率
公共分母的計算,使用全概率公式:
P(w1, w2, w3...wn) = P(w1,w2..Wn|x1)*P(x1) + P(w1,w2..Wn|x2)*P(x2) ... P(w1,w2..Wn|xn)*P(xn)
"""
class BayesApproach:def __init__(self, data_path):self.p_class = defaultdict(int)self.word_class_prob = defaultdict(dict)self.load(data_path)def load(self, path):self.class_name_to_word_freq = defaultdict(dict)self.all_words = set()  #匯總一個詞表with open(path, encoding="utf8") as f:for line in f:line = json.loads(line)class_name = line["tag"]title = line["title"]words = jieba.lcut(title)self.all_words = self.all_words.union(set(words))self.p_class[class_name] += 1  #記錄每個類別樣本數量word_freq = self.class_name_to_word_freq[class_name]#記錄每個類別下的詞頻for word in words:if word not in word_freq:word_freq[word] = 1else:word_freq[word] += 1self.freq_to_prob()return#將記錄的詞頻和樣本頻率都轉化為概率def freq_to_prob(self):#樣本概率計算total_sample_count = sum(self.p_class.values())self.p_class = dict([c, self.p_class[c] / total_sample_count] for c in self.p_class)#詞概率計算self.word_class_prob = defaultdict(dict)for class_name, word_freq in self.class_name_to_word_freq.items():total_word_count = sum(count for count in word_freq.values()) #每個類別總詞數for word in word_freq:#加1平滑,避免出現概率為0,計算P(wn|x1)prob = (word_freq[word] + 1) / (total_word_count + len(self.all_words))self.word_class_prob[class_name][word] = probself.word_class_prob[class_name]["<unk>"] = 1/(total_word_count + len(self.all_words))return#P(w1|x1) * P(w2|x1)...P(wn|x1)def get_words_class_prob(self, words, class_name):result = 1for word in words:unk_prob = self.word_class_prob[class_name]["<unk>"]result *= self.word_class_prob[class_name].get(word, unk_prob)return result#計算P(w1, w2..wn|x1) * P(x1)def get_class_prob(self, words, class_name):#P(x1)p_x = self.p_class[class_name]# P(w1, w2..wn|x1) = P(w1|x1) * P(w2|x1)...P(wn|x1)p_w_x = self.get_words_class_prob(words, class_name)return p_x * p_w_x#做文本分類def classify(self, sentence):words = jieba.lcut(sentence) #切詞results = []for class_name in self.p_class:prob = self.get_class_prob(words, class_name)  #計算class_name類概率results.append([class_name, prob])results = sorted(results, key=lambda x:x[1], reverse=True) #排序#計算公共分母:P(w1, w2, w3...wn) = P(w1,w2..Wn|x1)*P(x1) + P(w1,w2..Wn|x2)*P(x2) ... P(w1,w2..Wn|xn)*P(xn)#不做這一步也可以,對順序沒影響,只不過得到的不是0-1之間的概率值pw = sum([x[1] for x in results]) #P(w1, w2, w3...wn)results = [[c, prob/pw] for c, prob in results]#打印結果for class_name, prob in results:print("屬于類別[%s]的概率為%f" % (class_name, prob))return resultsif __name__ == "__main__":path = "../data/train_tag_news.json"ba = BayesApproach(path)query = "中國三款導彈可發射多彈頭 美無法防御很急躁"ba.classify(query)
支持向量機SVM

0
1
2

解決多分類

假設要解決一個K分類問題,即有K個目標類別

  • one vs one方式
    建立 K(K - 1)/2 個svm分類器,每個分類器負責K個類別中的兩個類別,判斷輸入樣本屬于哪個類別
    對于一個待預測的樣本,使用所有分類器進行分類,最后保留被預測詞數最多的類別
    假設類別有[A,B,C]
    X->SVM(A,B)->A
    X->SVM(A,C)->A
    X->SVM(B,C)->B
    最終判斷 X->A

  • one vs rest方式
    建立K個svm分類器,每個分類器負責劃分輸入樣本屬于K個類別中的“某一個類別,還是其他類別”
    最后保留預測分值最高的類別
    假設類別有[A,B,C]
    X->SVM(A,rest)->0.1
    X->SVM(B,rest)->0.2
    X->SVM(C,rest)->0.5
    最終判斷 X->C

  • 支持向量機優點
    1.少數支持向量決定了最終結果,對異常值不敏感
    2.對于樣本數量需求較低
    3.可以處理高維度數據

  • 支持向量機缺點
    1.少數支持向量決定了最終結果,對異常值不敏感
    2.對于樣本數量需求較低
    3.可以處理高維度數據

深度學習

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/915380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/915380.shtml
英文地址,請注明出處:http://en.pswp.cn/news/915380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache SeaTunnel詳解與部署(最新版本2.3.11)

目錄 一、概述 1.1、軟件介紹 1.2、解決問題? 1.3、軟件特性? 1.4、使用用戶 1.5、產品對比 二、架構 2.1、運行流程 2.2、連接器? 2.3、引擎 2.3.1、設計理念 2.3.2、集群管理? 2.3.3、核心功能? 2.3.4、引擎對比 三、軟件部署 3.1、Docker部署 3.2、發…

pytorch | minist手寫數據集

一、神經網絡神經網絡&#xff08;Neural Network&#xff09;是一種受生物神經系統&#xff08;尤其是大腦神經元連接方式&#xff09;啟發的機器學習模型&#xff0c;是深度學習的核心基礎。它通過模擬大量 “人工神經元” 的互聯結構&#xff0c;學習數據中的復雜模式和規律…

[C/C++安全編程]_[中級]_[如何避免出現野指針]

場景 在Rust里不會出現野指針的情況&#xff0c;那么在C里能避免嗎&#xff1f; 說明 野指針是指指向無效內存地址的指針&#xff0c;訪問它會導致未定義行為&#xff0c;可能引發程序崩潰、數據損壞或安全漏洞。它是 C/C 等手動內存管理語言中的常見錯誤&#xff0c;而 Rust…

機器學習基礎:從數據到智能的入門指南

一、何謂機器學習? 在我們的日常生活中&#xff0c;機器學習的身影無處不在。當你打開購物軟件&#xff0c;它總能精準推薦你可能喜歡的商品&#xff1b;當你解鎖手機&#xff0c;人臉識別瞬間完成&#xff1b;當你使用語音助手&#xff0c;它能準確理解你的指令。這些背后&a…

steam游戲搬磚項目超完整版實操分享

大家好&#xff0c;我是阿陽&#xff0c;今天再次最詳細的給大家綜合全面的分析講解下steam搬磚&#xff0c;可以點擊后面跳轉往期文章了再次解下阿陽網客&#xff1a;關于steam游戲搬磚項目&#xff0c;我想說&#xff01;最早是21年5月份公開朋友圈&#xff0c;初次接觸是在2…

vue2 面試題及詳細答案150道(21 - 40)

《前后端面試題》專欄集合了前后端各個知識模塊的面試題&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

原生前端JavaScript/CSS與現代框架(Vue、React)的聯系與區別(詳細版)

原生前端JavaScript/CSS與現代框架&#xff08;Vue、React&#xff09;的聯系與區別&#xff0c;以及運行環境和條件 目錄 引言原生前端技術概述 JavaScript基礎CSS基礎 現代框架概述 Vue.jsReact 聯系與相似性主要區別對比運行環境和條件選擇建議總結 引言 在現代Web開發中&…

基于機器視覺的邁克耳孫干涉環自動計數系統設計與實現

基于機器視覺的邁克耳孫干涉環自動計數系統設計與實現 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站。 摘要 本文設計并實現了一種基于機器視覺的邁克耳孫干涉環自動計數系統。該系統…

設計模式筆記(1)簡單工廠模式

最近在看程杰的《大話設計模式》&#xff0c;在這里做一點筆記。 書中主要有兩個角色&#xff1a; 小菜&#xff1a;初學者&#xff0c;學生&#xff1b; 大鳥&#xff1a;小菜表哥&#xff0c;大佬。 也按圖中的對話形式 01 簡單工廠模式 要求&#xff1a;使用c、Java、C#或VB…

Vue3 學習教程,從入門到精通,Vue 3 聲明式渲染語法指南(10)

Vue 3 聲明式渲染語法指南 本文將詳細介紹 Vue 3 中的聲明式渲染語法&#xff0c;涵蓋所有核心概念&#xff0c;并通過一個完整的案例代碼進行演示。案例代碼中包含詳細注釋&#xff0c;幫助初學者更好地理解每個部分的功能和用法。 目錄 簡介聲明式渲染基礎 文本插值屬性綁…

React hooks——useReducer

一、簡介useReducer 是 React 提供的一個高級 Hook&#xff0c;用于管理復雜的狀態邏輯。它類似于 Redux 中的 reducer 模式&#xff0c;適合處理包含多個子值、依賴前一個狀態或邏輯復雜的狀態更新場景。與 useState 相比&#xff0c;useReducer 提供更結構化的狀態管理方式。…

SEO中關于關鍵詞分類與布局的方法有那些

前邊我們說到關鍵詞挖掘肯定很重要&#xff0c;但如何把挖掘出來的關鍵詞用好更為重要&#xff0c;下邊我們就來說說很多seo剛入行的朋友比較頭疼的關鍵詞分類問題&#xff0c;為了更直觀的感受搭配了表格&#xff0c;希望可以給大家一些幫助!SEO優化之關鍵詞分類?挖掘出的關鍵…

考研最高效的準備工作是什么

從性價比的角度來說&#xff0c;考研最高效的準備工作是什么呢&#xff1f; 其實就是“卷成績”。 卷學校中各門課程的成績&#xff0c;卷考研必考的數學、英語、政治和專業課的成績。 因為現階段的考研&#xff0c;最看重的仍然是你的成績&#xff0c;特別是初試成績。 有了…

【Linux】基于Ollama和Streamlit快速部署聊天大模型

1.環境準備 1.1 安裝Streamlit 在安裝Streamlit之前&#xff0c;請確保您的系統中已經正確安裝了Python和pip。您可以在終端或命令行中運行以下命令來驗證它們是否已安裝 python --version pip --version一旦您已經準備好環境&#xff0c;現在可以使用pip來安裝Streamlit了。…

Jetpack - ViewModel、LiveData、DataBinding(數據綁定、雙向數據綁定)

一、ViewModel 1、基本介紹 ViewModel 屬于 Android Jetpack 架構組件的一部分&#xff0c;ViewModel 被設計用來存儲和管理與 UI 相關的數據&#xff0c;這些數據在配置更改&#xff08;例如&#xff0c;屏幕旋轉&#xff09;時能夠幸存下來&#xff0c;ViewModel 的生命周期與…

Go并發聊天室:從零構建實戰

大家好&#xff0c;今天我將分享一個使用Go語言從零開始構建的控制臺并發聊天室項目。這個項目雖然簡單&#xff0c;但它麻雀雖小五臟俱全&#xff0c;非常適合用來學習和實踐Go語言強大的并發特性&#xff0c;尤其是 goroutine 和 channel 的使用。 一、項目亮點與功能特性 …

瘋狂星期四第13天運營日報

網站運營第13天&#xff0c;點擊觀站&#xff1a; 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 昨日訪問量 昨天大概60個ip, 同比上個星期是高點的&#xff0c;但是與星期四差別還是太大了。&#x1f602; 昨日搜索引擎收錄情況 百度依舊0收錄 …

吳恩達《AI for everyone》第二周課程筆記

機器學習項目工作流程以Echo/Alexa&#xff08;語音識別AI&#xff09;作為例子解釋&#xff1a; 1. collect data 收集數據——人為找很多人說 Alexa&#xff0c;并錄制音頻&#xff1b;并且還會讓一群人說其他詞語&#xff0c;比如hello 2. train model 訓練模型——用機器學…

uniapp props、$ref、$emit、$parent、$child、$on

1. uniapp props、ref、ref、ref、emit、parent、parent、parent、child、$on 1.1. 父組件和子組件 propsPage.vue導入props-son-view.vue組件的時候,我們就稱index.vue為父組件依次類推,在vue中只要能獲取到組件的實例,那么就可以調用組件的屬性或是方法進行操作 1.2. pr…

4、ubuntu | dify創建知識庫 | 上市公司個股研報知識庫

1、創建知識庫步驟 創建一個知識庫并上傳相關文檔主要涉及以下五個關鍵步驟&#xff1a; 創建知識庫&#xff1a;首先&#xff0c;需要創建一個新的知識庫。這可以通過上傳本地文件、從在線資源導入數據或者直接創建一個空的知識庫來實現。 指定分段模式&#xff1a;接下來是…