1. 程式人生 > >Java實現樸素貝葉斯分類器

Java實現樸素貝葉斯分類器

實驗描述:

對指定資料集進行分類問題的分析,選擇適當的分類演算法,編寫程式實現,提交程式和結果報告

資料集: balance-scale.data(見附件一) ,已有資料集構建貝葉斯分類器。

資料包括四個屬性:五個屬性值 第一個屬性值表示樣本的類別號,其他四個屬性為四個不同的特徵值。

實驗環境和程式語言:

本實驗使用的程式語言為:Java

程式設計環境為:Intellij idea

構建分類器的演算法為:樸素貝葉斯演算法

訓練的樣本個數為:625個

樣本示例:R,1,1,1,2(表示屬於R類,四各屬性值為1 1 1 2)

訓練樣本和測試樣本見附件一。

工程和測試資料下載地址:


實驗結果分析:

根據程式執行的結果如圖1-1所示,使用訓練的樣本對分類器進行檢測,分類得到295個R類(實際288個),330個L類(實際288個),0個B類(實際49個),綜合分類正確率為92.16%。可以認為分類器有較高的正確率,但是對於類B的分類還是有一定的誤差,具體原因會在思考與改進中說明。


思考與改進:

思考點:

本次實驗程式設計利用樸素貝葉斯演算法構建的分類器,雖然整體情況是擁有較高的分類正確率(92.16%),但是對訓練樣本再檢測時沒有發現一個B類樣本,出現的較大的偏差,分析原因如下:

1.  B類樣本點總數很少,以至於P(yB)就遠遠小於P(yR)和P(yL

),所以對於後驗概率公式,P(yB|x)必然比P(yL|x)和P(yR|x)要小,因此導致最後樣本難以分到B類。

2.  觀察訓練樣本集可以發現,B類的樣本點和L類以及R類並沒有很大區別,其不具備很強的統計可分性,所以對於依賴於統計概率的貝葉斯方法無法體現出其優勢,所以導致了最終沒有樣本被分到B類中。

改進點:

本演算法在實現貝葉斯分類的時候,每一次都進行了遍歷樣本集來求出

P(a1|y1)、P(a2|y1)……P(an|yn),所以導致演算法的整體時間複雜度較高,在面臨較大的資料集時可能就會出現問題,因此可以考慮實現將已經計算過的

P(ax|yx)儲存到變數或者陣列中,在下一次計算的時候可以直接呼叫,從而可以避免再一次的遍歷訓練集來計算概率,實現時間複雜度的降低。

 程式設計實現:

package com.company;
/********************************************************************************
 *
 * 
 * 資料探勘實驗,分類實驗
 * 樸素貝葉斯分類
 *
 *訓練樣本示例格式:(R,1,5,5,4)
 */

import java.io.File;
import java.util.Scanner;
import java.util.Vector;

public class Bayes {
    static Vector<String> indata = new Vector<>();//讀入資料
    static Vector<int[]> catagory_R = new Vector<>();//儲存類別R的所有資料
    static Vector<int[]> catagory_L = new Vector<>();//儲存類別L的所有資料
    static Vector<int[]> catagory_B = new Vector<>();//儲存類別B的所有資料


    public static boolean loadData(String url) {//載入測試的資料檔案
        try {
            Scanner in = new Scanner(new File(url));//讀入檔案
            while (in.hasNextLine()) {
                String str = in.nextLine();//將檔案的每一行存到str的臨時變數中
                indata.add(str);//將每一個樣本點的資料追加到Vector 中
            }
            return true;
        } catch (Exception e) { //如果出錯返回false
            return false;
        }
    }

    public static void pretreatment(Vector<String> indata) {   //資料預處理,將原始資料中的每一個屬性值提取出來存放到Vector<double[]>  data中
        int i = 0;
        String t;
        while (i < indata.size()) {//取出indata中的每一行值
            int[] tem = new int[4];
            t = indata.get(i);
            String[] sourceStrArray = t.split(",", 5);//使用字串分割函式提取出各屬性值
            switch (sourceStrArray[0]) {
                case "R": {
                    for (int j = 1; j < 5; j++) {
                        tem[j - 1] = Integer.parseInt(sourceStrArray[j]);
                    }
                    catagory_R.add(tem);
                    break;
                }
                case "L": {
                    for (int j = 1; j < 5; j++) {
                        tem[j - 1] = Integer.parseInt(sourceStrArray[j]);
                    }
                    catagory_L.add(tem);
                    break;
                }
                case "B": {
                    for (int j = 1; j < 5; j++) {
                        tem[j - 1] = Integer.parseInt(sourceStrArray[j]);
                    }
                    catagory_B.add(tem);
                    break;
                }
            }
            i++;
        }

    }

    public static double bayes(int[] x, Vector<int[]> catagory) {
        double[] ai_y = new double[4];
        int[] sum_ai = new int[4];
        for (int i = 0; i < 4; i++) {

            for (int j = 0; j < catagory.size(); j++) {
                if (x[i] == catagory.get(j)[i])
                    sum_ai[i]++;
            }
        }
        for (int i = 0; i < 4; i++) {
            ai_y[i] = (double) sum_ai[i] / (double) catagory.size();
        }
        return ai_y[0] * ai_y[1] * ai_y[2] * ai_y[3];
    }

    public static void main(String[] args) {


        loadData("balance-scale.data");
        pretreatment(indata);
        double p_yR = (double) catagory_R.size() / (double) (indata.size());//表示概率p(R)
        double p_yB = (double) catagory_B.size() / (double) (indata.size());//表示概率p(B)
        double p_yL = (double) catagory_L.size() / (double) (indata.size());//表示概率p(L)

        int[] x = new int[4];
        double x_in_R, x_in_L, x_in_B;

        int sumR=0, sumL=0, sumB=0;
        double correct=0;


        System.out.println("請輸入樣本x格式如下:\n 1 1 1 1\n");
        int r = 0;
        while (r < indata.size()) {

            for (int i = 0; i < 4; i++)
                //讀取數字放入陣列的第i個元素
                x[i] = Integer.parseInt(indata.get(r).split(",", 5)[i + 1]);

            x_in_B = bayes(x, catagory_B) * p_yB;
            x_in_L = bayes(x, catagory_L) * p_yL;
            x_in_R = bayes(x, catagory_R) * p_yR;


            if (x_in_B == Math.max(Math.max(x_in_B, x_in_L), x_in_R)) {
                System.out.println("輸入的第"+r+"樣本屬於類別:B");
                sumB++;
                if(indata.get(r).split(",",5)[0].equals("B"))
                    correct++;
            } else if (x_in_L == Math.max(Math.max(x_in_B, x_in_L), x_in_R)) {
                System.out.println("輸入的第"+r+"樣本屬於類別:L");
                sumL++;
                if(indata.get(r).split(",",5)[0].equals("L"))
                    correct++;
            } else if (x_in_R == Math.max(Math.max(x_in_B, x_in_L), x_in_R)) {
                System.out.println("輸入的第"+r+"樣本屬於類別:R");
                sumR++;
                if(indata.get(r).split(",",5)[0].equals("R"))
                    correct++;
            }

            r++;


        }

        System.out.println("使用訓練樣本進行分類器檢驗得到結果統計如下:");
        System.out.println("R類有:"+sumR+"    實際有R類樣本"+catagory_R.size()+"個");
        System.out.println("L類有:"+sumL+"    實際有L類樣本"+catagory_L.size()+"個");
        System.out.println("B類有:"+sumB+"      實際有B類樣本"+catagory_B.size()+"個");

        System.out.println("分類的正確率為"+correct*1.0/indata.size()*100+"%");

    }
}






(附件一)訓練樣本和測試樣本集:

B,1,1,1,1
R,1,1,1,2
R,1,1,1,3
R,1,1,1,4
R,1,1,1,5
R,1,1,2,1
R,1,1,2,2
R,1,1,2,3
R,1,1,2,4
R,1,1,2,5
R,1,1,3,1
R,1,1,3,2
R,1,1,3,3
R,1,1,3,4
R,1,1,3,5
R,1,1,4,1
R,1,1,4,2
R,1,1,4,3
R,1,1,4,4
R,1,1,4,5
R,1,1,5,1
R,1,1,5,2
R,1,1,5,3
R,1,1,5,4
R,1,1,5,5
L,1,2,1,1
B,1,2,1,2
R,1,2,1,3
R,1,2,1,4
R,1,2,1,5
B,1,2,2,1
R,1,2,2,2
R,1,2,2,3
R,1,2,2,4
R,1,2,2,5
R,1,2,3,1
R,1,2,3,2
R,1,2,3,3
R,1,2,3,4
R,1,2,3,5
R,1,2,4,1
R,1,2,4,2
R,1,2,4,3
R,1,2,4,4
R,1,2,4,5
R,1,2,5,1
R,1,2,5,2
R,1,2,5,3
R,1,2,5,4
R,1,2,5,5
L,1,3,1,1
L,1,3,1,2
B,1,3,1,3
R,1,3,1,4
R,1,3,1,5
L,1,3,2,1
R,1,3,2,2
R,1,3,2,3
R,1,3,2,4
R,1,3,2,5
B,1,3,3,1
R,1,3,3,2
R,1,3,3,3
R,1,3,3,4
R,1,3,3,5
R,1,3,4,1
R,1,3,4,2
R,1,3,4,3
R,1,3,4,4
R,1,3,4,5
R,1,3,5,1
R,1,3,5,2
R,1,3,5,3
R,1,3,5,4
R,1,3,5,5
L,1,4,1,1
L,1,4,1,2
L,1,4,1,3
B,1,4,1,4
R,1,4,1,5
L,1,4,2,1
B,1,4,2,2
R,1,4,2,3
R,1,4,2,4
R,1,4,2,5
L,1,4,3,1
R,1,4,3,2
R,1,4,3,3
R,1,4,3,4
R,1,4,3,5
B,1,4,4,1
R,1,4,4,2
R,1,4,4,3
R,1,4,4,4
R,1,4,4,5
R,1,4,5,1
R,1,4,5,2
R,1,4,5,3
R,1,4,5,4
R,1,4,5,5
L,1,5,1,1
L,1,5,1,2
L,1,5,1,3
L,1,5,1,4
B,1,5,1,5
L,1,5,2,1
L,1,5,2,2
R,1,5,2,3
R,1,5,2,4
R,1,5,2,5
L,1,5,3,1
R,1,5,3,2
R,1,5,3,3
R,1,5,3,4
R,1,5,3,5
L,1,5,4,1
R,1,5,4,2
R,1,5,4,3
R,1,5,4,4
R,1,5,4,5
B,1,5,5,1
R,1,5,5,2
R,1,5,5,3
R,1,5,5,4
R,1,5,5,5
L,2,1,1,1
B,2,1,1,2
R,2,1,1,3
R,2,1,1,4
R,2,1,1,5
B,2,1,2,1
R,2,1,2,2
R,2,1,2,3
R,2,1,2,4
R,2,1,2,5
R,2,1,3,1
R,2,1,3,2
R,2,1,3,3
R,2,1,3,4
R,2,1,3,5
R,2,1,4,1
R,2,1,4,2
R,2,1,4,3
R,2,1,4,4
R,2,1,4,5
R,2,1,5,1
R,2,1,5,2
R,2,1,5,3
R,2,1,5,4
R,2,1,5,5
L,2,2,1,1
L,2,2,1,2
L,2,2,1,3
B,2,2,1,4
R,2,2,1,5
L,2,2,2,1
B,2,2,2,2
R,2,2,2,3
R,2,2,2,4
R,2,2,2,5
L,2,2,3,1
R,2,2,3,2
R,2,2,3,3
R,2,2,3,4
R,2,2,3,5
B,2,2,4,1
R,2,2,4,2
R,2,2,4,3
R,2,2,4,4
R,2,2,4,5
R,2,2,5,1
R,2,2,5,2
R,2,2,5,3
R,2,2,5,4
R,2,2,5,5
L,2,3,1,1
L,2,3,1,2
L,2,3,1,3
L,2,3,1,4
L,2,3,1,5
L,2,3,2,1
L,2,3,2,2
B,2,3,2,3
R,2,3,2,4
R,2,3,2,5
L,2,3,3,1
B,2,3,3,2
R,2,3,3,3
R,2,3,3,4
R,2,3,3,5
L,2,3,4,1
R,2,3,4,2
R,2,3,4,3
R,2,3,4,4
R,2,3,4,5
L,2,3,5,1
R,2,3,5,2
R,2,3,5,3
R,2,3,5,4
R,2,3,5,5
L,2,4,1,1
L,2,4,1,2
L,2,4,1,3
L,2,4,1,4
L,2,4,1,5
L,2,4,2,1
L,2,4,2,2
L,2,4,2,3
B,2,4,2,4
R,2,4,2,5
L,2,4,3,1
L,2,4,3,2
R,2,4,3,3
R,2,4,3,4
R,2,4,3,5
L,2,4,4,1
B,2,4,4,2
R,2,4,4,3
R,2,4,4,4
R,2,4,4,5
L,2,4,5,1
R,2,4,5,2
R,2,4,5,3
R,2,4,5,4
R,2,4,5,5
L,2,5,1,1
L,2,5,1,2
L,2,5,1,3
L,2,5,1,4
L,2,5,1,5
L,2,5,2,1
L,2,5,2,2
L,2,5,2,3
L,2,5,2,4
B,2,5,2,5
L,2,5,3,1
L,2,5,3,2
L,2,5,3,3
R,2,5,3,4
R,2,5,3,5
L,2,5,4,1
L,2,5,4,2
R,2,5,4,3
R,2,5,4,4
R,2,5,4,5
L,2,5,5,1
B,2,5,5,2
R,2,5,5,3
R,2,5,5,4
R,2,5,5,5
L,3,1,1,1
L,3,1,1,2
B,3,1,1,3
R,3,1,1,4
R,3,1,1,5
L,3,1,2,1
R,3,1,2,2
R,3,1,2,3
R,3,1,2,4
R,3,1,2,5
B,3,1,3,1
R,3,1,3,2
R,3,1,3,3
R,3,1,3,4
R,3,1,3,5
R,3,1,4,1
R,3,1,4,2
R,3,1,4,3
R,3,1,4,4
R,3,1,4,5
R,3,1,5,1
R,3,1,5,2
R,3,1,5,3
R,3,1,5,4
R,3,1,5,5
L,3,2,1,1
L,3,2,1,2
L,3,2,1,3
L,3,2,1,4
L,3,2,1,5
L,3,2,2,1
L,3,2,2,2
B,3,2,2,3
R,3,2,2,4
R,3,2,2,5
L,3,2,3,1
B,3,2,3,2
R,3,2,3,3
R,3,2,3,4
R,3,2,3,5
L,3,2,4,1
R,3,2,4,2
R,3,2,4,3
R,3,2,4,4
R,3,2,4,5
L,3,2,5,1
R,3,2,5,2
R,3,2,5,3
R,3,2,5,4
R,3,2,5,5
L,3,3,1,1
L,3,3,1,2
L,3,3,1,3
L,3,3,1,4
L,3,3,1,5
L,3,3,2,1
L,3,3,2,2
L,3,3,2,3
L,3,3,2,4
R,3,3,2,5
L,3,3,3,1
L,3,3,3,2
B,3,3,3,3
R,3,3,3,4
R,3,3,3,5
L,3,3,4,1
L,3,3,4,2
R,3,3,4,3
R,3,3,4,4
R,3,3,4,5
L,3,3,5,1
R,3,3,5,2
R,3,3,5,3
R,3,3,5,4
R,3,3,5,5
L,3,4,1,1
L,3,4,1,2
L,3,4,1,3
L,3,4,1,4
L,3,4,1,5
L,3,4,2,1
L,3,4,2,2
L,3,4,2,3
L,3,4,2,4
L,3,4,2,5
L,3,4,3,1
L,3,4,3,2
L,3,4,3,3
B,3,4,3,4
R,3,4,3,5
L,3,4,4,1
L,3,4,4,2
B,3,4,4,3
R,3,4,4,4
R,3,4,4,5
L,3,4,5,1
L,3,4,5,2
R,3,4,5,3
R,3,4,5,4
R,3,4,5,5
L,3,5,1,1
L,3,5,1,2
L,3,5,1,3
L,3,5,1,4
L,3,5,1,5
L,3,5,2,1
L,3,5,2,2
L,3,5,2,3
L,3,5,2,4
L,3,5,2,5
L,3,5,3,1
L,3,5,3,2
L,3,5,3,3
L,3,5,3,4
B,3,5,3,5
L,3,5,4,1
L,3,5,4,2
L,3,5,4,3
R,3,5,4,4
R,3,5,4,5
L,3,5,5,1
L,3,5,5,2
B,3,5,5,3
R,3,5,5,4
R,3,5,5,5
L,4,1,1,1
L,4,1,1,2
L,4,1,1,3
B,4,1,1,4
R,4,1,1,5
L,4,1,2,1
B,4,1,2,2
R,4,1,2,3
R,4,1,2,4
R,4,1,2,5
L,4,1,3,1
R,4,1,3,2
R,4,1,3,3
R,4,1,3,4
R,4,1,3,5
B,4,1,4,1
R,4,1,4,2
R,4,1,4,3
R,4,1,4,4
R,4,1,4,5
R,4,1,5,1
R,4,1,5,2
R,4,1,5,3
R,4,1,5,4
R,4,1,5,5
L,4,2,1,1
L,4,2,1,2
L,4,2,1,3
L,4,2,1,4
L,4,2,1,5
L,4,2,2,1
L,4,2,2,2
L,4,2,2,3
B,4,2,2,4
R,4,2,2,5
L,4,2,3,1
L,4,2,3,2
R,4,2,3,3
R,4,2,3,4
R,4,2,3,5
L,4,2,4,1
B,4,2,4,2
R,4,2,4,3
R,4,2,4,4
R,4,2,4,5
L,4,2,5,1
R,4,2,5,2
R,4,2,5,3
R,4,2,5,4
R,4,2,5,5
L,4,3,1,1
L,4,3,1,2
L,4,3,1,3
L,4,3,1,4
L,4,3,1,5
L,4,3,2,1
L,4,3,2,2
L,4,3,2,3
L,4,3,2,4
L,4,3,2,5
L,4,3,3,1
L,4,3,3,2
L,4,3,3,3
B,4,3,3,4
R,4,3,3,5
L,4,3,4,1
L,4,3,4,2
B,4,3,4,3
R,4,3,4,4
R,4,3,4,5
L,4,3,5,1
L,4,3,5,2
R,4,3,5,3
R,4,3,5,4
R,4,3,5,5
L,4,4,1,1
L,4,4,1,2
L,4,4,1,3
L,4,4,1,4
L,4,4,1,5
L,4,4,2,1
L,4,4,2,2
L,4,4,2,3
L,4,4,2,4
L,4,4,2,5
L,4,4,3,1
L,4,4,3,2
L,4,4,3,3
L,4,4,3,4
L,4,4,3,5
L,4,4,4,1
L,4,4,4,2
L,4,4,4,3
B,4,4,4,4
R,4,4,4,5
L,4,4,5,1
L,4,4,5,2
L,4,4,5,3
R,4,4,5,4
R,4,4,5,5
L,4,5,1,1
L,4,5,1,2
L,4,5,1,3
L,4,5,1,4
L,4,5,1,5
L,4,5,2,1
L,4,5,2,2
L,4,5,2,3
L,4,5,2,4
L,4,5,2,5
L,4,5,3,1
L,4,5,3,2
L,4,5,3,3
L,4,5,3,4
L,4,5,3,5
L,4,5,4,1
L,4,5,4,2
L,4,5,4,3
L,4,5,4,4
B,4,5,4,5
L,4,5,5,1
L,4,5,5,2
L,4,5,5,3
B,4,5,5,4
R,4,5,5,5
L,5,1,1,1
L,5,1,1,2
L,5,1,1,3
L,5,1,1,4
B,5,1,1,5
L,5,1,2,1
L,5,1,2,2
R,5,1,2,3
R,5,1,2,4
R,5,1,2,5
L,5,1,3,1
R,5,1,3,2
R,5,1,3,3
R,5,1,3,4
R,5,1,3,5
L,5,1,4,1
R,5,1,4,2
R,5,1,4,3
R,5,1,4,4
R,5,1,4,5
B,5,1,5,1
R,5,1,5,2
R,5,1,5,3
R,5,1,5,4
R,5,1,5,5
L,5,2,1,1
L,5,2,1,2
L,5,2,1,3
L,5,2,1,4
L,5,2,1,5
L,5,2,2,1
L,5,2,2,2
L,5,2,2,3
L,5,2,2,4
B,5,2,2,5
L,5,2,3,1
L,5,2,3,2
L,5,2,3,3
R,5,2,3,4
R,5,2,3,5
L,5,2,4,1
L,5,2,4,2
R,5,2,4,3
R,5,2,4,4
R,5,2,4,5
L,5,2,5,1
B,5,2,5,2
R,5,2,5,3
R,5,2,5,4
R,5,2,5,5
L,5,3,1,1
L,5,3,1,2
L,5,3,1,3
L,5,3,1,4
L,5,3,1,5
L,5,3,2,1
L,5,3,2,2
L,5,3,2,3
L,5,3,2,4
L,5,3,2,5
L,5,3,3,1
L,5,3,3,2
L,5,3,3,3
L,5,3,3,4
B,5,3,3,5
L,5,3,4,1
L,5,3,4,2
L,5,3,4,3
R,5,3,4,4
R,5,3,4,5
L,5,3,5,1
L,5,3,5,2
B,5,3,5,3
R,5,3,5,4
R,5,3,5,5
L,5,4,1,1
L,5,4,1,2
L,5,4,1,3
L,5,4,1,4
L,5,4,1,5
L,5,4,2,1
L,5,4,2,2
L,5,4,2,3
L,5,4,2,4
L,5,4,2,5
L,5,4,3,1
L,5,4,3,2
L,5,4,3,3
L,5,4,3,4
L,5,4,3,5
L,5,4,4,1
L,5,4,4,2
L,5,4,4,3
L,5,4,4,4
B,5,4,4,5
L,5,4,5,1
L,5,4,5,2
L,5,4,5,3
B,5,4,5,4
R,5,4,5,5
L,5,5,1,1
L,5,5,1,2
L,5,5,1,3
L,5,5,1,4
L,5,5,1,5
L,5,5,2,1
L,5,5,2,2
L,5,5,2,3
L,5,5,2,4
L,5,5,2,5
L,5,5,3,1
L,5,5,3,2
L,5,5,3,3
L,5,5,3,4
L,5,5,3,5
L,5,5,4,1
L,5,5,4,2
L,5,5,4,3
L,5,5,4,4
L,5,5,4,5
L,5,5,5,1
L,5,5,5,2
L,5,5,5,3
L,5,5,5,4
B,5,5,5,5



相關推薦

Java實現樸素分類

實驗描述: 對指定資料集進行分類問題的分析,選擇適當的分類演算法,編寫程式實現,提交程式和結果報告 資料集: balance-scale.data(見附件一) ,已有資料集構建貝葉斯分類器。 資料包括四個屬性:五個屬性值 第一個屬性值表示樣本的類別號,其他四個屬性為四個不同

【機器學習實踐】用Python實現樸素分類

       閱讀學習了《機器學習》第7章的貝葉斯分類器後,為了加深理解和加強python的程式碼能力,因此嘗試使用Python實現樸素貝葉斯分類器,由於初學Python的緣故,程式碼的一些實現方法可能比較繁瑣,可閱讀性有待提高。程式碼如下: #import numpy a

機器學習及python實現——樸素分類

問題引入 考慮構建一個垃圾郵件分類器,通過給定的垃圾郵件和非垃圾郵件的資料集,通過機器學習構建一個預測一個新的郵件是否是垃圾郵件的分類器。郵件分類器是通常的文字分類器中的一種。 樸素貝葉斯方法 貝葉斯假設 假設當前我們已經擁有了一批標識有是垃圾郵

Python實現樸素分類

# -*-coding:utf-8-*- '''     樸素貝葉斯演算法 ''' from __future__ import division  global className className = "class" def calc_class(trai

OpenCV實現樸素分類診斷病情

貝葉斯定理由英國數學家托馬斯.貝葉斯(Thomas Baves)在1763提出,因此得名貝葉斯定理。貝葉斯定理也稱貝葉斯推理,是關於隨機事件的條件概率的一則定理。 對於兩個事件A和B,事件A發生則B也

機器學習:分類(二)——高樸素分類代碼實現

mod ces 數據 大於等於 即使 平均值 方差 很多 mode 一 高斯樸素貝葉斯分類器代碼實現 網上搜索不調用sklearn實現的樸素貝葉斯分類器基本很少,即使有也是結合文本分類的多項式或伯努利類型,因此自己寫了一遍能直接封裝的高斯類型NB分類器,當然與真正的源碼相

分類——樸素分類以及Python實現

核心思想: 根據訓練資料獲取模型的後驗概率,對應後驗概率越大的類即預測類。 演算法簡介: 模型: 先驗概率:p(y=Ck)p(y=Ck) 條件概率:p(X=x|y=Ck)p(X=x|y=Ck) 後驗概率:p(y=Ck|X=x)p(y=Ck|X=

機器學習實戰——python實現簡單的樸素分類

基礎公式 貝葉斯定理:P(A|B) = P(B|A)*P(A)/P(B) 假設B1,B2…Bn彼此獨立,則有:P(B1xB2x…xBn|A) = P(B1|A)xP(B2|A)x…xP(Bn|A) 資料(虛構) A1 A2 A3 A4 A5 B

機器學習:樸素分類程式碼實現,決策函式非向量化方式

文章目錄 樸素貝葉斯離散型的演算法描述: 程式碼實現: 實現一個NaiveBayes的基類,以便擴充套件: 實現離散型樸素貝葉斯MultiomialNB類: 實現從檔案中讀取資料: 測試資料: 程式碼測試:

樸素分類:MATLAB工具箱實現

MATLAB工具箱的statistic toolbox中有naivebayes的類,可以直接使用。 使用預設的高斯分佈和混淆矩陣: >> load fisheriris >> O1 = fitNaiveBayes(meas,species); 生成

樸素分類(Python實現

基本思想: 樸素貝葉斯分類器,在當給出了特徵向量w情況下,分類為ci的條件概率p(ci | w)。 利用貝葉斯公式:p(ci | w) = p(w | ci) * p(ci) / p(w),可以完成轉化,觀察公式可以發現分母p(w)都一樣,所以只要比較分子的

4.樸素分類實現-matlab

實現樸素貝葉斯分類器,並且根據李航《統計機器學習》第四章提供的資料訓練與測試,結果與書中一致 分別實現了樸素貝葉斯以及帶有laplace平滑的樸素貝葉斯 %書中例題實現樸素貝葉斯 %特徵1的取值集合 A1=[1;2;3]; %特徵2的取值集合 A2=[4;5;6];%S M L AValue

樸素分類簡單實現文字情感分析

樸素貝葉斯的一般過程: ① 收集資料:可以使用任何方法。 ② 準備資料:需要數值型或者布林型資料。 ③ 分析資料:有大量特徵時,繪製特徵作用不大,此時使用直方圖效果更好。 ④ 訓練演算法:計算不同的獨立特徵的條件概率。 ⑤ 測試演算法:計算錯誤率。 ⑥ 使用演算法:一個常見

機器學習之樸素分類實現

問題如下 比如:有如下的需求,要判斷某一句英語是不是侮辱性語句 分析思路 對於機器來說,可能不容易分辨出某一句話是不是侮辱性的句子,但是機器可以機械的進行分析,何為機械的進行分析,就是判斷某一個句子中侮辱性的單詞是不是達到一定數量(當然這

樸素分類實現成績等級預測

    最近在學習機器學習相關的演算法,希望能通過筆記和做的小的Demo來鞏固一下所學的知識和演算法。     今天來講解一下樸素貝葉斯分類器,並利用樸素貝葉斯做一個簡單的成績等級預測。     貝葉斯決策論:在所有相關概率都已知的理想情形下,貝葉斯決策論考慮如何基於這些概

篇:的概率推到,樸素分類及Python實現

在瞭解貝葉演算法前:要有一定的概率與數理統計基礎以及注意事項 條件概率 首先,理解這兩個公式的前提是理解條件概率,因此先複習條件概率。 P(A|B)=P(AB)P(B)P(A|B)=P(AB)P(B) 那麼由條件概率出發,看一下變形出來的乘法公式:

【機器學習算法-python實現】掃黃神器-樸素分類實現

github border release Language 出現 span bus pytho rds 版權聲明:本文為博主原創文章,未經博主同意不得轉載。 https://blog.c

javascript實現樸素分類與決策樹ID3分類

.com 訓練集 this ice map ive sum length roc 今年畢業時的畢設是有關大數據及機器學習的題目。因為那個時間已經步入前端的行業自然選擇使用JavaScript來實現其中具體的算法。雖然JavaScript不是做大數據處理的最佳語言,相比還沒有

機器學習系列——樸素分類(二)

表示 -h line log ima 條件 code 樸素貝葉斯 spa 貝葉斯定理: 其中: 表示事件B已經發生的前提下,事件A發生的概率,叫做事件B發生下事件A的條件概率。其基本求解公式為:。 機器學習系列——樸素貝葉斯分類器(二)

樸素分類的應用 Naive Bayes classifier

upload dia get 等號 分布 eat 實現 維基 5.5 一、病人分類的例子 讓我從一個例子開始講起,你會看到貝葉斯分類器很好懂,一點都不難。 某個醫院早上收了六個門診病人,如下表。   癥狀  職業   疾病   打噴嚏 護士   感冒   打噴嚏