ベイズ分類器は図書に分類します

4591 ワード

問題から:
私たちが解決した問題は、図書を二元分類することです.分類の根拠は図書のtagです.このようにtagは、専門家、または編集者、またはユーザーから来ている可能性があります.例えば「外国文学」「探偵」「コンピューター」「python」はtagに属する.問題を簡略化して、私達は今図書を“人文”あるいは“非人文”の2種類に分けます.
例えば「コンピュータ科学導論」は、そのtagに「コンピュータ」、「科学」、「経典」、「導論」があり、それは「非人文」に属する.「麦畑の守り人」は、そのtagに「小説」、「文学」、「アメリカ」があり、「人文」に属している.
基本原理:
ベイズ分類器の動作原理:
P(a|b) = P(b|a)*P(a) / P(b)

      :   P(a|b),     P(b|a),P(a),P(b)  ,              

1冊の本にはtag:tag 1,tag 2,tag 3があることが知られています....「人文」の分類に属する確率はいくらですか?「非人文」分類に属する確率は?
p 1はこの場合、「人文」に属する確率を表し、p 2はこの場合、「非人文」に属する確率を表す.
p 1>p 2なら「人文」に属する
条件の確率:
実は、これは条件確率の問題です.条件確率とは、既知のbが発生した場合、aが発生する確率を求め、P(a|b)と書く.
私たちの実際の問題と結びつけて、それはtag 1、tag 2、tag 3がすでに発生した場合、この本は「人文」と「非人文」に属する確率です.私たちは書きます.
P(人文|tag 1,tag 2,tag 3...)tag 1,tag 2,tag 3...発生した場合、この本は「人文」に属する.
P(非人文|tag 1,tag 2,tag 3...)tag 1,tag 2,tag 3...発生した場合、この本は「非人文」に属する.
P(人文|tag 1,tag 2,tag 3…)=P(tag 1,tag 2,tag 3...|人文)*P(人文)/P(tag 1,tag 2,tag 3...)
==>
P(tag 1,tag 2,tag 3...|人文):ある本で「人文」が分類されていることを知っています.tag 1,tag 2,tag 3...一緒に現れる確率
P(人文):「人文」分類と表記された本(訓練集で)すべての本(「人文」と「非人文」)に登場する確率
P(tag1,tag2,tag3...):つまりtag 1,tag 2,tag 3...すべてのtagに現れる確率
ここには注意すべきテクニックがありますが、実はP(tag 1,tag 2,tag 3...)は、私たちは計算する必要はありません.私たちの目的は比較ですから.
P(人文|tag 1,tag 2,tag 3...)とP(非人文|tag 1,tag 2,tag 3...)の大きさは、実際の値を得るためではなく、上記の式で分母
P(tag1,tag2,tag3...)同じです.分子の大きさを比較するだけでいいのです
P(tag 1,tag 2,tag 3…|人文)*P(人文)*P(人文)とP(tag 1,tag 2,tag 3…|非人文)*P(非人文)の大きさ
シンプルベイズ:
では、P(tag 1,tag 2,tag 3...|人文)をどのように計算しますか?ここで素朴ベイズの概念を用いると,本の中のラベルには,各ラベルが互いに独立しており,相手が現れるかどうかは関係なく,「計算機」と「経典」が現れる確率は互いに関係なく,「計算機」が現れるからといって「経典」が現れる確率が高いとは考えられない.
P(tag 1,tag 2,tag 3…|人文)=P(tag 1|人文)*P(tag 2|人文)*P(tag 3|人文)...
つまり、各tagを計算し、それぞれ「人文」と「非人文」の書籍のすべてのtagで出現する確率を計算し、それらを乗算します.
例分析:
私達は今1冊の本《コンピュータ科学の導論》があって、そのラベルは“コンピュータ”で、“科学”、“理論”、“経典”、“導論”私達はこのいくつかのラベルが現れる情況を知りたくて、《コンピュータ科学の導論》はそれぞれ“人文”と“非人文”の確率に属します
では、私たちはもう何を持っていますか?幸いなことに、私たちは現在10冊の本を持っていて、そのうち6冊が「人文」で、4冊が「非人文」であることが知られています.この10冊の本は、重さを並べて、全部で70の異なるラベルがあり、「コンピュータ」、「科学」、「理論」、「導論」も含まれています.
これにより、P(人文)=6/10=0.6 P(非人文)=1-0.6=0.4つまり「人文」書はすべての本の概念0.6「非人文」が0.4
次はP(tag 1,tag 2,tag 3...|人文)とP(tag 1,tag 2,tag 3...|非人文)です.つまり、「人文」類のすべての数の中で、「コンピュータ」、「科学」、「理論」、「経典」、「導論」といういくつかのtagが「人文」数のすべてのtagにある確率を算出します.
1.トレーニングセットの準備:
ほとんどの機械学習には訓練集が必要だ.ベイズ分類も同じです.上記、既知のデータは、トレーニングセットです.上の例で挙げた10冊の本と、10冊の本が並べられたtagが、私たちの訓練集です.0.6と0.4の2つの確率はP(tag 1,tag 2,tag 3...|人文)とP(tag 1,tag 2,tag 3...|非人文)の先験確率である.
私たちの問題に基づいて、私たちは100冊の本を用意する必要があります.人文は「人文」と「非人文」の2種類に分けられ、これらの本のすべての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,0,1,0,0,0,0,0]1,2冊目の本「予測可能な非理性」tag:「心理」,「行為」,「アメリカ」
[]3冊目
......

tag_vector_非人文=[
    [],
    [],
    ....
]
このようなデータがあれば、P(tag 1|人文)を計算することができます.tag 1に対応して,訓練集における「人文」のすべての本においてtag 1が出現した回数を算出した.
例えば、訓練集には「人文」が60冊あり、そのうち40冊が古典的なtagであるならnum_of_tag 1=40,順次類推
num_of_tag2=32,num_of_tag3=18...
それから、私达は“人文”类でを求めて、すべての本のtagのラベルの総数、例えば“人文”类の2册の本、第1册の本のラベルは“散文”で、“経典”、“外国”、第2册の本は“経典”で、“小说”で、それではすべての本のtagの総数は3+2=5です.トレーニングセットのすべてのtagのラベルの総数を求めます.仮定総数は700である.我々はtotal_人文=700
そこでtag 1が「人文」類に現れる確率はP(tag 1|人文)=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