版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、簡單樸素貝葉斯分類器的思想與算法分析在數(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ò)、最近鄰算法、支持向量機(jī)等等.這些算法在許多現(xiàn)實(shí)數(shù)據(jù)集合上具有較好的 預(yù)測精度其中樸素貝葉斯算法具有良好的可解釋性等,在實(shí)踐中的應(yīng)用最為廣泛.樸素貝葉斯算法是基于統(tǒng)計(jì)理論的方法,它能夠預(yù)測所屬類別的概率.簡單樸素貝
2、葉斯分類器假設(shè)一個指定類別中各屬性的取值是相互獨(dú)立的.這一假設(shè)稱為給定類別條件下的獨(dú)立性(Class Conditional Independenee)假設(shè),它可以有效減少在構(gòu)造分類器時所需要的計(jì)算 量.簡單樸素貝葉斯算法的分類模型是基于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(
3、X), P(X/H)計(jì)算獲得的P(H/X),有關(guān)的具體公式定義描述如下:P(H /X)二P(X/H)P(H)(1)簡單樸素貝葉斯分類器進(jìn)行分類操作的步驟說明如下: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)其中1 < j < m,j豐i 也就是P(Ci/X)最大.其中
4、的類別Ci就稱為最大事后概率的假設(shè),根據(jù)Bayes定理可知,P(Ci/X)二P(X/Ci)P(Ci)P(X)3由于P(X)對于所有的類別均是相同的,所以,要使公式(2)取得最大值,只需要P(X/Ci)P(Ci)取最大即可.類別的事前概率P(Ci)可以通過公式 P(Ci)=s/s進(jìn)行估算,其中s為訓(xùn)練樣本集合類別 Ci的個數(shù),s為整個訓(xùn)練樣本集合的大小.4.根據(jù)所給定包含多個屬性的數(shù)據(jù)集,直接計(jì)算P(X/Ci)的運(yùn)算量是非常大的為實(shí)現(xiàn)對P(X/G)的有效估算,樸素貝葉斯分類器通常都是假設(shè)各類別是相互獨(dú)立的即各屬性的取值是相互獨(dú)立的.即:nP(X/Ci)r【P(Xk/Ci)(3)kA可以根據(jù)訓(xùn)練數(shù)
5、據(jù)樣本估算P(Xi/Ci) , P(X2/Ci),P(Xn/Ci)的值,具體處理方法說明如下:若Ak是名稱型屬性,就有P(Xk/Ci)=Sk/Si,這里Sik為訓(xùn)練樣本中類別為 Ci且屬性Ak的取 值為Vk的樣本數(shù),S為訓(xùn)練樣本中類別為 Ci的樣本數(shù).P(Xk/Ci)就用概率密度f(Xk/Ci) 代(x-Cj)2若Ak是數(shù)值型屬性,那么假設(shè)屬性具有高斯分布,概率 替,即1f (xk ; G) = g (xk, %,、q)=其中,g(Xk,卩g, 3 g)為屬性Ak的高斯規(guī)范密度函數(shù),卩d, 3 ci為訓(xùn)練樣本中類別為 G的屬性為Ak的均值和方差.數(shù)值型屬性的均值計(jì)算公式為:Xmean=(Xl
6、+ x2+Xn )/n, 其中xi, X2,Xn表示數(shù)值型屬性的值,n表示實(shí)例個數(shù).數(shù)值型屬性的方差計(jì)算公式為:(Xi -Xmean)( x2 一 Xmean )丨丨 I ( x _ xmean )Devs 二其中X!, x2,xn表示數(shù)值型屬性的值,Xmean表示方差,n表示實(shí)例個數(shù).5.為預(yù)測一個樣本 X的類別,可對每個類別Ci估算相應(yīng)的P(X/Ci)P(Ci),樣本X歸屬 到類別 Ci,當(dāng)且僅當(dāng):P(Ci/X)> P(Cj/X)其中 K j < m, jM i.也可通過求百分比percent(G)= P(Ci/X)/刀P(Ck/X),百分比最大值對應(yīng)的類標(biāo)就位樣本X的類別.下
7、面就以有關(guān)天氣問題的數(shù)據(jù)為例仔細(xì)介紹一下樸素貝葉斯分類器進(jìn)行分類的過程.有關(guān)天氣的數(shù)據(jù)如下表所示:outlooktemperaturehumiditywin dyplay(類型)(溫度)(濕度)(風(fēng))(玩)sunny8585FalseNosunny8090TrueNoovercast8386FalseYesrai ny7096FalseYesrai ny6880FalseYesrai ny6570TrueNoovercast6465TrueYessunny7295FalseNosunny6970Falseyesrai ny7580Falseyessunny7570Trueyesovercast
8、7290Trueyesovercast8175Falseyesrai ny7191Trueno概率的表示方法:P(yes/sunny,80,76,false)=0.25 就表示在 outlook=sunny, temperature =80, humidity =76,windy=false 的條件下 paly=yes 條件概率為 0.25.1 求得名稱型屬性的后驗(yàn)概率以P(sunny/yes)為例進(jìn)行詳細(xì)說明.首先,計(jì)算類標(biāo)為yes的實(shí)例個數(shù)為9個,然后計(jì)算類標(biāo)為yes并且outlook屬性為sunny的實(shí)例個數(shù)為2,所以P(sunny/yes)=2/9,這是很自 然的事情,為了避免有時該概
9、率值為0,需要對該概率值進(jìn)行標(biāo)準(zhǔn)化:即分子加上屬性outlook值的個數(shù),也就是 3 (因?yàn)閛utlook的值有sunny, rainy, overcast三個),分母加上1,標(biāo)準(zhǔn)化 后的條件概率 P(sunny/yes)=(2+1)/(9+3)=3/12 .重復(fù)上述步驟,可得屬性outlook的后驗(yàn)概率為:P(su nny /yes)=3/12P (overcast/yes)=5/12P(rai ny /yes)=4/12P(su nny/n o)=4/8屬性windy的后驗(yàn)概率為:P(overcast/ no)=1/8P(rai ny/no)=3/8P(false/yes)=7/11P(f
10、alse /yes)=4/11P(false/no)=3/7P(false /n o)=4/72.求得數(shù)值型屬性的均值,Xn表示數(shù)值數(shù)值型屬性的均值計(jì)算公式為:Xmean=(X1+X2+Xn)/n,其中X1, X2,型屬性的值,n表示實(shí)例個數(shù).下面就以求在play=yes的條件下數(shù)值型屬性temperature的均值為例詳細(xì)說明求解過程: mea n- temperature(yes)=(83+70+68+64+69+75+75+72+81)/9=73同理:mean- temperature( no )=(85+80+65+72+71)/5=74.6mean- humidity (yes)=(
11、86+96+80+65+70+80+70+90+75)/9=79.1mean- humidity (no)=(85+90+70+95+91/5=86.23. 求得數(shù)值型屬性的方差數(shù)值型屬性的方差計(jì)算公式為:Devs =(X1 -xmea n)2(X2 Xmean)2 J" ( XnXmea n)2其中X1, x2, ,Xn表示數(shù)值型屬性的值,Xmean表示方差,n表示實(shí)例個數(shù)下面就以求在play=yes的條件下數(shù)值型屬性 temperature的方差為例詳細(xì)說明求解過程.Devs-temperature (yes)222222222=(83-73) +(70-73) +(68-73)
12、 +(64-73) +(69-73) +(75-73) +(75-73) +(72-73) +(81-73) )/9=6.2同理,可求得Devs-temperature (no)=7.9Devs-humidity (no)=10.2Devs-humidity (no)=9.74 求得類屬性的先驗(yàn)概率以P(yes)為例進(jìn)行詳細(xì)說明.首先計(jì)算數(shù)據(jù)集的實(shí)例總數(shù)為14,然后計(jì)算類標(biāo)為yes的實(shí)例總數(shù)為9,所以P(yes)=9/14,為避免有時該概率值為0,需要對該概率值進(jìn)行標(biāo)準(zhǔn)化:即分子加上類屬性 play值的個數(shù),也就是 2 (因?yàn)閜lay的值有yes, no二個),分母加上1, 標(biāo)準(zhǔn)化后的條件概率
13、 P(yes)=(9+1)/(14+2)=10/16,同理可求得 P(no)=(5+1”(14+2)=6/16 .5根據(jù)上述參數(shù)計(jì)算待分類實(shí)例屬于每個類的概率,選擇概率值最大的類作為待分類 實(shí)例的類標(biāo).下面以實(shí)例(sunny, 66, 90, true)為例說明一下其分類過程:首先求P(yes/sunny,66,90,true),根據(jù)bayes定理和條件獨(dú)立性假設(shè),P(yes/su nn y,66,90,true)=( P(yes)P(su nny /yes)P(true/yes)f(66/yes)f(90/yes)/P(su nn y,66,90,true)由于P(sunny,66,90,t
14、rue)為常數(shù),最后求類的百分比的時候可以抵消,可以不加考慮,所以我們P(true/yes)而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),已經(jīng)求得,根據(jù)正態(tài)分布假設(shè),f(66/yes), f(90/yes)也很容易求得.2 (x_mea n-temperature(yes)12(Devs-temperature(yes)2f (66 / yes)eJ2 兀 Devs-temperature(ye
15、s)1(66 J73)2=0.034 2 6.2同理可求得f(90/yes)=0.0221,所以:P(yes)P(sunny/yes) P(true/yes) f(66/yes)f(90/yes)=10/16 x 3/12 x 0.034 x 0.0221 x4/11=0.000043 .重復(fù)上述步驟可得:f(66/no)=0.0291 , f(90/no)=0.0380,因而有:P(no)P(sunny/ino)P(true/no) f(66/no) f(90/no)=6/16 x 4/8 x 4/7x 0.0291 x 0.0380=0.00018所以,待分類實(shí)例屬于類yes的百分比為pr
16、obability-of-yes=0.000043/(0.000043+0.000118)=26.7%probability-of- no=0.000118/(0.000043+0.000118)=73.3%因此,待分類實(shí)例的類屬性值為no.基于本文所述ID3的基本思想,ID3的具體算法是:下面我們介紹一下其算法實(shí)現(xiàn)的有關(guān)細(xì)節(jié).我們所介紹的ID3程序是在weka系統(tǒng)下利用java語言編寫的分類器程序.該程序主要包括以下幾個方法:globallnfo()返回該分類器的描述字符串.BuildClassifier(Instances instances)BuildClassifier()方法從一個訓(xùn)
17、練數(shù)據(jù)集合instances構(gòu)造一個分類器.求出所有名稱型屬性的后驗(yàn)概率,類屬性的先驗(yàn)概率,數(shù)值屬性的均值和方差,為后來的分類工作做準(zhǔn)備.distributionForInstance (Instance instance) 該方法計(jì)算待分類實(shí)例 instance 屬于各個類標(biāo)的百分比, 并且將各個百分比數(shù)值存于個數(shù)組中,最后返回該數(shù)組toString() 把分類器的參數(shù)(均值,方差,各先驗(yàn)概率,各后驗(yàn)概率)以字符串的形式返回 normalDens(double x, double mean, double stdDev)該方法用于根據(jù)正態(tài)分布(均值為mean,方差為stdDev)計(jì)算數(shù)值型屬
18、性當(dāng)屬性值為x 時的概率密度Main()當(dāng)類從命令行被執(zhí)行時,就會調(diào)用main()方法它只是用所給的命令行選項(xiàng)告訴Weka的Evaluation類來評估樸素貝葉斯,并且打印所得到的數(shù)組.完成這個功能的一行表達(dá)式包括在try-catch聲明中.try-catch聲明用于發(fā)現(xiàn) Weka例程或其它Java方法中拋出的各種異常.附一:樸素貝葉斯源程序及其注解:/* This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public Licen
19、se 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 hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR
20、POSE.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, write to the Free Software* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA./* 本程序?yàn)槊赓M(fèi)軟件 ;你可以通過免費(fèi)軟件中心的發(fā)布的 GNU 公共許可的任何版本下 下重寫或者修改它 .*
21、 開發(fā)本程序的目的是是希望它是有用的,但沒有任何授權(quán) ,甚至沒有潛在的商用或其它特殊目的的授權(quán) .* 想要了解更多細(xì)節(jié) , 請參閱 GNU 公共許可 .Inc.,*在拿到程序的同時 ,你應(yīng)該收到 GNU 公共許可 ;假如沒有的話 ,請致函免費(fèi)軟件中心 675 MassAve, Cambridge, MA 02139, USA./* NaiveBayesSimple.java*Copyright (C) 1999 Eibe Frank*/package weka.classifiers.bayes;import weka.classifiers.Classifier;import weka.cl
22、assifiers.Evaluation;import java.io.*;import java.util.*;import weka.core.*;/* Class for building and using a simple Naive Bayes classifier.* Numeric attributes are modelled by a normal distribution. For more* information, see<p>* Richard Duda and Peter Hart (1973).<i>Pattern* Classifica
23、tion 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 NaiveBayesSimple e Xtends Classifier /分類器的構(gòu)造函數(shù)public NaiveBayesSimple() try jbln it();/分類器初始化 catch (E Xception eX) eX.pri nt
24、StackTrace(); /創(chuàng)建分類器對象時若出現(xiàn)異常則輸出堆棧信息/* All the counts for nomi nal attributes.所有名稱型屬性的計(jì)數(shù)數(shù)組*/protected double m_Cou nts;/*屬于每個類每個名稱型屬性的每個取值的個數(shù)數(shù)組其中第一維表示類名,第二維表示屬性名,第三維表示屬性值,比如m_Co un tsyesoutlooks unny */* The mea ns for numeric attributes. 數(shù)值型屬性的均值數(shù)組 */protected double m_Mea ns;/*數(shù)值型屬性的均值數(shù)組,其中第一維表示類名,
25、第二維表示屬性名,比如m_Meansnotemperature,公式為:x _洛+X2+川 III+人Xmean _n*/* The standard deviations for numeric attributes.數(shù)值型屬性的標(biāo)準(zhǔn)差數(shù)組*/protected double m_Devs;/*數(shù)值型屬性的標(biāo)準(zhǔn)差數(shù)組,其中第一維表示類名,第二維表示屬性名,比如m_Devsnotemperature,公式為:Devs =22(Xi -Xmean)' (X Xmean)(X X)2mea n )n -1(8)*/* The prior probabilities of the class
26、es.每個類的先驗(yàn)概率數(shù)組*/protected double m_Priors;/每個類的先驗(yàn)概率,第一維表示類名,比如m_Prioryes/* The in sta nces used for training.用于訓(xùn)練的實(shí)例*/protected In sta nces m_ln sta nces;/定義用于訓(xùn)練的實(shí)例/* Con sta nt for no rmal distributi on.正態(tài)分布常量*/protected static double NORM_CONST = Math.sqrt(2 * Math.PI);/正態(tài)分布常量 J2/* Returns a string
27、 describing this classifier* return a description of the classifier suitable for* displaying in the e Xplorer/eXperimenter gui*/*返回該分類器的描述字符串*返回適合于圖形界面用戶的分類器的描述*/方法一:public String globalInfo() /返回該分類器的描述字符串return "Class for building and using a simple Naive Bayes classifier." +"Numeri
28、c 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.* param instances set of instances serving as training data*
29、 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 E Xception / 構(gòu)造分類器int attInde X = 0; /屬性索引double sum; /屬于每個類的每個名稱型屬性的總個數(shù) if (instances.checkForStringAttribute
30、s() throw new UnsupportedAttributeTypeE Xception("Cannot handle string attributes!"); / 若實(shí)例集合為 string 型則提示異常if (instances.classAttribute().isNumeric() throw new UnsupportedClassTypeE Xception("Naive Bayes: Class is numeric!"); / 若實(shí)例集合的類屬性為數(shù)值型則提示異常m_Instances = new Instances(insta
31、nces, 0); / 空實(shí)例/ Reserve space 為數(shù)組 m_Counts,m_Means,m_Devs,m_Priors分配空間m_Counts = new doubleinstances.numClasses() instances.numAttributes() - 10;/* 屬于每個類每個名稱型屬性的每個取值的個數(shù)數(shù)組,其中第一維表示類名 ,第二維表示屬性名,第三維表示屬性值,instances.numClasses()返回實(shí)例集的類值的個 數(shù),instances.numAttributes()返回實(shí)例集的屬性個數(shù),包括類屬性,這也是第二維減一的原因,第 三維之所以為零是
32、 因?yàn)楹罄m(xù)分配空間的方便 */m_Means = new doubleinstances.numClasses() instances.numAttributes() - 1;/* 數(shù) 值 型 屬 性 的 均 值 數(shù) 組 , 其 中 第 一 維 表 示 類 名 , 第 二 維 表 示 屬 性 名,instances.numClasses()返回實(shí)例集的類值的個數(shù),instances.numAttributes()返回實(shí)例集的屬性個數(shù) ,包括類屬性 ,這也是第二維減一的原因 , */m_Devs = new doubleinstances.numClasses()instances.numAtt
33、ributes() - 1;/* 數(shù) 值 型 屬 性 的 標(biāo) 準(zhǔn) 差 數(shù) 組 , 其 中 第 一 維 表 示 類 名 , 第 二 維 表 示 屬 性 名,instances.numClasses()返回實(shí)例集的類值的個數(shù),instances.numAttributes()返回實(shí)例集的屬性個數(shù) ,包括類屬性 ,這也是第二維減一的原因 , */m_Priors = new doubleinstances.numClasses();/*每個類的先驗(yàn)概率數(shù)組,第一維表示類名,in sta nces. nu mClasses()返回實(shí)例集的類值的 個數(shù) , */第一步:Enumeration enu =
34、 instances.enumerateAttributes();/返回一個實(shí)例集的屬性集while (enu.hasMoreElements() /遍歷實(shí)例集的每個屬性,為 m_Counts 分配空間Attribute attribute = (Attribute) enu.ne XtElement();/循環(huán)從屬性集中取每個屬性if (attribute.isNominal() /屬性若為名稱型屬性for (int j = 0; j < instances.numClasses(); j+) /遍歷類m_CountsjattInde X = new doubleattribute.n
35、umValues();m_Counts 預(yù)留空/* 為屬于每個類的每個名稱型屬性的每個取值的個數(shù)數(shù)組間 attribute.numValues()返回屬性 attibute 的值的個數(shù).*/ else /屬性若為數(shù)值型屬性for (int j = 0; j < in sta nces.nu mClasses(); j+) / 遍歷類m_Cou ntsjatt In de X = new double1;/若該屬性不為名稱型屬性,則數(shù)組初始化為長度為1的一維數(shù)組attIndeX+;/屬性索引加一,執(zhí)行下一個屬性第二步:Enu merati on enu = in sta nces.e nu
36、 merateAttributes();/ 返回一個實(shí)例集的屬性集while (enu.hasMoreElements() /遍歷實(shí)例集的每個屬性,為 m_Counts分配空間Attribute attribute = (Attribute) enu.ne XtElement();循環(huán)從屬性集中取每個屬性if (attribute.isNomi nal() / 屬性若為名稱型屬性for (int j = 0; j < in sta nces.nu mClasses(); j+) / 遍歷類m_CountsjattInde X = new doubleattribute.numValues
37、。;/*為屬于每個類的每個名稱型屬性的每個取值的個數(shù)數(shù)組m_Counts預(yù)留空間,attribute.numValues()返回屬性 attibute 的值的個數(shù).*/ else /屬性若為數(shù)值型屬性for (int j = 0; j < in sta nces.nu mClasses(); j+) / 遍歷類m_Cou ntsjatt In de X = new double1;/若該屬性不為名稱型屬性,則數(shù)組初始化為長度為1的一維數(shù)組attIndeX+;屬性索引加一,執(zhí)行下一個屬性/*Compute means計(jì)算數(shù)值型屬性的均值,公式為:_治+X2 +川1(| +人Xmean _n
38、*/第三步:(9)Enu merati on enu mAtts = in sta nces.e nu merateAttributes();返回實(shí)例集對應(yīng)的屬性的集合attlndeX = 0;屬性索引,用于循環(huán)遍歷屬性while (enumAtts.hasMoreElements() /遍歷屬性,計(jì)算數(shù)組 m_MeansAttribute attribute = (Attribute) enu mAtts. ne XtEleme nt();/ 取得一個屬性if (attribute.isNumeric() /該屬性為數(shù)值型屬性則繼續(xù)執(zhí)行for (int j = 0; j < insta
39、nces.numClasses(); j+) /遍歷類標(biāo),計(jì)算數(shù)組 m_Meansif (m_Countsjattlnde X0 < 2) /若該類值對應(yīng)的數(shù)值型屬性值個數(shù)小于2則拋出異常throw new E Xception("attribute " + () +":less tha n two values for class " +in sta nces.classAttribute().value(j);m_Mea nsjatt In de X /= m_Cou ntsjatt In de X0;/ 求得該數(shù)值
40、型屬性的每個類標(biāo)對應(yīng)的均值att In deX+;/屬性索引加1,繼續(xù)執(zhí)行下一屬性第四步:/* Compute sta ndard deviatio ns計(jì)算數(shù)值型屬性的標(biāo)準(zhǔn)差,公式為:Devs 二(x1 -Xmean)(X2 - Xmean )( Xn Xmean )(10)*/enumlnsts = instances.enumerateInstances(); /取得實(shí)例集合while (enumlnsts.hasMoreElements() /*遍歷實(shí)例集合,計(jì)算數(shù)值型 屬性的m_Devs,本循環(huán)的結(jié)果是在m_Devs存放方差計(jì)算公式中的分子,即偏移量的平方和*/In sta nee
41、in sta nee = (In sta nee) en uml nsts .n eXtEleme nt();從實(shí)例集合中取出一個實(shí)例if (!i nsta nce.classlsMiss in g() II若該實(shí)例類信息完整的話則繼續(xù)執(zhí)行en umAtts = in sta nces.e numerateAttributes();II 取得實(shí)例集對應(yīng)的的屬性集attlndeX = 0;屬性索引,用于遍歷屬性while (enumAtts.hasMoreElements() II遍歷屬性,計(jì)算數(shù)值型屬性的m_DevsAttribute attribute = (Attribute) enumA
42、tts.neXtElement();II從屬性集合中取得一個 屬性if (!instance.isMissing(attribute) / 若該實(shí)例的該屬性沒有缺損則繼續(xù)執(zhí)行if (attribute.isNumeric() /若該屬性為數(shù)值型屬性則繼續(xù)執(zhí)行m_Devs(int)instance.classValue()attInde X +=(m_Means(int)instance.classValue()attInde X-instance.value(attribute)*(m_Means(int)instance.classValue()attInde X-instance.valu
43、e(attribute); /求得偏移量的平方和 ,即方差就算公式中的分子attIndeX+; /屬性索引加 1,繼續(xù)執(zhí)行下一屬性enumAtts = instances.enumerateAttributes(); /取得實(shí)例集對應(yīng)的屬性集合attIndeX = 0; /屬性索引 ,用于遍歷屬性while (enumAtts.hasMoreElements() /遍歷屬性 ,計(jì)算每個數(shù)值型屬性的方差 , 結(jié) 果存于 m_DevsAttribute attribute = (Attribute) enumAtts.ne XtElement(); /從屬性集合中取得一個 屬性if (attrib
44、ute.isNumeric() / 若該屬性為數(shù)值型則繼續(xù)執(zhí)行for (int j = 0; j < instances.numClasses(); j+) / 遍歷類 ,求得該數(shù)值型的每個類值的標(biāo)準(zhǔn)差if (m_DevsjattInde X <= 0) / 若偏移量的平方和為 0,則拋出異常 ,否則計(jì)算 m_Devsthrow new E Xception("attribute " + () +": standard deviation is 0 for class " + instances.classAttr
45、ibute().value(j);else / 為什么 (_CountsjattInde X0 - 1)m_DevsjattInde X /= m_CountsjattInde X0 - 1; /* 利用偏移量的平方和除 以數(shù)值型屬性的個數(shù)減 1 求得標(biāo)準(zhǔn)差的平方 */m_DevsjattInde X = Math.sqrt(m_DevsjattInde X); /對上一步的結(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_
46、CountsenumAtts = instances.enumerateAttributes(); /取得屬性集合attIndeX = 0; /屬性索引 ,用于遍歷屬性while (enumAtts.hasMoreElements() / 遍歷屬性 ,求得概率數(shù)組 m_CountsAttribute attribute = (Attribute) enumAtts.ne XtElement(); /從屬性集合中取得一 個屬性if (attribute.isNominal() / 若屬性為名稱型屬性則繼續(xù)執(zhí)行for (int j = 0; j < instances.numClasses(
47、); j+) /遍 歷 類,求得 概 率數(shù) 組 m_Countssum = Utils.sum(m_CountsjattInde X); /* 計(jì)算該類對應(yīng)的實(shí)例的總數(shù), 函數(shù)Utils.sum(m_CountsyesOutlook) 返回屬于 "yes" 類的實(shí)例個數(shù) */for (int i = 0; i < attribute.numValues(); i+) /遍歷該屬性對應(yīng)的屬性值m_CountsjattInde Xi = (m_CountsjattInde Xi + 1) / (sum + (double)attribute.numValues();/*
48、計(jì)算該類值對應(yīng)的該屬性值的概率(分子為 m_Counts+1, 分母為該類值對應(yīng)的實(shí)例 的 總 數(shù) 加 上 屬 性 值 的 個 數(shù) ), 比 如 m_CountsyesOutlooksunny=(m_CountsyesOutlooksunny+1)/(sum + 屬性值的個數(shù) ) */ attIndeX+;/屬性索引加 1,繼續(xù)執(zhí)行下一屬性第六步:/ Normalize priors 標(biāo)準(zhǔn)化先驗(yàn)概率sum = Utils.sum(m_Priors); /計(jì)算實(shí)例的總數(shù)for (int j = 0; j < instances.numClasses(); j+) / 遍歷類m_Priors
49、j = (m_Priorsj + 1) / (sum + (double)instances.numClasses();/* 計(jì)算每個類的先驗(yàn)概率 ( 分子為每個類的實(shí)例個數(shù)加 1,分母為實(shí)例集的實(shí)例總數(shù)加上類標(biāo)的個數(shù)) */* Calculates the class membership probabilities for the given test instance.* param instance the instance to be classified* return predicted class probability distribution* e Xception E X
50、ception if distribution can't be computed*/*計(jì)算給定測試?yán)念惛怕史植?參數(shù) instance 表示待分類的實(shí)例*返回預(yù)測概率分布表*若預(yù)測概率分布不能計(jì)算的話返回異常*/方法三:public double distributionForInstance(Instance instance) throws E Xception double probs = new doubleinstance.numClasses(); / 預(yù)測概率百分比數(shù)組 ,該數(shù)組 將要存放的是待定實(shí)例屬于每個類的概率所占的百分比int attInde X; /屬性標(biāo)記
51、 ,用于遍歷屬性for (int j = 0; j < instance.numClasses(); j+) / 遍歷每個類 ,計(jì)算 probs probsj = 1; /對數(shù)組 probs 進(jìn)行初始化Enumeration enumAtts = instance.enumerateAttributes(); /取得待定實(shí)例的屬性集 合attIndeX = 0; /屬性標(biāo)記置 0,將要開始遍歷while (enumAtts.hasMoreElements() / 屬性遍歷Attribute attribute = (Attribute) enumAtts.ne XtElement();
52、/從屬性集合中取得一個屬性if (!instance.isMissing(attribute) /若給定實(shí)例的屬性沒有缺損則繼續(xù)執(zhí)行if (attribute.isNominal() / 若該屬性為名稱型屬性則繼續(xù)執(zhí)行probsj *= m_CountsjattInde X(int)instance.value(attribute); / 該屬性為名 稱型屬性就直接乘以該類該屬性值的概率 m_Counts( 上面已經(jīng)計(jì)算 ) else probsj *= normalDens(instance.value(attribute), m_MeansjattInde X, m_DevsjattInd
53、e X); /該屬性為數(shù)值型屬性就乘以該類該屬性 值對應(yīng)的概率密度 (利用正態(tài)分布概率密度公式求出 )attIndeX+; /屬性值加 1,繼續(xù)遍歷下一屬性probsj *= m_Priorsj; / 用 probsj 乘以先驗(yàn)概率 m_Priorsj, 結(jié)果表示 bayias 公 式的分子/ Normalize probabilities 標(biāo)準(zhǔn)化待定實(shí)例屬于每個類的概率所占的百分比 Utils.normalize(probs); /* 求得 待定實(shí) 例屬于每個類的 概率所 占的百分比,即 probsj=probsj/(probs0+probs1+probs2+) */return probs
54、; / 返回/* Returns a description of the classifier.* return a description of the classifier as a string.*/*返回分類器的描述*/方法四:public String toString() if (m_Instances = null) return "Naive Bayes (simple): No model built yet."/* 若實(shí)例集為空 ,則返回 "NaiveBayes (simple): No model built yet." */try StringBuffer teXt = new StringBuffer("Naive Bayes (simple)"); /建立字符串緩沖 區(qū),用于描述分類器int attInde X; /建立屬性索引索引for (int i = 0; i < m_Instances.numClasses(); i+) /遍歷類teXt.a
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度大棚農(nóng)業(yè)保險合作合同2篇
- 2025年沙地土地整治與生態(tài)恢復(fù)承包合同4篇
- 2025年度智能物流承包裝卸平臺合同4篇
- 二零二五年度抽沙船租賃與海岸修復(fù)合同4篇
- 2025年度個人二手房交易買賣合同書標(biāo)準(zhǔn)版2篇
- 2025年鋼材采購綠色認(rèn)證服務(wù)合同3篇
- 二零二五年度新媒體內(nèi)容制作合同樣本2篇
- 二零二五年度車輛識別技術(shù)設(shè)備銷售與產(chǎn)品升級合同4篇
- 開學(xué)季初三沖刺中考開學(xué)第一課為夢想加油課件
- 杭州浙江杭州淳安縣千島湖鎮(zhèn)養(yǎng)老服務(wù)中心招聘工作人員5人筆試歷年參考題庫附帶答案詳解
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年參考題庫含答案解析
- 國旗班指揮刀訓(xùn)練動作要領(lǐng)
- 2024年國家工作人員學(xué)法用法考試題庫及參考答案
- 國家公務(wù)員考試(面試)試題及解答參考(2024年)
- 《阻燃材料與技術(shù)》課件 第6講 阻燃纖維及織物
- 2021-2022學(xué)年遼寧省重點(diǎn)高中協(xié)作校高一上學(xué)期期末語文試題
- 同等學(xué)力英語申碩考試詞匯(第六版大綱)電子版
- 人教版五年級上冊遞等式計(jì)算100道及答案
- 墓地個人協(xié)議合同模板
- 2024年部編版初中語文各年級教師用書七年級(上冊)
- 2024年新課標(biāo)全國Ⅰ卷語文高考真題試卷(含答案)
評論
0/150
提交評論