狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

貝葉斯實驗報告

| 瀏覽次數:

  HUNAN

 UNIVERSITY

  人工智能實驗報告

  題

 目

 實驗三:分類算法實驗

 學生姓名

  匿名

 學生學號

 2013080702xx

  專業班級

 智能科學與技術 1302 班

  指導老師

 袁進

 一.實驗目的 1. 了解樸素貝葉斯算法的基本原理;

  2. 能夠使用樸素貝葉斯算法對數據進行分類

  3. 了解最小錯誤概率貝葉斯分類 器和最小風險概率貝葉斯分類器

  4. 學會對于分類器的性能評估方法

  二、實驗的硬件、軟件平臺 硬件:計算機

  軟件:操作系統:

 WINDOWS

 10

 應用軟件:a C,Java 或者 Matlab

  相關知識點: :

  貝葉斯定理:

  表示事件 B 已經發生的前提下,事件 A 發生的概率,叫做事件 B 發生下事件 A 的條件概率,其基本求解公式為:

 貝葉斯定理打通了從 P(A|B)獲得 P(B|A)的道路。

  直接給出貝葉斯定理:

  樸素貝葉斯分類是一種十分簡單的分類算法,叫它樸素貝葉斯分類是因為這種方法的思想真的很樸素,樸素貝葉斯的思想基礎是這樣的:對于給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬于哪個類別。

 樸素貝葉斯分類的正式定義如下:

  1、設 為一個待分類項,而每個 a 為 x 的一個特征屬性。

 2、有類別集合 。

 3、計算 。

 4、如果 ,則 。

 那么現在的關鍵就是如何計算第3步中的各個條件概率。我們可以這么做:

 1、找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集。

 2、統計得到在各類別下各個特征屬性的條件概率估計。即

  3、如果各個特征屬性是條件獨立的,則根據貝葉斯定理有如下推導:

 因為分母對于所有類別為常數,因為我們只要將分子最大化皆可。又因為各特征屬性是條件獨立的,所以有:

 整個樸素貝葉斯分類分為三個階段:

 第一階段: 準備工作階段,這個階段的任務是為樸素貝葉斯分類做必要的準備,主要工作是根據具體情況確定特征屬性,并對每個特征屬性進行適當劃分,然后由人工對一部分待分類項進行分類,形成訓練樣本集合。這一階段的輸入是所有待分類數據,輸出是特征屬性和訓練樣本。這一階段是整個樸素貝葉斯分類中唯一需要人工完成的階段,其質量對整個過程將有重要影響,分類器的質量很大程度上由特征屬性、特征屬性劃分及訓練樣本質量決定。

 第二階段: 分類器訓練階段,這個階段的任務就是生成分類器,主要工作是計算每個類別在訓練樣本中的出現頻率及每個特征屬性劃分對每個類別的條件概率估計,并將結果記錄。其輸入是特征屬性和訓練樣本,輸出是分類器。這一階段是機械性階段,根據前面討論的公式可以由程序自動計算完成。

 第三階段: 應用階段。這個階段的任務是使用分類器對待分類項進行分類,其輸入是分類器和待分類項,輸出是待分類項與類別的映射關系。這一階段也是機械性階段,由程序完成。

 三、實驗內容及步驟 實驗內容:

  A. 利用貝葉斯算法進行數據分類操作,并統計其預測正確率, , 數據集:汽車評估數據集(n learn 作為學習集,t test 作為測試集合)

  B. 隨機產生 10000 組正樣本和 20000 負樣本高斯分布的數據集合(維數設為二維),要求正樣本:均值為 [1;3] ,方差為 [2 0;0 2] ;負樣本:均值為 [10;20] ,方差為 [10 0;0 10]. 先驗概率按樣本量設定為 1/3 和 2/3. 分別利用最小錯誤概 率貝葉斯分類器和最小風險概率貝葉斯分類器對其分類。(假設風險程度正樣本分錯風險系數為 0.6 ,負樣本分錯風險為 0.4 ,該設定僅用于最小風險分析)

  相關概念: :

  貝葉斯法則, , 先驗概率, , 后驗概率, , 最大后驗概率

 1.貝葉斯法則 機器學習的任務:在給定訓練數據 D 時,確定假設空間 H 中的最佳假設。

 最佳假設:一種方法是把它定義為在給定數據 D 以及 H 中不同假設的先驗概率的有關知識下的最可能假設。貝葉斯理論提供了一種計算假設概率的方法,基于假設的先驗概率、給定假設下觀察到不同數據的概率以及觀察到的數據本身。

 2.先驗概率和后驗概率 用 P(h)表示在沒有訓練數據前假設 h 擁有的初始概率。P(h)被稱為 h 的先驗概率。先驗概率反映了關于 h 是一正確假設的機會的背景知識如果沒有這一先驗知識,可以簡單地將每一候選假設賦予相同的先驗概率。類似地,P(D)表示訓練數據 D 的先驗概率,P(D|h)表示假設 h 成立時 D 的概率。機器學習中,我們關心的是 P(h|D),即給定 D 時h 的成立的概率,稱為 h 的后驗概率。

 3.貝葉斯公式 貝葉斯公式提供了從先驗概率 P(h)、P(D)和 P(D|h)計算后驗概率 P(h|D)的方法 p(h|D)=P(D|H)*P(H)/P(D) P(h|D)隨著 P(h)和 P(D|h)的增長而增長,隨著 P(D)的增長而減少,即如果 D 獨立于 h時被觀察到的可能性越大,那么 D 對 h 的支持度越小。

 4.極大后驗假設 學習器在候選假設集合 H 中尋找給定數據 D 時可能性最大的假設 h,h 被稱為極大后驗假設(MAP)確定 MAP 的方法是用貝葉斯公式計算每個候選假設的后驗概率,計算式如下: h_map=argmax P(h|D)=argmax (P(D|h)*P(h))/P(D)=argmax P(D|h)*p(h) (h 屬于集合H)

 C. 編寫一個貝葉斯分類器。輸入為:均指向量、先驗概率、協方差矩陣、輸入

 學習數據 X, 測試數據類別 XLABEL, 測試數據 Y. 輸出為 Y Y 對應的類別。(選做)。

  四、實驗步驟:

 1 1 .仔細閱讀并了解實驗數據集;

  2 2 .使用任何一種熟悉的計算機語言( ( 比如 a C,Java 或者 matlab) 實現樸素貝葉斯算法;

  3 3 .利用樸素貝葉斯算法在訓練數據上學習分類器, , 訓練數據的大小分別設置為:前 100 個數據,前 200 個數據,前 500 個數據,前 700 個數據,前 1000 個數據,前1350 個數據;

  4 4 .利用測試數據對學習的分類器進行性能評估;

  5 5 .統計分析實驗結果并上交實驗報告;

  A 源代碼: package Bayes;

 import java.io.BufferedReader;

 import java.io.;

 import java.io.;

 import java.io.;

 import java.io.IOException;

 import java.math.BigDecimal;

 import java.util.Vector;

 import Bayes.NaiveBayesTool.Property;

 public class NaiveBayesTool {

  /*

 * 申明全局變量 // 前面是自己的屬性,后面是value的屬性

 * */

  int testTotal = 0;// 訓練樣本數量

  int predictTotal = 0;// 測試樣本的數據

  int predictSucess = 0;// 預測成功的數量

  //存儲數量

  public int[][] buy= new int[4][4];//vhigh,high,med,low

  public int[][] maint= new int[4][4];//vhigh,high,med,low

  public int[][] door= new int[4][4];//2,3,4,5more

  public int[][] person= new int[3][4];//2,4,more

  public int[][] lug_boot= new int[3][4];//small ,med,big

  public int[][] safe= new int[3][4];//low,med,high

  public int[] ClassValues= new int t[4];//unacc,acc, good,vgood

  String[] ClassValueName = { "unacc", "acc", "good", "vgood" };

  //存儲概率

  float[] ClassValue_gl = new float[4];// unacc-0 acc-1 good-2 vgood-3

  float[][] buy_Vlaue_gl = new float[4][4]; //前面是自己的屬性,后面是value的屬性

  float[][] maint_Value_gl = new float[4][4];

  float[][] door_Value_gl = new float[4][4];

  float[][] person_Value_gl = new float[3][4];

  float[][] lugboot_Value_gl = new float[3][4];

  float[][] safe_Value_gl = new float[3][4];

  /**

 * 主函數

 */

  public static void main(String[] args) throws IOException {

 NaiveBayesTool NBayes= new NaiveBayesTool();

 NBayes.ReadFile("learn.txt");//獲取訓練樣本

 NBayes.Calculated_probability();//計算概率

 NBayes.TestData();//導入測試樣本數據

 NBayes.show();//輸出結果

  }

  /*汽車屬性類

 * */

  public class Property{//汽車有6個屬性,每個屬性都有幾種類別,根據這6個屬性來判斷汽車的性價比Classvalue如何,

 public String buying;//vhigh,high,med,low

 public String maint;//vhigh,high,med,low

 public String doors;//2,3,4,5more

 public String persons;//2,4,more

 public String lug_boot;//small ,med,big

 public String safety;// low,med,high

 public String ClassValues;//unacc,acc, good,vgood

 public String[] PredictResult = new String[5];// 記錄預測結果

 public Property(String b,String m,String d,String p,String l,String s,String c){

  buying=b;maint=m;doors=d;

  persons=p;lug_boot=l;safety=s;

  ClassValues=c;

 }

  };

  Vector<Property> Data= new Vector();//存儲數據

  Vector<Property> DataTest= new Vector();//存儲測試數據

  /*

 * 文件讀寫

 獲取訓練樣本

 * */

  public void Read ) throws IOException

  {

  BufferedReader br= new BufferedReader( new ());

  String temp= null;

  temp=br.readLine();

  String []str = null;

  Property TempClass = null;

  while(temp!= null){

 str=temp.split(",");

 TempClass= new Property(str[0],str[1],str[2],str[3],str[4],str[5],str[6]);

 Statistics(TempClass);//統計個數

 testTotal++;

 temp=br.readLine();

  }

  br.close();

  }

  /*

 * 統計每一項的個數vhigh,vhigh,2,2,small,low,unacc

 * */

  public void Statistics(Property car){

 for( int i=0;i<4;i++){

  if(car.ClassValues.equals(ClassValueName[i])){

  ClassValues[i]++;

 //vhigh,high,med,low

 if(car.buying.equals("vhigh")) buy[0][i]++;

 else if(car.buying.equals("high")) buy[1][i]++;

 else if(car.buying.equals("med")) buy[2][i]++;

 else buy[3][i]++;

 //vhigh,high,med,low

 if(car.maint.equals("vhigh")) maint[0][i]++;

 else if(car.maint.equals("high")) maint[1][i]++;

 else if(car.maint.equals("med")) maint[2][i]++;

 else maint[3][i]++;

 //2,3,4,5more

 if(car.doors.equals("2")) door[0][i]++;

 else if(car.doors.equals("3")) door[1][i]++;

 else if(car.doors.equals("4")) door[2][i]++;

 else door[3][i]++;

 //2,4,more

 if(car.persons.equals("2")) person[0][i]++;

 else if(car.persons.equals("4")) person[1][i]++;

 else person[2][i]++;

 //small ,med,big

 if(car.lug_boot.equals("small")) lug_boot[0][i]++;

 else if(car.lug_boot.equals("med")) lug_boot[1][i]++;

 else lug_boot[2][i]++;

 // low,med,high

 if(car.safety.equals("low")) safe[0][i]++;

 else if(car.safety.equals("med")) safe[1][i]++;

 else safe[2][i]++;

  }

 }

  }/*

  *計算概率

  */

  public void Calculated_probability(){

 for( int i=0;i<ClassValues.length;i++)

  ClassValue_gl[i]=( float)ClassValues[i]/testTotal;

 for( int i=0;i<buy_Vlaue_gl.length;i++)

  for( int j=0;j<buy_Vlaue_gl[0].length;j++){

 buy_Vlaue_gl[i][j]=( float)buy[i][j]/ClassValues[j];

 maint_Value_gl[i][j]=( float)maint[i][j]/ClassValues[j];

 door_Value_gl[i][j]=( float)door[i][j]/ClassValues[j];

  }

 for( int i=0;i<person_Value_gl.length;i++)

  for( int j=0;j<person_Value_gl[0].length;j++){

 person_Value_gl[i][j]=( float)person[i][j]/ClassValues[j];

 lugboot_Value_gl[i][j]=( float)lug_boot[i][j]/ClassValues[j];

 safe_Value_gl[i][j]=( float)safe[i][j]/ClassValues[j];

  }

  }

  /*

 * 獲取測試數據

 * */

  public void TestData() throws IOException

  {

 BufferedReader br= new BufferedReader( new ("test.txt"));

 String temp;

 temp=br.readLine();

 String []str = null;

 Property Car = null;

 while(temp!= null){

  str=temp.split(",");

  Car= new Property(str[0],str[1],str[2],str[3],str[4],str[5],str[6]);

  predictTotal++;

  Data.addElement(Car);

  calculate(Car);

  temp=br.readLine();

 }

  }

  /**

 * 對分類器進行性能測試,判斷其成功率為多少

 * @param car

 */

  public void calculate(Property car){

 // unacc,acc,good,vgood, P(yi)--ClassValueTotal_gl 、 P(x|yi)=low,vhigh,4,2,small,low,unacc 第一條

 float itemGl;// 每一條的概率

 int b, m, d, p, l, s;

 b = m = d = p = l = s = -1;

 float MaxGl = 0;

 if (car.buying.equals("vhigh")) b = 0;

 else if (car.buying.equals("high")) b = 1;

 else if (car.buying.equals("med"))b = 2;

 else b = 3;

 if (car.maint.equals("vhigh")) m = 0;

 else if (car.maint.equals("high")) m = 1;

 else if (car.maint.equals("med"))m = 2;

 else m = 3;

 if (car.doors.equals("2")) d = 0;

 else if (car.doors.equals("3")) d = 1;

 else if (car.doors.equals("4"))d = 2;

 else d = 3;

 if (car.persons.equals("2")) p = 0;

 else if (car.persons.equals("4"))p = 1;

 else p = 2;

 if (car.lug_boot.equals("small")) l = 0;

 else if (car.lug_boot.equals("med")) l = 1;

 else l = 2;

 if (car.safety.equals("low")) s = 0;

 else if (car.safety.equals("med")) s= 1;

 else s = 2;

 int t = 0;// 記錄最大概率的下標

 int i;

 for (i = 0; i < ClassValue_gl.length; i++) {// 計算在unacc,acc,good,vgood下的概率

  itemGl = 0;

  BigDecimal[] bigDecimal = {

  new BigDecimal(Float. toString (ClassValue_gl[i])),

  new BigDecimal(Float. toString (buy_Vlaue_gl[b][i])),

  new BigDecimal(Float. toString (maint_Value_gl[m][i])),

  new BigDecimal(Float. toString (door_Value_gl[d][i])),

  new BigDecimal(Float. toString (person_Value_gl[p][i])),

  new BigDecimal(Float. toString (lugboot_Value_gl[l][i])),

  new BigDecimal(Float. toString (safe_Value_gl[s][i])),

  };

  for ( int j = 1; j < bigDecimal.length; j++) //加:a.add(b);

 除:a.divide(b,2);//2為精度取值

 bigDecimal[0] = bigDecimal[0].multiply(bigDecimal[j]);//multiply乘

  itemGl = bigDecimal[0].floatValue();

  car.PredictResult[i] = itemGl + "\t";

  if (MaxGl < itemGl) {

 MaxGl = itemGl;

 t = i;

  }

 }

 // 判斷結果是否正確

 if (car.ClassValues.equals(ClassValueName[t])) {// 預測結果和開始給定

 的結果相等

  car.PredictResult[i] = "true";

  predictSucess++;

 } else

  car.PredictResult[i] = "false";

  }

  public void show()

  {

 for ( int i =0; i < predictTotal; i++) {

  Property c = Data.get(i);

  for ( int j = 0; j < c.PredictResult.length; j++)

 System. out .print(c.PredictResult[j] + "\t");

  System. out .println();

 }

 // 分類器的準確率

 float t = ( float) predictSucess / predictTotal;

 t=t*10000/100;

 System. out .println("\n分類器的準確率為:" + t+ "%");

  }

 }

  四、思考題 1. 實驗 A A 中的分類器的優缺點。

  可能存在0概率問題

 存在準確度問題,樸素貝葉斯分類器是基于樣本屬性條件獨立的假設的前提下的,但是實際情況可能并不成立,這樣也就缺失準確性了.

 解決樸素貝葉斯準確性問題提出的一種方法叫做:貝葉斯網絡(Bayesian Belief Networks )

 2. 評價最小錯誤概率貝葉斯分類器和最小風險概率貝葉斯分類器

  基于最小錯誤率的貝葉斯決策

  實質: : 通過觀察 x x 把狀態的先驗概率 P(wi) 轉化為后驗概率

  判別錯誤率的問題

  基于最小風險的貝葉斯決策考慮到各種錯誤照成的損失不同而提出的一種決策規則

 最小風險的貝葉斯決策的計算方法:

 1)根據貝葉斯公式,計算出后驗概率 2)利用后驗概率和決策表,計算出條件風險 3)比較2中的計算結果,找出使條件風險最小的決策 Ak,則它就是最小風險的貝葉斯決策 兩者之間的關系:基于最小錯誤率的決策是基于最小風險決策的一個特例

 3.驗 計算實驗 B B 中葉斯分類器和最小風險概率貝葉斯分類器的分類臨界值 [x1 x2] ,比較差別,并統計兩種正確率。( ( 同上) )

  4. 提出一種提高分類器性能的方法并通過實驗驗證。

  Adaboost :基于錯誤提升分類器的性能

 Adaboost 是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器,即弱分類器,然后把這些弱分類器集合起來,構造一個更強的最終分類器,比起弱分類器,這個“強”分類器的錯誤率會低很多。

 Adaboost 算法本身是改變數據分布實現的,它根據每次訓練集之中的每個樣本的分類是否正確,以及上次的總體分類的準確率,來確定每個樣本的權值。將修改權值的新數據送給下層分類器進行訓練,然后將每次訓練得到的分類器融合起來,作為最后的決策分類器。以下給出 Adaboost 算法的運行過程:

 1. 訓練數據中的每個樣本,并賦予其一個權重,這些權重構成向量 D,一開始時權重 D 初始化為相等的值;

 2. 先在訓練樣本上訓練得到第一個弱分類器并計算分類器的 錯誤率 ;

 3. 在同一數據集上再次訓練弱分類器,在分類器的二次訓練中,會重新調整每個樣本的權重,其中第一次分類正確的樣本的權重將會降低,而分類錯誤的樣本權重將會提高 ;

 4. 為了從所有弱分類器中得到最終的分類結果,Adaboost 為每個分類器都分配了一個權重值 alpha,這一組值是基于每個弱分類器的 錯誤率進行計算的。

 其中, 錯誤率由以下公式定義:

 (學習的目的是增長知識,提高能力,相信一分耕耘一分收獲,努力就一定可以獲得應有的回報)

推薦訪問: 實驗 報告 貝葉斯

【貝葉斯實驗報告】相關推薦

工作總結最新推薦

NEW
  • 同志們:今天這個大會,是市委全面落實黨要管黨、從嚴治黨要求的一項重大舉措,也是對縣市區委書記履行基層黨建工作第一責任人情況的一次集中檢閱,同時是對全市基層黨建工作的一次再部署、再落實的會議。前面,**

  • ***年,我認真履行領班子、帶隊伍、抓黨員、保穩定的基層黨建工作思路,以學習貫徹習近平新時代中國特色社會主義思想和黨的十九大歷次全會精神為主線,以市局基層黨建工作考核細則為落腳點,落實全面從嚴治黨主體

  • 根據會議安排,現將2022年履行抓基層黨建工作職責情況報告如下:一、履職工作特色和亮點1 突出政治建設,著力在思想認識上提高。牢固樹立抓黨建就是抓政績的理念,以“黨建工作抓引領、社區治理求突破,為民服

  • 2022年以來,在**黨委的正確領導下,堅持以習近平新時代中國特色社會主義思想為指導,深入學習宣傳貫徹黨的二十大精神,以黨建工作為統領,扎實開展夯實“三個基本”活動,以“四化四力”行動為抓手,聚力創建

  • 各位領導,同志們:根據會議安排,現就2022年度抓基層黨建工作情況匯報如下:一、主要做法及成效(一)強化政治引領。一是不斷強化理論武裝。堅持通過黨組會、中心組學習會和“三會一課”,第一時間、第一議題學

  • 2022年度抓基層黨建工作述職報告按照黨委工作部署,現將本人2022年度抓基層黨建工作情況報告如下:一、2022年度抓基層黨建工作情況(一)旗幟鮮明講政治將旗幟鮮明講政治放在全局發展首要位置,積極開展

  • 2022年,是我在數計系黨總支書記這個新崗位上度過的第一個完整的工作年度。回首一年來在校黨委的正確領導下,與數計系領導班子和全體師生共同走過的日子,艱辛歷歷在目,收獲溫潤心田。作為黨總支書記,我始終牢

  • 按照考核要求,現將本人一年來,作為統戰部長履行職責、廉潔自律等方面情況報告如下:一、著眼增強政治素質,不斷深化理論學習堅持把旗幟鮮明講政治作為履職從政的第一位要求,帶領統戰系統干部堅決擁護“兩個確立”

  • **年,緊緊圍繞黨工委、管委會的決策部署,全體人員團結協作、凝心聚力,緊扣黨工委“**”基本工作思路,全力開拓進取,認真履職盡責,圓滿完成各項工作任務。一、個人思想政治狀況檸檬文苑www bgzjy

  • 按照縣委關于開展抓基層黨建述職評議會議的有關要求,經請示縣委組織部同意,今天,我們在此召開2022年度基層黨組織書記抓基層黨建述職評議會議。1 首先,請**黨委書記,**同志述職。**黨委能夠主動研究