您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么用貝葉斯分類器給圖書分類”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用貝葉斯分類器給圖書分類”吧!
從問題開始:
我們解決的問題是,對圖書進行二元分類。分類的依據是圖書的tag。這樣tag可能來自專家,或者編輯,或者用戶。例如“外國文學”,“偵探”,“計算機”,“python”都屬于tag。簡化問題,我們現在把圖書分為“人文”或者“非人文”兩類。
例如《計算機科學導論》,它的tag有“計算機”,“科學”,“經典”,“導論”,它屬于“非人文”。《麥田里的守望者》,它的tag有“小說”,“文學”,“美國”,它屬于“人文”。
基本原理:
貝葉斯分類器的工作原理:
P(a|b) = P(b|a)*P(a) / P(b) 這個意思就是:想要求P(a|b),而你又知道P(b|a),P(a),P(b)的值,那你就可以通過貝葉斯公式求得
已知一本書有些tag:tag1,tag2,tag3....它屬于“人文”分類的概率是多少?屬于“非人文”分類的概率呢?
假設p1表示在這種情況下,它屬于“人文”的概率,p2表示這種情況下,它屬于“非人文”的概率。
如果p1 > p2 那么就屬于“人文”
條件概率:
其實,這是一個條件概率的問題。所謂條件概率,就是求:在已知b發生的情況下,a發生的概率,我們寫作P(a|b)
結合我們的實際問題,那就是tag1,tag2,tag3已經發生的情況下,這本書屬于“人文”和“非人文”的概率。我們寫做
P(人文|tag1,tag2,tag3...)的意思就是在tag1,tag2,tag3...發生的情況下,這本書屬于“人文”
P(非人文|tag1,tag2,tag3...)的意思就是在tag1,tag2,tag3...發生的情況下,這本書屬于“非人文”
P(人文|tag1,tag2,tag3...) = P(tag1,tag2,tag3...|人文) * P(人文) / P(tag1,tag2,tag3...)
==>
P(tag1,tag2,tag3...|人文) :就是你知道在一本書已經被分類了“人文”的情況,tag1,tag2,tag3...一起出現的概率
P(人文):就是在被標記為“人文”分類的書,(在訓練集)在所有書(“人文”和“非人文”)中出現的概率
P(tag1,tag2,tag3...):也就是tag1,tag2,tag3...在(訓練集)所有tag出現的概率
這里有個值得注意的技巧,其實P(tag1,tag2,tag3...),我們不需要計算,因為我們的目的是比較
P(人文|tag1,tag2,tag3...) 和 P(非人文|tag1,tag2,tag3...) 的大小,不是為了得到實際的值,由于上述公式中分母
P(tag1,tag2,tag3...)是一樣的。所以我們只需要比較分子的大小就可以了。
P(tag1,tag2,tag3...|人文) * P(人文) 和 P(tag1,tag2,tag3...|非人文) * P(非人文)的大小
樸素貝葉斯:
那么我們如何計算P(tag1,tag2,tag3...|人文) 呢?這里要用到樸素貝葉斯的概念,就是說,我們認為,在一本書中的標簽里,每個標簽都是相互獨立的,與對方是否出現沒有關系,也就是說“計算機”和“經典”出現的概率是互不相關的,不會因為出現了“計算機”就導致“經典”的出現概率高。
P(tag1,tag2,tag3...|人文) = P(tag1|人文) * P(tag2|人文) * P(tag3|人文) ....
也就是計算每個tag,分別在“人文”和“非人文”書籍所有tag出現概率,然后將它們乘
舉例分析:
我們現在有一本書《計算機科學導論》,它標簽是“計算機”,“科學”,“理論”,“經典”,“導論”我們想知道這幾個標簽出現的情況下,《計算機科學導論》分別屬于“人文”和“非人文”的概率
那么我們已經有了什么呢?幸運的是,我們目前有10本書,已知其中6本是“人文”,4本“非人文”。這個10本書,經過排重,一共有70個不同的標簽,“計算機”,“科學”,“理論”,“導論”也在其中。
基于此,我們可以得出,P(人文)=6/10=0.6 P(非人文)=1-0.6=0.4 也就是說“人文”書在所有的書的概念0.6 “非人文”是0.4
接下來就是P(tag1,tag2,tag3...|人文) 和 P(tag1,tag2,tag3...|非人文)了,也就是說,我們要算出,在“人文”類里的所有數中,“計算機”,“科學”,“理論”,“經典”,“導論”這幾個tag在“人文”數所有的tag的概率
1.準備訓練集:
幾乎所有的機器學習都需要訓練集。貝葉斯分類也是一樣的。上述,我們說的已知的數據,就是訓練集。上面的例子列舉的10本書,以及者10本書所排重后的tag,就是我們的訓練集;而0.6 和 0.4 這兩個概率就是P(tag1,tag2,tag3...|人文) 和 P(tag1,tag2,tag3...|非人文) 先驗概率
基于我們的問題,我們需要準備100本書,人文分為“人文”和“非人文”兩類,并且收集將這些書的所有tag。(可以爬去亞馬遜或是豆瓣上的書籍資源)
2.形成tag集:
上述所說的tag,用python里的列表來保存,我們令其位dicts.dicts里的每一個元素是一個tag
dicts = [“科學”,“理論”,“c++”]這樣的形式
3.計算訓練集中的“人文”和“非人文”的概率
假設我們訓練集中的這100本書,有60本是“人文”,那么P(人文) = 60 / 100 = 60 P(非人文) = 1 - P(人文) = 0.4
4.計算tag集中每個tag在訓練集“人文”數據中tag出現的概率
首先,我們基于訓練集構造一個列表,這個列表里的每一項又是一個列表,這個列表里的每一項,不是1就是0。1表示這個字典中這個位置的tag是這個書的一個tag
dicts=["計算機","小說","心理","科學","編程","行為","導論","經典","游記","美國",.....] tag集
tag_vector_人文 = [
[0,1,0,0,0,0,0,1,0,1], 第一本書《麥田的守望者》tag:"小說""經典""美國"
[0,0,1,0,0,1,0,0,0,1], 第二本書《可預測的非理性》tag:"心理","行為","美國"
[], 第三本書
......
]
tag_vector_非人文= [
[],
[],
....
]
有了這樣的數據后,我們就好計算 P(tag1|人文)。對應tag1,我們計算出訓練集里“人文”的所有書中,tag1出現的次數。
例如,在訓練集里,“人文”有60本,其中40本都由經典的tag,那么我們就令num_of_tag1=40,依次類推
num_of_tag2=32,num_of_tag3=18...
然后,我們求出在“人文”類,所有書的tag標簽總數,例如“人文”類2本書,第一本書的標簽是“散文”,“經典”,“外國”,第二本書是“經典”,“小說”,那么所有本tag總數是3+2=5。現在我們求出訓練集所有的100本tag的標簽總數。假設總數是700.我們令total_人文=700
于是tag1在“人文”類里的出現的概率就是P(tag1|人文) = num_of_tag1 / total_人文 = 40/700=0.057
利用numpy
from numpy import * num_tags_cate1 = ones(len(dicts)) #1 total_cate1 = 2.0 #2 for item in tag_vector_cate1: num_tags_cate1 += item #3 total_cate1 += sum(item) #4 p_tags_cate1 = num_tags_cate1 / total_cate1 #5 #1 表示生成一個numpy數組,ones()是numpy的函數,返回一個填充了數值為1的numpy數組。參數是這個數組的長度。 例如temp=ones(3),表示生成一個numpy的數組[1,1,1]并返回給temp。所以就是以訓練集的tag集dicts的長度為參數,生成一個和dicts等長的填充了1的numpy數組。 #2 #3 tag_vector_cate1 是 [[],[],[]] 而item是每個元素是一個列表,長度是dicts的長度,表示,對應的tag是否存在。 numpy數組 + tag_vector_cate1的結果是,對應位置的元素相加 a是一個numpy [1,2,3,5,0] b是一個python的list [0,0,3,2,1] a + b = [1,2,6,7,1] 結果是numpy的數組 #4 把每本書出現的所有tag數量相加,sum(item)也是numpy的函數,作用是講item里面的每一項相加 sum([2,5,-1]) = 2 + 5 - 1 = 6 假如item是對應的list = [0,1,0,0,0,0,0,1,0,1] 對應是《麥田的守望者》 相當于總標簽是3個 #5
感謝各位的閱讀,以上就是“怎么用貝葉斯分類器給圖書分類”的內容了,經過本文的學習后,相信大家對怎么用貝葉斯分類器給圖書分類這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。