




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上簡單樸素貝葉斯分類器的思想與算法分析在數(shù)據(jù)倉庫和數(shù)據(jù)挖掘應(yīng)用中,分類是一種非常重要的方法分類的概念是在已有數(shù)據(jù)的基礎(chǔ)上學(xué)會一個分類函數(shù)或構(gòu)造出一個分類模型,即我們通常所說的分類器(Classifier)該函數(shù)或模型能夠把數(shù)據(jù)集合中的數(shù)據(jù)記錄映射到給定類別中的某一個值,從而可以應(yīng)用于數(shù)據(jù)預(yù)測目前,分類的主要算法有貝葉斯算法、決策樹算法(如ID3、C4.5等)、規(guī)則推導(dǎo)、人工神經(jīng)網(wǎng)絡(luò)、最近鄰算法、支持向量機等等這些算法在許多現(xiàn)實數(shù)據(jù)集合上具有較好的預(yù)測精度其中樸素貝葉斯算法具有良好的可解釋性等,在實踐中的應(yīng)用最為廣泛樸素貝葉斯算法是基于統(tǒng)計理論的方法,它能夠預(yù)測所屬類別的
2、概率簡單樸素貝葉斯分類器假設(shè)一個指定類別中各屬性的取值是相互獨立的這一假設(shè)稱為給定類別條件下的獨立性(Class Conditional Independence)假設(shè),它可以有效減少在構(gòu)造分類器時所需要的計算量簡單樸素貝葉斯算法的分類模型是基于Bayes定理的,下面就簡單介紹一下Bayes定理設(shè)X為一個類別未知的數(shù)據(jù)樣本,H為某個假設(shè),C表示類別集合,若數(shù)據(jù)樣本X屬于一個特定的類別c,那么分類問題就是決定P(H/X),即在獲得數(shù)據(jù)樣本X時,H假設(shè)成立的概率由于P(H) , P(X), P(X/H)的概率值可以從(供學(xué)習(xí)使用的)數(shù)據(jù)集合中得到,Bayes定理描述了如何根據(jù)P(H) , P(X)
3、, P(X/H)計算獲得的P(H/X),有關(guān)的具體公式定義描述如下:(1)簡單樸素貝葉斯分類器進行分類操作的步驟說明如下:1每個數(shù)據(jù)樣本均是由一個n維特征向量X=x1,x2, , xn來描述其n個屬性(A1, A2, , An)的具體取值2假設(shè)共有m個不同類別,C1, C2, , Cn給定一個未知類別的數(shù)據(jù)樣本X,分類器在已知樣本X的情況下,預(yù)測X屬于事后概率最大的那個類別也就是說,樸素貝葉斯分類器將未知類別的樣本X歸屬到類別Ci,當(dāng)且僅當(dāng):P(Ci/X)> P(Cj/X) 其中1jm,ji也就是P(Ci/X)最大其中的類別Ci就稱為最大事后概率的假設(shè),根據(jù)Bayes定理可知,(2)3由
4、于P(X)對于所有的類別均是相同的,所以,要使公式(2)取得最大值,只需要P(X/Ci)P(Ci)取最大即可類別的事前概率P(Ci)可以通過公式P(Ci)=si/s進行估算,其中si為訓(xùn)練樣本集合類別Ci的個數(shù),s為整個訓(xùn)練樣本集合的大小4根據(jù)所給定包含多個屬性的數(shù)據(jù)集,直接計算P(X/Ci)的運算量是非常大的為實現(xiàn)對P(X/Ci)的有效估算,樸素貝葉斯分類器通常都是假設(shè)各類別是相互獨立的即各屬性的取值是相互獨立的即:(3)可以根據(jù)訓(xùn)練數(shù)據(jù)樣本估算P(X1/Ci),P(X2/Ci),P(Xn/Ci)的值,具體處理方法說明如下:若Ak是名稱型屬性,就有P(Xk/Ci)=sik/si,這里sik為
5、訓(xùn)練樣本中類別為Ci且屬性Ak的取值為vk的樣本數(shù),si為訓(xùn)練樣本中類別為Ci的樣本數(shù)若Ak是數(shù)值型屬性,那么假設(shè)屬性具有高斯分布,概率P(Xk/Ci)就用概率密度f(Xk/Ci)代替,即(4)其中, g(xk,ci,ci)為屬性Ak的高斯規(guī)范密度函數(shù),ci,ci為訓(xùn)練樣本中類別為Ci的屬性為Ak的均值和方差數(shù)值型屬性的均值計算公式為: xmean=(x1+x2+xn)/n,其中x1, x2, , xn表示數(shù)值型屬性的值,n表示實例個數(shù)數(shù)值型屬性的方差計算公式為:(5)其中x1, x2, , xn表示數(shù)值型屬性的值,xmean表示方差,n表示實例個數(shù)5為預(yù)測一個樣本X的類別,可對每個類別Ci估
6、算相應(yīng)的P(X/Ci)P(Ci),樣本X歸屬到類別Ci,當(dāng)且僅當(dāng):P(Ci/X)> P(Cj/X) 其中1jm, ji也可通過求百分比percent(Ci)= P(Ci/X)/P(Ck/X),百分比最大值對應(yīng)的類標(biāo)就位樣本X的類別下面就以有關(guān)天氣問題的數(shù)據(jù)為例仔細介紹一下樸素貝葉斯分類器進行分類的過程有關(guān)天氣的數(shù)據(jù)如下表所示: outlook(類型)temperature(溫度)humidity(濕度)windy(風(fēng))play(玩)sunny8585FalseNosunny8090TrueNoovercast8386FalseYesrainy7096FalseYesrainy6880Fa
7、lseYesrainy6570TrueNoovercast6465TrueYessunny7295FalseNosunny6970Falseyesrainy7580Falseyessunny7570Trueyesovercast7290Trueyesovercast8175Falseyesrainy7191Trueno概率的表示方法:P(yes/sunny,80,76,false)=0.25就表示在outlook=sunny, temperature=80, humidity=76,windy=false的條件下paly=yes條件概率為0.251求得名稱型屬性的后驗概率以P(sunny/ye
8、s)為例進行詳細說明首先,計算類標(biāo)為yes的實例個數(shù)為9個,然后計算類標(biāo)為yes并且outlook屬性為sunny的實例個數(shù)為2,所以P(sunny/yes)=2/9,這是很自然的事情,為了避免有時該概率值為0,需要對該概率值進行標(biāo)準(zhǔn)化:即分子加上屬性outlook值的個數(shù),也就是3(因為outlook的值有sunny, rainy, overcast三個),分母加上1,標(biāo)準(zhǔn)化后的條件概率P(sunny/yes)=(2+1)/(9+3)=3/12重復(fù)上述步驟,可得屬性outlook的后驗概率為:P(sunny/yes)=3/12P(overcast/yes)=5/12P(rainy/yes)=
9、4/12P(sunny/no)=4/8P(overcast/no)=1/8P(rainy/no)=3/8屬性windy的后驗概率為:P(false/yes)=7/11P(false /yes)=4/11P(false/no)=3/7P(false /no)=4/72求得數(shù)值型屬性的均值數(shù)值型屬性的均值計算公式為:xmean=(x1+x2+xn)/n,其中x1, x2, , xn表示數(shù)值型屬性的值,n表示實例個數(shù)下面就以求在play=yes的條件下數(shù)值型屬性temperature的均值為例詳細說明求解過程:mean- temperature(yes)=(83+70+68+64+69+75+75+
10、72+81)/9=73同理:mean- temperature(no)=(85+80+65+72+71)/5=74.6mean- humidity(yes)=(86+96+80+65+70+80+70+90+75)/9=79.1mean- humidity(no)=(85+90+70+95+91/5=86.23求得數(shù)值型屬性的方差數(shù)值型屬性的方差計算公式為:(6)其中x1, x2, , xn表示數(shù)值型屬性的值,xmean表示方差,n表示實例個數(shù)下面就以求在play=yes的條件下數(shù)值型屬性temperature的方差為例詳細說明求解過程Devs-temperature(yes)=(83-73)
11、2+(70-73)2+(68-73)2+(64-73)2+(69-73)2+(75-73)2+(75-73)2+(72-73)2+(81-73)2)/9=6.2同理,可求得Devs-temperature(no)=7.9Devs-humidity(no)=10.2Devs-humidity(no)=9.74求得類屬性的先驗概率以P(yes)為例進行詳細說明首先計算數(shù)據(jù)集的實例總數(shù)為14,然后計算類標(biāo)為yes的實例總數(shù)為9,所以P(yes)=9/14,為避免有時該概率值為0,需要對該概率值進行標(biāo)準(zhǔn)化:即分子加上類屬性play值的個數(shù),也就是2(因為play的值有yes, no二個),分母加上1,
12、標(biāo)準(zhǔn)化后的條件概率P(yes)=(9+1)/(14+2)=10/16,同理可求得P(no)=(5+1)/(14+2)=6/165根據(jù)上述參數(shù)計算待分類實例屬于每個類的概率,選擇概率值最大的類作為待分類實例的類標(biāo)下面以實例(sunny,66,90,true)為例說明一下其分類過程:首先求P(yes/sunny,66,90,true),根據(jù)bayes定理和條件獨立性假設(shè),P(yes/sunny,66,90,true)=(P(yes)P(sunny/yes)P(true/yes)f(66/yes)f(90/yes)/P(sunny,66,90,true)由于P(sunny,66,90,true)為常
13、數(shù),最后求類的百分比的時候可以抵消,可以不加考慮,而P(66/yes)可用概率密度f(66/yes)來代替,這對最后的求類的百分比也沒有影響,所以我們只需求P(yes)P(sunny/yes)P(true/yes) f(66/yes) f(90/yes)而P(yes),P(sunny/yes),P(true/yes)已經(jīng)求得,根據(jù)正態(tài)分布假設(shè),f(66/yes), f(90/yes) 也很容易求得(6)同理可求得f(90/yes)=0.0221,所以:P(yes)P(sunny/yes)P(true/yes) f(66/yes) f(90/yes)=10/16×3/12×0
14、.034×0.0221×4/11=0.重復(fù)上述步驟可得:f(66/no)=0.0291,f(90/no)=0.0380,因而有:P(no)P(sunny/no)P(true/no) f(66/no) f(90/no)=6/16×4/8×4/7×0.0291×0.0380=0.00018所以,待分類實例屬于類yes的百分比為probability-of-yes=0./(0.+0.)=26.7%probability-of-no=0./(0.+0.)=73.3%因此,待分類實例的類屬性值為no基于本文所述ID3的基本思想,ID3的具體算法
15、是:下面我們介紹一下其算法實現(xiàn)的有關(guān)細節(jié)我們所介紹的ID3程序是在weka系統(tǒng)下利用java語言編寫的分類器程序該程序主要包括以下幾個方法:globalInfo()返回該分類器的描述字符串BuildClassifier(Instances instances)BuildClassifier()方法從一個訓(xùn)練數(shù)據(jù)集合instances構(gòu)造一個分類器求出所有名稱型屬性的后驗概率,類屬性的先驗概率,數(shù)值屬性的均值和方差,為后來的分類工作做準(zhǔn)備distributionForInstance (Instance instance)該方法計算待分類實例instance屬于各個類標(biāo)的百分比,并且將各個百分比
16、數(shù)值存于一個數(shù)組中,最后返回該數(shù)組toString()把分類器的參數(shù)(均值,方差,各先驗概率,各后驗概率)以字符串的形式返回normalDens(double x, double mean, double stdDev)該方法用于根據(jù)正態(tài)分布(均值為mean,方差為stdDev)計算數(shù)值型屬性當(dāng)屬性值為x時的概率密度Main()當(dāng)類從命令行被執(zhí)行時,就會調(diào)用main()方法它只是用所給的命令行選項告訴Weka的Evaluation類來評估樸素貝葉斯,并且打印所得到的數(shù)組完成這個功能的一行表達式包括在try-catch聲明中try-catch聲明用于發(fā)現(xiàn)Weka例程或其它Java方法中拋出的各種
17、異常附一:樸素貝葉斯源程序及其注解:/* This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.* This program is distributed in the
18、hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.* You should have received a copy of the GNU General Public License* along with this program; if not
19、, write to the Free Software* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA./* 本程序為免費軟件;你可以通過免費軟件中心的發(fā)布的GNU公共許可的任何版本下下重寫或者修改它.* 開發(fā)本程序的目的是是希望它是有用的,但沒有任何授權(quán),甚至沒有潛在的商用或其它特殊目的的授權(quán).* 想要了解更多細節(jié),請參閱GNU公共許可.*在拿到程序的同時,你應(yīng)該收到GNU公共許可;假如沒有的話,請致函免費軟件中心Inc., 675 MassAve, Cambridge, MA 02139, USA./* NaiveBay
20、esSimple.java* Copyright (C) 1999 Eibe Frank*/package weka.classifiers.bayes;import weka.classifiers.Classifier; import weka.classifiers.Evaluation; import java.io.*;import java.util.*;import weka.core.*;/* Class for building and using a simple Naive Bayes classifier.* Numeric attributes are modelle
21、d by a normal distribution. For more* information, see<p>* Richard Duda and Peter Hart (1973).<i>Pattern* Classification and Scene Analysis</i>. Wiley, New York.* author Eibe Frank (eibecs.waikato.ac.nz)* version $Revision: 1.15 $*/*創(chuàng)建和使用Naive Bayes分類器的類*數(shù)值型屬性均符合正態(tài)分布*/public class
22、NaiveBayesSimple eXtends Classifier /分類器的構(gòu)造函數(shù) public NaiveBayesSimple() try jbInit(); /分類器初始化 catch (EXception eX) eX.printStackTrace(); /創(chuàng)建分類器對象時若出現(xiàn)異常則輸出堆棧信息 /* All the counts for nominal attributes. 所有名稱型屬性的計數(shù)數(shù)組*/protected double m_Counts; /*屬于每個類每個名稱型屬性的每個取值的個數(shù)數(shù)組,其中第一維表示類名,第二維表示屬性名,第三維表示屬性值,比如m_C
23、ountsyesoutlooksunny*/* The means for numeric attributes. 數(shù)值型屬性的均值數(shù)組*/protected double m_Means; /*數(shù)值型屬性的均值數(shù)組,其中第一維表示類名, 第二維表示屬性名,比如m_Meansnotemperature, 公式為:(7)*/* The standard deviations for numeric attributes.數(shù)值型屬性的標(biāo)準(zhǔn)差數(shù)組 */protected double m_Devs; /*數(shù)值型屬性的標(biāo)準(zhǔn)差數(shù)組,其中第一維表示類名,第二維表示屬性名,比如m_Devsnotempera
24、ture,公式為:(8)*/* The prior probabilities of the classes. 每個類的先驗概率數(shù)組 */protected double m_Priors; /每個類的先驗概率,第一維表示類名,比如m_Prioryes/* The instances used for training. 用于訓(xùn)練的實例*/protected Instances m_Instances; /定義用于訓(xùn)練的實例/* Constant for normal distribution. 正態(tài)分布常量*/protected static double NORM_CONST = Math
25、.sqrt(2 * Math.PI); /正態(tài)分布常量/* Returns a string describing this classifier* return a description of the classifier suitable for* displaying in the eXplorer/eXperimenter gui*/*返回該分類器的描述字符串*返回適合于圖形界面用戶的分類器的描述*/方法一:public String globalInfo() /返回該分類器的描述字符串 return "Class for building and using a simp
26、le Naive Bayes classifier." +"Numeric attributes are modelled by a normal distribution. For more " +"information, seenn" +"Richard Duda and Peter Hart (1973). Pattern " +"Classification and Scene Analysis. Wiley, New York."/* Generates the classifier.* pa
27、ram instances set of instances serving as training data* eXception EXception if the classifier has not been generated successfully*/* 構(gòu)造分類器* 參數(shù)instances表示訓(xùn)練例集合* 若分類器不正正常構(gòu)造,則出現(xiàn)異常提示*/方法二:public void buildClassifier(Instances instances) throws EXception / 構(gòu)造分類器 int attIndeX = 0; /屬性索引 double sum; /屬于每個
28、類的每個名稱型屬性的總個數(shù) if (instances.checkForStringAttributes() throw new UnsupportedAttributeTypeEXception("Cannot handle string attributes!"); /若實例集合為string型則提示異常 if (instances.classAttribute().isNumeric() throw new UnsupportedClassTypeEXception("Naive Bayes: Class is numeric!"); /若實例集合
29、的類屬性為數(shù)值型則提示異常 m_Instances = new Instances(instances, 0); /空實例 / Reserve space為數(shù)組m_Counts,m_Means,m_Devs,m_Priors分配空間 m_Counts = new doubleinstances.numClasses() instances.numAttributes() - 10; /*屬于每個類每個名稱型屬性的每個取值的個數(shù)數(shù)組,其中第一維表示類名,第二維表示屬性名,第三維表示屬性值,instances.numClasses()返回實例集的類值的個數(shù),instances.numAttribu
30、tes()返回實例集的屬性個數(shù),包括類屬性,這也是第二維減一的原因,第三維之所以為零是 因為后續(xù)分配空間的方便*/ m_Means = new doubleinstances.numClasses() instances.numAttributes() - 1;/*數(shù)值型屬性的均值數(shù)組,其中第一維表示類名, 第二維表示屬性名,instances.numClasses()返回實例集的類值的個數(shù), instances.numAttributes()返回實例集的 屬性個數(shù),包括類屬性,這也是第二維減一的原因, */ m_Devs = new doubleinstances.numClasses()i
31、nstances.numAttributes() - 1;/*數(shù)值型屬性的標(biāo)準(zhǔn)差數(shù)組,其中第一維表示類名, 第二維表示屬性名,instances.numClasses()返回實例集的類值的個數(shù), instances.numAttributes()返回實例集的 屬性個數(shù),包括類屬性,這也是第二維減一的原因, */ m_Priors = new doubleinstances.numClasses(); /*每個類的先驗概率數(shù)組,第一維表示類名,instances.numClasses()返回實例集的類值的個數(shù), */第一步: Enumeration enu = instances.enumera
32、teAttributes(); /返回一個實例集的屬性集 while (enu.hasMoreElements() /遍歷實例集的每個屬性,為 m_Counts分配空間 Attribute attribute = (Attribute) enu.neXtElement(); /循環(huán)從屬性集中取每個屬性 if (attribute.isNominal() /屬性若為名稱型屬性for (int j = 0; j < instances.numClasses(); j+) /遍歷類 m_CountsjattIndeX = new doubleattribute.numValues();/*為屬
33、于每個類的每個名稱型屬性的每個取值的個數(shù)數(shù)組m_Counts預(yù)留空間,attribute.numValues()返回屬性attibute的值的個數(shù). */ else /屬性若為數(shù)值型屬性for (int j = 0; j < instances.numClasses(); j+) /遍歷類 m_CountsjattIndeX = new double1; /若該屬性不為名稱型屬性,則數(shù)組初始化為長度為1的一維數(shù)組 attIndeX+; /屬性索引加一,執(zhí)行下一個屬性 第二步: Enumeration enu = instances.enumerateAttributes(); /返回一個
34、實例集的屬性集 while (enu.hasMoreElements() /遍歷實例集的每個屬性,為 m_Counts分配空間 Attribute attribute = (Attribute) enu.neXtElement(); /循環(huán)從屬性集中取每個屬性 if (attribute.isNominal() /屬性若為名稱型屬性for (int j = 0; j < instances.numClasses(); j+) /遍歷類 m_CountsjattIndeX = new doubleattribute.numValues(); /*為屬于每個類的每個名稱型屬性的每個取值的個數(shù)
35、數(shù)組m_Counts預(yù)留空間,attribute.numValues()返回屬性attibute的值的個數(shù). */ else /屬性若為數(shù)值型屬性for (int j = 0; j < instances.numClasses(); j+) /遍歷類 m_CountsjattIndeX = new double1; /若該屬性不為名稱型屬性,則數(shù)組初始化為長度為1的一維數(shù)組 attIndeX+; /屬性索引加一,執(zhí)行下一個屬性 /*Compute means 計算數(shù)值型屬性的均值,公式為: (9)*/第三步: Enumeration enumAtts = instances.enumer
36、ateAttributes(); /返回實例集對應(yīng)的屬性的集合 attIndeX = 0; /屬性索引,用于循環(huán)遍歷屬性 while (enumAtts.hasMoreElements() /遍歷屬性,計算數(shù)組 m_Means Attribute attribute = (Attribute) enumAtts.neXtElement(); /取得一個屬性 if (attribute.isNumeric() /該屬性為數(shù)值型屬性則繼續(xù)執(zhí)行for (int j = 0; j < instances.numClasses(); j+) /遍歷類標(biāo),計算數(shù)組 m_Meansif (m_Coun
37、tsjattIndeX0 < 2) /若該類值對應(yīng)的數(shù)值型屬性值個數(shù)小于2,則拋出異常 throw new EXception("attribute " + () +": less than two values for class " +instances.classAttribute().value(j); m_MeansjattIndeX /= m_CountsjattIndeX0; /求得該數(shù)值型屬性的每個類標(biāo)對應(yīng)的均值 attIndeX+; /屬性索引加1,繼續(xù)執(zhí)行下一屬性 第四步: /* Compute st
38、andard deviations 計算數(shù)值型屬性的標(biāo)準(zhǔn)差,公式為:(10)*/ enumInsts = instances.enumerateInstances(); /取得實例集合 while (enumInsts.hasMoreElements() /*遍歷實例集合,計算數(shù)值型屬性的m_Devs,本循環(huán)的結(jié)果是在m_Devs存放方差計算公式中的分子,即偏移量的平方和*/ Instance instance = (Instance) enumInsts.neXtElement(); /從實例集合中取出一個實例 if (!instance.classIsMissing() /若該實例類信息完
39、整的話則繼續(xù)執(zhí)行enumAtts = instances.enumerateAttributes(); /取得實例集對應(yīng)的的屬性集attIndeX = 0; /屬性索引,用于遍歷屬性while (enumAtts.hasMoreElements() /遍歷屬性,計算數(shù)值型屬性的m_DevsAttribute attribute = (Attribute) enumAtts.neXtElement(); /從屬性集合中取得一個屬性if (!instance.isMissing(attribute) / 若該實例的該屬性沒有缺損則繼續(xù)執(zhí)行 if (attribute.isNumeric() /若該
40、屬性為數(shù)值型屬性則繼續(xù)執(zhí)行 m_Devs(int)instance.classValue()attIndeX +=(m_Means(int)instance.classValue()attIndeX- instance.value(attribute)*(m_Means(int)instance.classValue()attIndeX- instance.value(attribute); /求得偏移量的平方和,即方差就算公式中的分子 attIndeX+; /屬性索引加1,繼續(xù)執(zhí)行下一屬性 enumAtts = instances.enumerateAttributes(); /取得實例集對
41、應(yīng)的屬性集合 attIndeX = 0; /屬性索引,用于遍歷屬性 while (enumAtts.hasMoreElements() /遍歷屬性,計算每個數(shù)值型屬性的方差,結(jié)果存于 m_Devs Attribute attribute = (Attribute) enumAtts.neXtElement(); /從屬性集合中取得一個屬性 if (attribute.isNumeric() /若該屬性為數(shù)值型則繼續(xù)執(zhí)行for (int j = 0; j < instances.numClasses(); j+) /遍歷類,求得該數(shù)值型的每個類值的標(biāo)準(zhǔn)差 if (m_DevsjattInd
42、eX <= 0) /若偏移量的平方和為0,則拋出異常,否則計算m_Devs throw new EXception("attribute " + () +": standard deviation is 0 for class " +instances.classAttribute().value(j); else / 為什么(_CountsjattIndeX0 - 1) m_DevsjattIndeX /= m_CountsjattIndeX0 - 1; /*利用偏移量的平方和除以數(shù)值型屬性的個數(shù)減1求得標(biāo)準(zhǔn)差的平方*
43、/ m_DevsjattIndeX = Math.sqrt(m_DevsjattIndeX); /對上一步的結(jié)果開方求得標(biāo)準(zhǔn)差 attIndeX+; /屬性索引值加上1,繼續(xù)執(zhí)行下一屬性 第五步: / Normalize counts 標(biāo)準(zhǔn)化數(shù)組m_Counts,即把原來個數(shù)數(shù)組m_Counts中的個數(shù)轉(zhuǎn)化為概率數(shù)組m_Counts enumAtts = instances.enumerateAttributes(); /取得屬性集合 attIndeX = 0; /屬性索引,用于遍歷屬性 while (enumAtts.hasMoreElements() /遍歷屬性,求得概率數(shù)組m_Count
44、s Attribute attribute = (Attribute) enumAtts.neXtElement(); /從屬性集合中取得一個屬性 if (attribute.isNominal() /若屬性為名稱型屬性則繼續(xù)執(zhí)行for (int j = 0; j < instances.numClasses(); j+) /遍歷類,求得概率數(shù)組m_Counts sum = Utils.sum(m_CountsjattIndeX); /*計算該類對應(yīng)的實例的總數(shù),函數(shù)Utils.sum(m_CountsyesOutlook)返回屬于"yes"類的實例個數(shù)*/ for
45、(int i = 0; i < attribute.numValues(); i+) /遍歷該屬性對應(yīng)的屬性值 m_CountsjattIndeXi = (m_CountsjattIndeXi + 1) / (sum + (double)attribute.numValues(); /*計算該類值對應(yīng)的該屬性值的概率(分子為 m_Counts+1,分母為該類值對應(yīng)的實例的總數(shù)加上屬性值的個數(shù)),比如m_CountsyesOutlooksunny=(m_CountsyesOutlooksunny+1)/(sum + 屬性值的個數(shù)) */ attIndeX+; /屬性索引加1,繼續(xù)執(zhí)行下一屬
46、性 第六步: / Normalize priors 標(biāo)準(zhǔn)化先驗概率 sum = Utils.sum(m_Priors); /計算實例的總數(shù) for (int j = 0; j < instances.numClasses(); j+) /遍歷類 m_Priorsj = (m_Priorsj + 1) / (sum + (double)instances.numClasses(); /*計算每個類的先驗概率(分子為每個類的實例個數(shù)加1,分母為實例集的實例總數(shù)加上類標(biāo)的個數(shù)) */ /* * Calculates the class membership probabilities for
47、the given test instance. * * param instance the instance to be classified * return predicted class probability distribution * eXception EXception if distribution can't be computed */ /* *計算給定測試?yán)念惛怕史植?* *參數(shù)instance表示待分類的實例 *返回預(yù)測概率分布表 *若預(yù)測概率分布不能計算的話返回異常 */方法三:public double distributionForInstance
48、(Instance instance) throws EXception double probs = new doubleinstance.numClasses(); /預(yù)測概率百分比數(shù)組,該數(shù)組將要存放的是待定實例屬于每個類的概率所占的百分比 int attIndeX; /屬性標(biāo)記,用于遍歷屬性 for (int j = 0; j < instance.numClasses(); j+) /遍歷每個類,計算probs probsj = 1; /對數(shù)組probs進行初始化 Enumeration enumAtts = instance.enumerateAttributes(); /取
49、得待定實例的屬性集合 attIndeX = 0; /屬性標(biāo)記置0,將要開始遍歷 while (enumAtts.hasMoreElements() /屬性遍歷Attribute attribute = (Attribute) enumAtts.neXtElement(); /從屬性集合中取得一個屬性if (!instance.isMissing(attribute) /若給定實例的屬性沒有缺損則繼續(xù)執(zhí)行 if (attribute.isNominal() /若該屬性為名稱型屬性則繼續(xù)執(zhí)行 probsj *= m_CountsjattIndeX(int)instance.value(attrib
50、ute); /該屬性為名稱型屬性就直接乘以該類該屬性值的概率m_Counts(上面已經(jīng)計算) else probsj *= normalDens(instance.value(attribute), m_MeansjattIndeX, m_DevsjattIndeX); /該屬性為數(shù)值型屬性就乘以該類該屬性值對應(yīng)的概率密度(利用正態(tài)分布概率密度公式求出)attIndeX+; /屬性值加1,繼續(xù)遍歷下一屬性 probsj *= m_Priorsj; /用probsj乘以先驗概率m_Priorsj,結(jié)果表示bayias公式的分子 / Normalize probabilities 標(biāo)準(zhǔn)化待定實例屬
51、于每個類的概率所占的百分比 Utils.normalize(probs); /*求得待定實例屬于每個類的概率所占的百分比,即probsj=probsj/(probs0+probs1+probs2+.+) */ return probs; /返回 /* * Returns a description of the classifier. * * return a description of the classifier as a string. */ /* *返回分類器的描述 * * */方法四:public String toString() if (m_Instances = null)
52、return "Naive Bayes (simple): No model built yet." /*若實例集為空,則返回"Naive Bayes (simple): No model built yet." */ try StringBuffer teXt = new StringBuffer("Naive Bayes (simple)"); /建立字符串緩沖區(qū),用于描述分類器 int attIndeX; /建立屬性索引索引 for (int i = 0; i < m_Instances.numClasses(); i+) /遍歷類teXt.append("nnClass " + m_Instances.classAttribute().value(i) + ": P(C) = " + Utils.doubleToString(m_Priorsi, 10, 8) + "nn"); /在字符串緩沖區(qū)存
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- cnc學(xué)徒合同協(xié)議書
- 租房用途合同協(xié)議書
- 淤泥外運合同協(xié)議書
- 終止合同協(xié)議書blog
- 車輛救援合同協(xié)議書
- 搭蓋帳篷合同協(xié)議書
- 合同欠條轉(zhuǎn)讓協(xié)議書
- 工程員工合同協(xié)議書
- 客戶合同續(xù)約協(xié)議書
- 產(chǎn)品代工合同協(xié)議書
- 邏輯門公開課教案教學(xué)設(shè)計課件
- 現(xiàn)代漢語(黃伯榮、廖序東版)課件–緒論
- 固定循環(huán)指令G71(G70)(課件)
- 第三次全國國土調(diào)查工作分類與三大類對照表
- 職業(yè)生涯規(guī)劃表模板
- DL/T 5182-2021 火力發(fā)電廠儀表與控制就地設(shè)備安裝、管路、電纜設(shè)計規(guī)程
- 從龍的形象看媽祖的文化精神
- 麟龍量能飽和度圓圈指標(biāo)
- 我的小學(xué)生涯
- 無人機導(dǎo)航與通信技術(shù)PPT完整全套教學(xué)課件
- 第三帝國三部曲:當(dāng)權(quán)的第三帝國(全集)
評論
0/150
提交評論