機器學習代碼實現 樸素貝葉斯(三)

Paste_Image.png
優(yōu)點: 在數據較少的情況下仍然有效,可以處理多類別問題
缺點:對于輸入數據的準備方式較為敏感
適用數據類型: 標稱型數據

訓練集TrainingSet={(x1,y1),(x2,y2),...,(xN,yN)} 包含N條訓練數據,其中 xi=(x(1)i,x(2)i,...,x(M)i)T是M維向量,yi∈{c1,c2,...cK}屬于K類中的一類

Paste_Image.png
# -*- coding: utf-8 -*-
from numpy import *
# 1. Prepare data
def load_data():
    documents = [
        ['my', 'dog', 'has', 'flea', 'problems', 'help', 'please'],
        ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],
        ['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],
        ['stop', 'posting', 'stupid', 'worthless', 'garbage'],
        ['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],
        ['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']
    ]
    class_lebal = [0, 1, 0, 1, 0, 1]
    return documents, class_lebal

# 2. Get word list not same
def create_vocalist(documents):
    word_set = set([])
    for doc in documents:
        word_set = word_set | set(doc)
    return list(word_set)

# 3. Convert document to vector
def doc_to_vector(word_list, document):
    return_vector = [0]*len(word_list)
    for word in document:
        if word in word_list:
            return_vector[word_list.index(word)] =1
    return return_vector

# 4.train
def train_bayes(train_matrix, train_category):
    num_docs = len(train_matrix)
    num_words = len(train_matrix[0])
    # P(c1) and we can cal P(c0) = 1-P(c1)
    p1_prob = sum(train_category)/float(num_docs)
    # word count for every category
    p0_zeros = ones(num_words)
    p1_zeros = ones(num_words)
    # total count for every category
    p1_count = 2.0; p0_count = 2.0
    for i in range(num_docs):
        if train_category[i] == 1:
            p1_zeros += train_matrix[i]
            p1_count +=sum(train_matrix[i])
        else:
            p0_zeros += train_matrix[i]
            p0_count += sum(train_matrix[i])
    # P(Wi/Ci)
    p1_vec = log(p1_zeros/p1_count)
    p0_vec = log(p0_zeros/p0_count)
    return p0_vec, p1_vec, p1_prob

# 5. classify
def classify(vec_classify, p0_vec, p1_vec, p1_prob):
    """ P(Ci|W) = P(w|Ci)P(Ci)/P(W) P(W) is not need count
    :param vec_classify: vector to predict
    :param p0_vec:P(Wi/C0)
    :param p1_vec: P(Wi/C1)
    :param p1_prob: P(C1)
    :return: 0 or 1
    """
    p1 = sum(vec_classify * p1_vec) + log(p1_prob)
    p0 = sum(vec_classify * p0_vec) + log(1 - p1_prob)
    if p1 > p0:
        return 1
    return 0

documents, class_lebal = load_data()
# 1.word list
voc_list = create_vocalist(documents)
print voc_list
# 2. word matrix to word vector
train_mat = []
for doc in documents:
    train_mat.append(doc_to_vector(voc_list, doc))
print train_mat
# 3. P(Wi/Ci) P(Ci)
p0_vec, p1_vec, p1_prob = train_bayes(train_mat, class_lebal)
print p0_vec
print p1_prob
my_doc = ['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid']
my_vec = doc_to_vector(voc_list, my_doc)
class_l = classify(my_vec, p0_vec, p1_vec, p1_prob)
print class_l

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末寝蹈,一起剝皮案震驚了整個濱河市溜腐,隨后出現的幾起案子,更是在濱河造成了極大的恐慌拘泞,老刑警劉巖恨统,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叁扫,死亡現場離奇詭異,居然都是意外死亡畜埋,警方通過查閱死者的電腦和手機莫绣,發(fā)現死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悠鞍,“玉大人对室,你說我怎么就攤上這事】Ъ溃” “怎么了掩宜?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長么翰。 經常有香客問我牺汤,道長,這世上最難降的妖魔是什么硬鞍? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任慧瘤,我火速辦了婚禮,結果婚禮上固该,老公的妹妹穿的比我還像新娘。我一直安慰自己糖儡,他們只是感情好伐坏,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著握联,像睡著了一般桦沉。 火紅的嫁衣襯著肌膚如雪每瞒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天纯露,我揣著相機與錄音剿骨,去河邊找鬼。 笑死埠褪,一個胖子當著我的面吹牛浓利,可吹牛的內容都是我干的。 我是一名探鬼主播钞速,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼贷掖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了渴语?” 一聲冷哼從身側響起苹威,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驾凶,沒想到半個月后牙甫,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡调违,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年腹暖,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翰萨。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡脏答,死狀恐怖,靈堂內的尸體忽然破棺而出亩鬼,到底是詐尸還是另有隱情殖告,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布雳锋,位于F島的核電站黄绩,受9級特大地震影響,放射性物質發(fā)生泄漏玷过。R本人自食惡果不足惜爽丹,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辛蚊。 院中可真熱鬧粤蝎,春花似錦、人聲如沸袋马。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽虑凛。三九已至碑宴,卻和暖如春软啼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背延柠。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工祸挪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贞间。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓贿条,卻偏偏與公主長得像,于是被迫代替她去往敵國和親榜跌。 傳聞我的和親對象是個殘疾皇子闪唆,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容

  • 【概述】 SVM訓練分類器的方法是尋找到超平面,使正負樣本在超平面的兩側(分類正確性即“分得開”)钓葫,且樣本到超平面...
    sealaes閱讀 11,002評論 0 7
  • 【概述】 1悄蕾、感知機模型特征:感知機對應于輸入空間中將實例劃分為正負兩類的分離超平面,屬于判別模型础浮。 2帆调、感知機策...
    sealaes閱讀 3,100評論 2 3
  • 來源: http://www.douban.com/group/topic/14820131/ 調整變量格式: f...
    MC1229閱讀 6,907評論 0 5
  • (轉自http://www.douban.com/group/topic/14820131/,轉自人大論壇) 調整...
    f382b3d9bdb3閱讀 10,253評論 0 8
  • 昨晚跟小組的伙伴們一起吃飯豆同,可以說是散伙飯番刊。再過3天我就要離職了。這次離職提得很突然影锈,突然到我自己想想都有點詫異芹务。...
    思穎hurry閱讀 111評論 0 0