• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 樸素貝葉斯(naive Bayes)的python實現——基于《統計學習方法》例題的編程求解

    樸素貝葉斯方法是基于貝葉斯定理與特征條件獨立假設的分類方法。認為樣本的特征X與標簽y服從聯合概率分布P(X, y),所有的樣本都是基于這個概率分布產生的。由于條件概率P(X=x|Y=y)的參數具有指數數量級,因此進行估算切實際。貝葉斯法對條件概率分布做了條件獨立性假設,從而減少了模型的復雜性,增加了模型的泛化能力,減少了過擬合的風險。

    #后驗概率最大化
    可以證明,期望風險最小化準則可以得到后驗概率最大化準則,而期望風險最小化就是貝葉斯法的損失函數,因而在求解過程中,只要求得是樣本后驗概率最大的類,將之作為樣本的類別即可。

    代碼如下:

    import numpy as np
    from collections import Counter
    
    X = np.array([[1, 'S'], [1, 'M'], [1, 'M'], [1, 'S'], [1, 'S'], [2, 'S'], [2, 'M'], [2, 'M'], [2, 'L'], [2, 'L'], [3, 'L'], [3, 'M'], [3, 'M'], [3, 'L'], [3, 'L']])
    y = [-1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1]
    
    #計算先驗概率
    y_list = Counter(y)
    n_back = dict(y_list) #各類別的數量
    p_1 = n_back[-1]/len(y)
    p1 = n_back[1]/len(y)
    print('類別為-1的概率為:{}'.format(p_1))
    print('類別為 1的概率為:{}'.format(p1))
    dic = {}
    #計算條件概率
    X1 = ['1', '2', '3']#第一個屬性包含的類型
    X2 = ['S', 'M', 'L']#第二個屬性包含的類型
    
    for i in X1:#計算X1屬性中的條件概率
        t = []
        for j in range(len(y)):
            if y[j] == -1:
                t.append(j)
        m = 0
        for j in t:
            if X[j][0] == i:
                m += 1
        print('P(X1={}|Y=-1)={}/6'.format(i, m))
        dic['P(X1={}|Y=-1)'.format(i)] = m/6 #將結果以字典形式存起來
        t2 = []
        for j in range(len(y)):
            if y[j] == 1:
                t2.append(j)
        m = 0
        for j in t2:
            if X[j][0] == i:
                m += 1
        print('P(X1={}|Y=1)={}/9'.format(i, m))
        dic['P(X1={}|Y=1)'.format(i)] = m/9 #將結果以字典形式存起來
    
    
    for i in X2:#計算X1屬性中的條件概率
        t = []
        for j in range(len(y)):
            if y[j] == -1:
                t.append(j)
        m = 0
        for j in t:
            if X[j][1] == i:
                m += 1
        print('P(X2={}|Y=-1)={}/6'.format(i, m))
        dic['P(X2={}|Y=-1)'.format(i)] = m/6 #將結果以字典形式存起來
        t2 = []
        for j in range(len(y)):
            if y[j] == 1:
                t2.append(j)
        m = 0
        for j in t2:
            if X[j][1] == i:
                m += 1
        print('P(X2={}|Y=1)={}/9'.format(i, m))
        dic['P(X2={}|Y=1)'.format(i)] = m/9 #將結果以字典形式存起來
    

    輸出的結果即為樸素貝葉斯法的前驗概率和條件概率,如下圖所示:
    結果展示
    對于新來樣本的判斷,需要將之前計算出的先驗概率與條件概率存儲起來,然后用于新來樣本的計算。
    假設新來樣本為x = [‘2’, ‘S’],則計算出新來樣本對于所有種類的后驗概率,選擇后驗概率最大所對應的類別,作為新來樣本的類別。
    代碼如下:

    x = ['2', 'S']
    f1 = p1 * dic['P(X1=2|Y=1)'] * dic['P(X2=S|Y=1)']
    f_1 = p_1 * dic['P(X1=2|Y=-1)'] * dic['P(X2=S|Y=-1)']
    print('x屬于1的概率為{}'.format(f1))
    print('x屬于-1的概率為{}'.format(f_1))
    

    輸出結果:
    在這里插入圖片描述
    由于x屬于-1類的后驗概率較大,因此判斷x屬于-1類。

    版權聲明:本文為qq_39320588原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_39320588/article/details/104088843

    智能推薦

    機器學習之樸素貝葉斯(Naive Bayes)一

    這里寫自定義目錄標題 貝葉斯分類器原理 三個重要知識點 訓練樸素貝葉斯的過程 樸素貝葉斯分類器 貝葉斯分類器原理 已知樣本集,求新樣本的分類結果: 比較各個分類結果下,哪個后驗概率大,后驗概率大的便是分類結果 三個重要知識點 先驗概率:通過經驗來判斷事情發生的概率 后驗概率:根據事情發生的結果,來推測原因的概率 條件概率:指事件A在事件B發生的前提下發生的概率,記為P(A|B) 后驗概率公式為:(...

    機器學習算法(二): 樸素貝葉斯(Naive Bayes)

    機器學習算法(二): 樸素貝葉斯(Naive Bayes) 1. 實驗室介紹 1.1 實驗環境 1.2 樸素貝葉斯的介紹 樸素貝葉斯算法(Naive Bayes, NB) 是應用最為廣泛的分類算法之一。它是基于貝葉斯定義和特征條件獨立假設的分類器方法。由于樸素貝葉斯法基于貝葉斯公式計算得到,有著堅實的數學基礎,以及穩定的分類效率。NB模型所需估計的參數很少,對缺失數據不太敏感,算法也比較簡單。當年...

    機器學習算法: 樸素貝葉斯(Naive Bayes)

    文章目錄 1、樸素貝葉斯的介紹 1.1 簡介 1.2 樸素貝葉斯的應用 2、使用舉例 1、樸素貝葉斯的介紹 1.1 簡介 樸素貝葉斯算法(Naive Bayes, NB) 是應用最為廣泛的分類算法之一。它是基于貝葉斯定義和特征條件獨立假設的分類器方法。由于樸素貝葉斯法基于貝葉斯公式計算得到,有著堅實的數學基礎,以及穩定的分類效率。NB模型所需估計的參數很少,對缺失數據不太敏感,算法也比較簡單。當年...

    機器學習算法(二): 樸素貝葉斯(Naive Bayes)

    這里先給出阿里云機器學習訓練營地址:阿里云機器學習訓練營,可以將其代碼下載進行學習或者參加最后一個任務的比賽。 1. 實驗室介紹 1.1 實驗環境 1.2 樸素貝葉斯的介紹 樸素貝葉斯算法(Naive Bayes, NB) 是應用最為廣泛的分類算法之一。它是基于貝葉斯定義和特征條件獨立假設的分類器方法。由于樸素貝葉斯法基于貝葉斯公式計算得到,有著堅實的數學基礎,以及穩定的分類效率。NB模型所需估計...

    機器學習算法(二): 樸素貝葉斯(Naive Bayes)

    機器學習算法(二): 樸素貝葉斯(Naive Bayes) 1. 實驗室介紹 1.1 實驗環境 1. python3.7 2. numpy >= ‘1.16.4’ 3. sklearn >= ‘0.23.1’ 1.2 樸素貝葉斯的介紹 樸素貝葉斯算法(Naive Bayes, NB) 是應用最為廣泛的分類算法之一。它是基于貝葉斯定義和特征...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡