自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

樸素貝葉斯的學(xué)習(xí)與分類

開發(fā) 開發(fā)工具
樸素貝葉斯基于貝葉斯定理,它假設(shè)輸入隨機(jī)變量的特征值是條件獨(dú)立的,故稱之為“樸素”。簡單介紹貝葉斯定理。

乍看起來似乎是要求一個(gè)概率,還要先得到額外三個(gè)概率,有用么?其實(shí)這個(gè)簡單的公式非常貼切人類推理的邏輯,即通過可以觀測的數(shù)據(jù),推測不可觀測的數(shù)據(jù)。舉個(gè)例子,也許你在辦公室內(nèi)不知道外面天氣是晴天雨天,但是你觀測到有同事帶了雨傘,那么可以推斷外面八成在下雨。

若X 是要輸入的隨機(jī)變量,則Y 是要輸出的目標(biāo)類別。對(duì)X 進(jìn)行分類,即使求的使P(Y|X) ***的Y值。若X 為n 維特征變量 X = {A1, A2, …..An} ,若輸出類別集合為Y = {C1, C2, …. Cm} 。

X 所屬最有可能類別 y = argmax P(Y|X), 進(jìn)行如下推導(dǎo):

樸素貝葉斯的學(xué)習(xí)

有公式可知,欲求分類結(jié)果,須知如下變量:

各個(gè)類別的條件概率,

輸入隨機(jī)變量的特質(zhì)值的條件概率

示例代碼:

 

  1. import copy 
  2.  
  3. class native_bayes_t: 
  4.      
  5.     def __init__(self, character_vec_, class_vec_): 
  6.         ""
  7.         構(gòu)造的時(shí)候需要傳入特征向量的值,以數(shù)組方式傳入 
  8.         參數(shù)1 character_vec_ 格式為 [("character_name",["","",""])] 
  9.         參數(shù)2 為包含所有類別的數(shù)組 格式為["class_X""class_Y"
  10.         ""
  11.         self.class_set = {} 
  12.         # 記錄該類別下各個(gè)特征值的條件概率 
  13.         character_condition_per = {} 
  14.         for character_name in character_vec_: 
  15.             character_condition_per[character_name[0]] = {} 
  16.             for character_value in character_name[1]: 
  17.                 character_condition_per[character_name[0]][character_value] = { 
  18.                     'num'           : 0,  # 記錄該類別下該特征值在訓(xùn)練樣本中的數(shù)量, 
  19.                     'condition_per' : 0.0 # 記錄該類別下各個(gè)特征值的條件概率 
  20.                 } 
  21.         for class_name in class_vec: 
  22.             self.class_set[class_name] = { 
  23.                 'num'                     : 0,  # 記錄該類別在訓(xùn)練樣本中的數(shù)量, 
  24.                 'class_per'               : 0.0, # 記錄該類別在訓(xùn)練樣本中的先驗(yàn)概率, 
  25.                 'character_condition_per' : copy.deepcopy(character_condition_per), 
  26.             } 
  27.  
  28.         #print("init", character_vec_, self.class_set) #for debug 
  29.  
  30.     def learn(self, sample_): 
  31.         ""
  32.         learn 參數(shù)為訓(xùn)練的樣本,格式為 
  33.         [ 
  34.             { 
  35.                 'character'  : {'character_A':'A1'}, #特征向量 
  36.                 'class_name' : 'class_X'             #類別名稱 
  37.             } 
  38.         ] 
  39.         ""
  40.         for each_sample in sample: 
  41.             character_vec  = each_sample['character'
  42.             class_name     = each_sample['class_name'
  43.  
  44.             data_for_class = self.class_set[class_name] 
  45.             data_for_class['num'] += 1 
  46.  
  47.             # 各個(gè)特質(zhì)值數(shù)量加1 
  48.             for character_name in character_vec: 
  49.                 character_value = character_vec[character_name] 
  50.                 data_for_character = data_for_class['character_condition_per'][character_name][character_value] 
  51.  
  52.                 data_for_character['num'] += 1 
  53.  
  54.         # 數(shù)量計(jì)算完畢, 計(jì)算最終的概率值 
  55.         sample_num = len(sample) 
  56.         for each_sample in sample: 
  57.             character_vec = each_sample['character'
  58.             class_name    = each_sample['class_name'
  59.  
  60.             data_for_class = self.class_set[class_name] 
  61.             # 計(jì)算類別的先驗(yàn)概率 
  62.             data_for_class['class_per'] = float(data_for_class['num']) / sample_num 
  63.  
  64.             # 各個(gè)特質(zhì)值的條件概率 
  65.             for character_name in character_vec: 
  66.                 character_value = character_vec[character_name] 
  67.                  
  68.                 data_for_character = data_for_class['character_condition_per'][character_name][character_value] 
  69.  
  70.                 data_for_character['condition_per'] = float(data_for_character['num']) / data_for_class['num'
  71.  
  72.         from pprint import pprint 
  73.         pprint(self.class_set)  #for debug 
  74.  
  75.     def classify(self, input_): 
  76.         ""
  77.             對(duì)輸入進(jìn)行分類,輸入input的格式為 
  78.         { 
  79.             "character_A":"A1"
  80.             "character_B":"B3"
  81.         } 
  82.         ""
  83.         best_class = '' 
  84.         max_per    = 0.0 
  85.         for class_name in self.class_set: 
  86.             class_data = self.class_set[class_name] 
  87.             per = class_data['class_per'
  88.             # 計(jì)算各個(gè)特征值條件概率的乘積 
  89.             for character_name in input_: 
  90.                 character_per_data = class_data['character_condition_per'][character_name] 
  91.                 per = per * character_per_data[input_[character_name]]['condition_per'
  92.             print(class_name, per) 
  93.             if per >= max_per: 
  94.                 best_class = class_name 
  95.  
  96.         return best_class 
  97.  
  98. character_vec = [("character_A",["A1","A2","A3"]), ("character_B",["B1","B2","B3"])] 
  99. class_vec     = ["class_X""class_Y"
  100. bayes = native_bayes_t(character_vec, class_vec) 
  101.  
  102.  
  103. sample = [ 
  104.             { 
  105.                 'character'  : {'character_A':'A1''character_B':'B1'}, #特征向量 
  106.                 'class_name' : 'class_X'             #類別名稱 
  107.             }, 
  108.             { 
  109.                 'character'  : {'character_A':'A3''character_B':'B1'}, #特征向量 
  110.                 'class_name' : 'class_X'             #類別名稱 
  111.             }, 
  112.             { 
  113.                 'character'  : {'character_A':'A3''character_B':'B3'}, #特征向量 
  114.                 'class_name' : 'class_X'             #類別名稱 
  115.             }, 
  116.             { 
  117.                 'character'  : {'character_A':'A2''character_B':'B2'}, #特征向量 
  118.                 'class_name' : 'class_X'             #類別名稱 
  119.             }, 
  120.             { 
  121.                 'character'  : {'character_A':'A2''character_B':'B2'}, #特征向量 
  122.                 'class_name' : 'class_Y'             #類別名稱 
  123.             }, 
  124.             { 
  125.                 'character'  : {'character_A':'A3''character_B':'B1'}, #特征向量 
  126.                 'class_name' : 'class_Y'             #類別名稱 
  127.             }, 
  128.             { 
  129.                 'character'  : {'character_A':'A1''character_B':'B3'}, #特征向量 
  130.                 'class_name' : 'class_Y'             #類別名稱 
  131.             }, 
  132.             { 
  133.                 'character'  : {'character_A':'A1''character_B':'B3'}, #特征向量 
  134.                 'class_name' : 'class_Y'             #類別名稱 
  135.             }, 
  136.              
  137.         ] 
  138.  
  139. input_data ={ 
  140.     "character_A":"A1"
  141.     "character_B":"B3"
  142.  
  143. bayes.learn(sample) 
  144. print(bayes.classify(input_data)) 

總結(jié):

樸素貝葉斯分類實(shí)現(xiàn)簡單,預(yù)測的效率較高

樸素貝葉斯成立的假設(shè)是個(gè)特征向量各個(gè)屬性條件獨(dú)立,建模的時(shí)候需要特別注意

原文鏈接:http://www.cnblogs.com/zhiranok/archive/2012/09/22/native_bayes.html

【編輯推薦】

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2017-07-24 10:36:37

Python機(jī)器學(xué)習(xí)樸素貝葉斯

2017-03-29 14:50:18

2021-04-18 09:57:45

Java樸素貝葉斯貝葉斯定理

2017-07-12 11:27:05

樸素貝葉斯情感分析Python

2021-07-29 13:06:29

Python機(jī)器學(xué)習(xí)編程語言

2021-08-30 11:53:36

機(jī)器學(xué)習(xí)人工智能計(jì)算機(jī)

2022-01-03 20:18:37

定理應(yīng)用貝葉斯

2023-01-31 15:49:51

機(jī)器學(xué)習(xí)函數(shù)評(píng)分函數(shù)

2013-05-08 09:05:48

狐貍貝葉斯大數(shù)據(jù)

2017-11-07 11:17:40

樸素貝葉斯畫像數(shù)據(jù)數(shù)據(jù)挖掘

2017-08-07 13:02:32

全棧必備貝葉斯

2017-06-12 06:31:55

深度學(xué)習(xí)貝葉斯算法

2023-11-28 12:08:56

機(jī)器學(xué)習(xí)算法人工智能

2018-09-13 12:51:58

數(shù)據(jù)挖掘算法樸素貝葉斯

2020-10-19 12:55:59

機(jī)器學(xué)習(xí)技術(shù)人工智能

2021-07-23 11:48:16

深度學(xué)習(xí)醫(yī)療人工智能

2019-03-20 07:50:47

機(jī)器學(xué)習(xí)算法線性回歸

2020-05-21 14:50:37

算法深度學(xué)習(xí)人工智能

2016-08-30 00:14:09

大數(shù)據(jù)貝葉斯

2016-08-30 00:19:30

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)